A Kontur.Talk call — a ready video for social media
Your screen, Claude or a browser page fills the frame. You and your guest sit below in neat circles. Landscape or portrait, no editing.
No editing
Content from a conversation you were having anyway
A talk with an expert, a walkthrough, a tool demo — when the call ends you have a finished clip, not raw footage that takes a week to cut.
One frame
Your layout, not the service's grid
The screen large, speakers in circles, the same in every episode. 16:9 for YouTube, or 9:16 for Reels and Shorts with room for the app's interface.
Private
Only what you show ends up in the frame
One Claude window or one browser tab. Notifications, other tabs and the desktop stay out of the recording.
With Claude
Setup is one prompt
No need to learn OBS: Claude installs and configures everything. Your guest can repeat the setup on their own Mac with the same prompt.
Who it is for: experts and teachers who demo AI tools; hosts of shows with guests; anyone whose calls happen in Kontur.Talk and who never has enough social media content.
What to do
See what you get — two layouts, 16:9 and 9:16.
Set up OBS — hand the prompt to Claude, it installs and configures everything. 10–15 minutes.
Pick the format — two switches in the OBS menu.
Go through the checklist before recording — ticks are kept in your browser.
If something goes wrong — section 7 lists every pitfall found so far.
1What you get
Landscape 16:9YouTube · VK Video
Portrait 9:16Reels · Shorts
The circles are your camera and the guest's tile cut out of the Kontur.Talk window. Both get a white ring and light colour correction.
How it works
The recording is made by OBS Studio, not by Kontur.Talk. OBS is free software for recording and streaming. Kontur.Talk carries the conversation itself: the guest sees your screen share as usual. Meanwhile OBS captures the screen directly and takes the guest's video from the Kontur.Talk window, so the picture is sharp and the layout never changes.
What you can show
Full screen — everything, notifications and other windows included.
Claude window — the Claude app only.
Browser window — one page without tabs or the address bar, see section 5.
2Set up with Claude
You do not have to go through the setup by hand. The prompt below describes the finished result, the order of work and the pitfalls already found. It contains a script that draws the circle masks and builds both layouts into files OBS takes in through import.
What you need
A Mac and the Claude app in Cowork mode with your computer connected, so Claude can click buttons in OBS.
Kontur.Talk open, so Claude can pick its window.
Five minutes of your attention: camera, microphone and screen recording permissions on macOS can only be granted by a person.
Prompt for Claude · full
Set up OBS Studio on this Mac so that I can record Kontur.Talk calls as ready-to-post social media videos. You have access to my computer: do the work yourself and only ask me where my decision or a system permission is needed.
## The result
Two frame layouts:
- Landscape 16:9 (1920×1080): the screen fills the frame, two 280 px circles bottom right — me and the guest from Kontur.Talk.
- Portrait 9:16 (1080×1920): the screen at the top (a 1080×675 area, 260 px from the top edge), two 440 px circles below it. The top ~250 px and bottom ~450 px are covered by captions and buttons in Reels and Shorts, so nothing goes there.
Each layout has one scene, "Talk recording", with these sources:
- "Full screen" — display capture (visible);
- "Claude window" — application capture of Claude (hidden);
- "Browser window" — capture of a single Chrome window, 230 px cropped off the top: tab strip, address bar, bookmarks (hidden);
- "Me — camera" — built-in camera, filters: light colour correction and a circle mask, with a white ring on top;
- "Guest — Talk window" — window capture of Kontur.Talk, filters: crop to the guest's tile, colour correction, circle mask, with a ring on top;
- "Talk audio (guest)" — audio of the Kontur.Talk app, plus "My microphone".
Audio on the screen, window and camera sources is muted so voices are not doubled.
## Order of work
1. Check this is macOS. On Windows, stop and tell me: the sources are named differently there and the plan needs adapting.
2. Install OBS Studio if it is missing: `brew install --cask obs`, or, without Homebrew, ask me to download the installer from obsproject.com. Launch OBS. If the auto-configuration wizard opens, close it.
3. I grant system permissions myself. Ask me to allow OBS access to the camera, the microphone and "Screen & System Audio Recording" (System Settings → Privacy & Security). OBS has to be restarted after screen recording is allowed.
4. Create the masks and scene files with the script below. It needs Python 3 with Pillow: if Pillow is missing, run `pip3 install --user pillow`. The script puts everything into "Movies/OBS for Talk".
5. In OBS: menu Scene Collection → Import, add both "Talk recording 16x9.json" and "Talk recording 9x16.json", click Import.
6. Profiles: Profile → Duplicate → "Landscape 16x9", then again → "Portrait 9x16". In each, Settings → Video: Base (Canvas) Resolution and Output (Scaled) Resolution — 1920x1080 or 1080x1920. Settings → Output → Recording: Recording Quality — "High Quality, Medium File Size", Recording Format — "Hybrid MP4", Video Encoder — "Hardware (Apple, H.264)". Recording path — Movies.
7. Pick the devices in each of the two collections (switch with Profile + Scene Collection). Double-clicking a source opens its properties:
- "Full screen": Display — the built-in display;
- "Claude window": Display — the built-in display, Application — Claude;
- "Me — camera": Device — FaceTime HD Camera, Preset — High;
- "Guest — Talk window": Method — Window Capture, Window — the Kontur.Talk window (app name "Толк"). Kontur.Talk must be open;
- leave "Browser window" empty unless I ask otherwise.
8. Check visually: screenshot the preview of both layouts — circles are round, the screen is in place. Make a 10-second test recording and check the file: `ffprobe` should report H.264, AAC and the right resolution.
9. Tell me briefly what is done and what is left to me: pointing the guest's circle at their face during a real call (the "Crop guest tile" filter, fields X, Y, Width, Height; width = height).
OBS labels may differ slightly between versions and interface languages — go by meaning.
## Known pitfalls
- The camera circle is empty after switching collections: the 1920x1080 preset is sometimes unavailable. Use "High".
- "Paste (Duplicate)" is not available for screen capture sources in OBS: a new capture source has to be created from scratch with "+".
- OBS does not see hidden or minimised windows. For the browser window, turn on the option to show fullscreen and hidden windows, and un-minimise the window.
- What gets recorded is the Program view. If Studio Mode is on and Program is empty, click Transition.
- Kontur.Talk rearranges its window while sharing a screen, so the guest's crop is tuned during the call.
- Suggest recording in headphones, otherwise the guest's voice reaches the microphone twice.
## Script
```python
import json, uuid
from pathlib import Path
from PIL import Image, ImageDraw
D = Path.home() / "Movies" / "OBS for Talk"
D.mkdir(parents=True, exist_ok=True)
# --- masks and ring ---
def draw(w, h, box, ring=0):
s = 4
im = Image.new("RGBA", (w * s, h * s), (0, 0, 0, 0))
d = ImageDraw.Draw(im)
b = [v * s for v in box]
b[2] -= 1; b[3] -= 1
if ring:
d.ellipse(b, outline=(255, 255, 255, 255), width=ring * s)
else:
d.ellipse(b, fill=(255, 255, 255, 255))
return im.resize((w, h), Image.LANCZOS)
draw(1000, 1000, (0, 0, 1000, 1000)).save(D / "circle-mask.png")
draw(1920, 1080, (420, 0, 1500, 1080)).save(D / "circle-mask-16x9.png")
draw(1000, 1000, (0, 0, 1000, 1000), ring=14).save(D / "circle-ring.png")
# --- scene collections ---
P = str(D) + "/"
HK = {"libobs.mute": [], "libobs.unmute": [], "libobs.push-to-mute": [], "libobs.push-to-talk": []}
def src(name, id_, settings, vid=None, filters=None, mixers=255, mute=False):
s = {"prev_ver": 537001986, "name": name, "uuid": str(uuid.uuid4()), "id": id_,
"versioned_id": vid or id_, "settings": settings, "mixers": mixers, "sync": 0,
"flags": 0, "volume": 1.0, "balance": 0.5, "enabled": True, "muted": mute,
"push-to-mute": False, "push-to-mute-delay": 0, "push-to-talk": False,
"push-to-talk-delay": 0, "hotkeys": dict(HK), "deinterlace_mode": 0,
"deinterlace_field_order": 0, "monitoring_type": 0, "private_settings": {}}
if filters:
s["filters"] = filters
return s
def flt(name, id_, settings, vid=None):
return {"prev_ver": 537001986, "name": name, "uuid": str(uuid.uuid4()), "id": id_,
"versioned_id": vid or id_, "settings": settings, "enabled": True,
"mixers": 0, "sync": 0, "flags": 0, "volume": 1.0, "balance": 0.5, "muted": False,
"hotkeys": {}, "deinterlace_mode": 0, "deinterlace_field_order": 0,
"monitoring_type": 0, "private_settings": {}}
def look():
return flt("Light colour correction", "color_filter",
{"gamma": -0.08, "brightness": 0.02, "contrast": 0.06, "saturation": 0.10,
"hue_shift": 0.0, "opacity": 1.0, "color_multiply": 4293850879,
"color_add": 4278190080}, "color_filter_v2")
def mask(path):
return flt("Circle", "mask_filter",
{"type": "mask_alpha_filter.effect", "image_path": path}, "mask_filter_v2")
def collection(name, W, H, L):
screen = src("Full screen", "screen_capture", {"type": 0, "show_cursor": True, "hide_obs": True}, mute=True)
claude = src("Claude window", "screen_capture", {"type": 2, "application": "com.anthropic.claudefordesktop",
"show_cursor": True, "hide_obs": True}, mute=True)
browser = src("Browser window", "screen_capture", {"type": 1, "show_cursor": True}, mute=True)
cam = src("Me — camera", "macos-avcapture", {"use_preset": True, "preset": "AVCaptureSessionPresetHigh"},
filters=[look(), mask(P + "circle-mask-16x9.png")], mute=True)
talk = src("Guest — Talk window", "screen_capture", {"type": 1, "show_cursor": False},
filters=[flt("Crop guest tile", "crop_filter",
{"relative": False, "left": 0, "top": 0, "cx": 600, "cy": 600}),
look(), mask(P + "circle-mask.png")], mute=True)
talk_audio = src("Talk audio (guest)", "sck_audio_capture", {"type": 1, "application": "kontur.talk"})
ring_me = src("Ring — me", "image_source", {"file": P + "circle-ring.png"})
ring_talk = src("Ring — guest", "image_source", {"file": P + "circle-ring.png"})
bg = src("Background", "color_source", {"color": 4280295456, "width": W, "height": H}, "color_source_v3")
items, hot = [], {"OBSBasic.SelectScene": []}
def item(s, x, y, bw, bh, btype=2, crop=False, visible=True, top=0):
i = len(items) + 1
hot[f"libobs.show_scene_item.{i}"] = []
hot[f"libobs.hide_scene_item.{i}"] = []
items.append({"name": s["name"], "source_uuid": s["uuid"], "visible": visible, "locked": False,
"rot": 0.0, "align": 5, "bounds_type": btype, "bounds_align": 0, "bounds_crop": crop,
"crop_left": 0, "crop_top": top, "crop_right": 0, "crop_bottom": 0, "id": i,
"group_item_backup": False, "pos": {"x": float(x), "y": float(y)},
"scale": {"x": 1.0, "y": 1.0}, "bounds": {"x": float(bw), "y": float(bh)},
"scale_filter": "disable", "blend_method": "default", "blend_type": "normal",
"show_transition": {"duration": 300}, "hide_transition": {"duration": 300},
"private_settings": {}})
item(bg, 0, 0, W, H, btype=1)
item(screen, *L["screen"])
item(browser, *L["screen"], visible=False, top=230) # 230 px off the top: tab strip, address bar, bookmarks
item(claude, *L["screen"], visible=False)
item(talk, *L["talk"])
item(ring_talk, *L["talk"])
item(cam, *L["me"], btype=3, crop=True)
item(ring_me, *L["me"])
item(talk_audio, 0, 0, 0, 0, btype=0)
scene = src("Talk recording", "scene", {"id_counter": len(items), "custom_size": False, "items": items}, mixers=0)
scene["hotkeys"] = hot
scene["canvas_uuid"] = "6c69626f-6273-4c00-9d88-c5136d61696e"
return {"name": name,
"AuxAudioDevice1": src("My microphone", "coreaudio_input_capture", {"device_id": "default"}),
"groups": [], "scene_order": [{"name": "Talk recording"}],
"current_scene": "Talk recording", "current_program_scene": "Talk recording",
"canvases": [], "current_transition": "Fade", "transition_duration": 300,
"transitions": [], "quick_transitions": [], "saved_projectors": [], "preview_locked": False,
"scaling_enabled": False, "scaling_level": 0, "scaling_off_x": 0.0, "scaling_off_y": 0.0,
"modules": {}, "resolution": {"x": W, "y": H}, "version": 2,
"sources": [screen, browser, claude, cam, talk, talk_audio, ring_me, ring_talk, bg, scene]}
d, m, g = 280, 40, 24
h = collection("Talk recording 16x9", 1920, 1080, {"screen": (0, 0, 1920, 1080),
"me": (1920 - m - d, 1080 - m - d, d, d), "talk": (1920 - m - 2 * d - g, 1080 - m - d, d, d)})
d, g = 440, 60
x0 = (1080 - 2 * d - g) // 2
v = collection("Talk recording 9x16", 1080, 1920, {"screen": (0, 260, 1080, 675),
"talk": (x0, 1010, d, d), "me": (x0 + d + g, 1010, d, d)})
for c in (h, v):
(D / f"{c['name']}.json").write_text(json.dumps(c, ensure_ascii=False, indent=2), encoding="utf-8")
print("Done:", D)
```
How to hand it over
Copy the prompt, paste it into a new Claude chat and send. From then on Claude only asks about permissions. At the end it sends screenshots of both layouts and checks a test recording.
One thing is left to you: pointing the circle at the guest during a real call — step 05 in section 4.
3Pick the format
The OBS menu bar has two switches. Change both, otherwise the frame size and the layout will not match.
You want
Profile menu
Scene Collection menu
Landscape video
Landscape 16x9
Talk recording 16x9
Portrait video
Portrait 9x16
Talk recording 9x16
Recordings go to the Movies folder as MP4, which every social network accepts. The file is named after the date and time.
4Before every recording
Put on headphones
Without them the guest's voice from the speakers reaches the microphone and sounds twice in the recording.
Join the meeting in Kontur.Talk
OBS takes the guest's video from the Kontur.Talk window, so the window must be open, not minimised.
Open OBS and pick the format
Profile and scene collection — from the table in section 3.
Check the Kontur.Talk window
After Kontur.Talk restarts, OBS loses it. Double-click Guest — Talk window → Window → the Kontur.Talk window → OK.
Point the circle at the guest
Select Guest — Talk window → Filters → Crop guest tile. X and Y set where to cut, Width and Height set the size. Keep them equal or the circle turns into an oval.
Choose what to show
In Sources, the eye is on for only one of three: Full screen, Claude window or Browser window.
Start screen sharing in Kontur.Talk
If the guest should see what viewers see. Kontur.Talk rearranges its window when you do, so check the circle from step 05 again.
Check Program and click Start Recording
What is recorded is the Program view. If it is empty, click Transition. At the end — Stop Recording.
0 of 8
5A single browser tab
The recording shows one page — no other tabs, bookmarks, notifications or the rest of the screen. Meanwhile you can keep working in another Chrome window.
Move the tab into its own window
Drag the tab out of the Chrome window and let go. Keep only this tab in that window: if you open another one there, that is what gets recorded.
Pick that window in OBS
Double-click Browser window → Method: Window Capture → in the Window list, [Google Chrome] page title → OK. Not in the list? Turn on the option to show fullscreen and hidden windows.
Switch the eyes
On for Browser window, off for Full screen and Claude window, otherwise they show around the edges.
Check the top of the frame
The tab strip, address bar and bookmarks are already cut: 230 px off the top. If something still shows or part of the page is cut — right-click Browser window → Transform → Edit Transform → Crop, Top.
For the guest
In Kontur.Talk it is also better to share just this window rather than the whole screen, if it lets you choose a window. Then the guest does not see anything extra either.
6Look
Colour correction
Both circles already have the Light colour correction filter: a touch brighter, softer contrast, a warm tint. To turn it off — the source's Filters, the eye next to the filter.
The guest's background
The guest's video arrives from Kontur.Talk already finished: OBS cannot change their background. If they want it blurred, they turn that on at their end.
Circle position
You can drag the circles in the OBS preview if they cover something on screen. Select a circle and its ring with Cmd held down and move them together.
7If something is off
What you seeWhat to do
The camera circle is empty
After switching collections the camera does not start in time.
Double-click Me — camera.
Device — FaceTime HD Camera, Preset — High.
OK, wait a couple of seconds.
The guest's circle shows part of the window, not a face
The Kontur.Talk layout shifted: screen sharing started, someone joined, the window was resized.
Adjust X and Y in the crop filter (step 05). If the circle is completely empty, pick the window again (step 04).
The guest's voice sounds twice or echoes
Sound from the speakers gets into the microphone, or an extra source is live in the mixer.
Put on headphones. In the Audio Mixer only My microphone and Talk audio (guest) should be live. Audio on the screen, window and camera sources is muted on purpose — the crossed-out speaker.
The recording is black or shows the wrong frame
Studio Mode is on: Preview on the left, Program on the right, and Program is what gets recorded.
Click Transition, or turn Studio Mode off with the button at the bottom right.
The browser window is not in the list, or the frame is empty
Chrome is minimised or hidden, and OBS cannot see such a window.
Restore the window. In Browser window properties turn on the option to show hidden windows, then pick the window again.
8Where the settings live
Movies/OBS for Talk/
Talk recording 16x9.json ← layouts: if broken, Scene Collection → Import
Talk recording 9x16.json
circle-mask.png ← masks and ring: do not rename
circle-mask-16x9.png
circle-ring.png
If the files go missing, the script from the prompt in section 2 recreates them — just ask Claude to run that part only.