chert dev and chert byor support inbound audio and video without a public
webhook. The caller chooses FaceTime Audio or FaceTime Video. There is no
chert dev --video switch: use the same command with either call type.
Use an eligible Chert line with video enabled. Caller-camera delivery also needs
capture enabled and configured on that line’s worker. Confirm those capabilities
with Chert for your assigned line; working audio does not establish either video
direction. A webhook is not a prerequisite for video.
Start a video agent
For an existing named LiveKit agent, keep its normal startup command and runchert dev --agent YOUR_AGENT_NAME from the folder with its LiveKit credentials.
No callback module or manual enrollment is needed for dev.
For a new agent, the published beta.10 CLI includes a starter that speaks and
publishes an animated face:
.env.local with your LIVEKIT_URL, LIVEKIT_API_KEY,
LIVEKIT_API_SECRET, and OPENAI_API_KEY. Keep AGENT_NAME=my-video-agent, or
use the same new dispatch name in both your agent and CLI.
In the agent terminal:
--video belongs to chert new; it selects starter code. It does not enable
video on a line. --muse is a separate, specific agent integration and is not
required for ordinary video agents.
Connect the caller’s camera to your agent
The video starter publishes an animated face but does not consume the caller’s camera. It usesAutoSubscribe.AUDIO_ONLY and videoEnabled: false for input.
For a visual-support demo such as asking the caller to point at a port:
- Use FaceTime Video with the caller’s camera on and confirm caller capture is enabled on the assigned line.
- Register track handlers before joining the room and enable video subscriptions
in your agent. For generic
chert dev, the caller is the bridge participant namedchert-bridge-<call ID>; custom BYOR uses the bridge identity in your token. - Consume that participant’s
facetime-remote-videoframes, alongsidefacetime-remote-audio. Connect video input to your vision-capable model or frame-processing tool; changing subscription settings alone does not add vision. - Handle camera mute, track removal, and replacement. Do not treat an old frame as the caller’s current view.
- Test recognition by changing what the camera shows. If your demo also draws a circle or annotation, render it into your agent’s published video. The CLI does not supply object detection or a drawing tool.
media.video; custom BYOR callbacks receive call.media
directly. See Audio and video for the media contract.
Publish the agent’s video
Keep exactly one eligible remote audio publisher in the room. The FaceTime bridge takes the agent video from that same participant. If an avatar service publishes both voice and video, avoid also publishing a second agent audio track. Video published by a different participant from the voice is not shown. Without agent video, the caller sees the line’s default picture. This does not by itself tell you whether caller video is reaching your agent.Custom BYOR callbacks
The callback workflow receivescall.media: { audio: true, video: boolean }. Prepare a session for the requested
media before returning ready: true; decline if your application cannot support
it within the supplied deadline. Your application owns readiness and cleanup.
Manual enrollment is a setup requirement for this mode, not a restriction to audio.
The separate create-room adapter remains audio-only.
Use dev or byor for video.
Check both video directions
chert dev reports the observed agent audio/video publications after a call
starts. These diagnostics help find missing video or a mismatched publisher;
they do not prove that frames reached FaceTime or your vision model.
On the intended line, verify two-way speech, changing agent video, changing
caller video reaching your vision pipeline, caller hangup, room cleanup, and a
fresh second call.
doctor and room membership do not replace these checks.
