Official website - Fvprod Apex
Control an NDI® recording with Companion and the HTTP API | Apex
Configure Timecode Recorder Start, Stop and Status buttons with Generic HTTP Requests, distinguishing commands, status and the finished file.
Official website - Fvprod Apex
Configure Timecode Recorder Start, Stop and Status buttons with Generic HTTP Requests, distinguishing commands, status and the finished file.
User guides — Timecode Recorder 1.0 and Dual AI Studio 1.9.
Configure Timecode Recorder Start, Stop and Status buttons with Generic HTTP Requests, distinguishing commands, status and the finished file.
To control recording of an NDI® source with Bitfocus Companion, use Generic HTTP Requests and the Timecode Recorder API: POST /start_record starts, POST /stop_record stops and GET /status reads status. Configure separate buttons to keep each command explicit and check its result.
Open Timecode Recorder, select a source and click Connect. Wait for at least one received frame; a connection alone is insufficient for an API start. Check sound before the take too. The default port is 8088. In the API panel, note the actual displayed base URL. After changing the port, use Apply and update your Companion configuration.
If Companion runs on the same Mac, http://127.0.0.1:8088 works with the default port. On another computer, replace it with the Recorder Mac’s LAN address. 127.0.0.1 always refers to the machine sending the request.
Keep this API on a trusted network, without Internet exposure. Automatic responds on the Mac’s network interfaces. Selecting a card can reject a request with HTTP 403 when its address does not match, but this filter is neither authentication nor strong isolation. Restrict network access to authorised machines.
http://127.0.0.1:8088. Alternatively, leave it empty and enter full URLs in each action.http://127.0.0.1:8088/start_record, adapted to your host. Leave the body empty; no JSON is required.http://127.0.0.1:8088/stop_record.http://127.0.0.1:8088/status. A full URL overrides Base URL: update all three actions if the address changes.| Request | Useful check |
|---|---|
GET /status | Source, format, recording state and file path |
POST /start_record | HTTP response followed by REC state in the application |
POST /stop_record | Response and returned path, followed by playback of the finalised file |
To isolate a problem before using Companion, run these commands separately in a terminal on the Recorder Mac, allowing a short take between Start and Stop:
curl --fail-with-body http://127.0.0.1:8088/status
curl --fail-with-body -X POST http://127.0.0.1:8088/start_record
curl --fail-with-body -X POST http://127.0.0.1:8088/stop_recordA recording command sent with GET returns 405. An invalid parameter or missing source can produce 400; an address rejection, 403. Read the response instead of treating every HTTP exchange as success.
Avoid automatic retries: another Start can replace an active recording. If a response is missing, inspect the application and Status first. A button coloured on press indicates a requested action; to show actual state, configure response reading and interpretation separately. Keep manual controls accessible.
An API start writes to ~/Movies/NDI_YYYYMMDD-HHMMSS.mov, independently of the folder and filename entered in Recording. After Stop, open that file and check picture, sound and duration. Begin with a short test, followed by a network-loss check with no useful take in progress. WebRTC helps observe the picture but does not confirm complete MOV writing.

Connect a source, set Clock or Elapsed and record an H.264/AAC MOV with Timecode Recorder, then check the file and monitoring outputs.
Distinguish visible pixels, stream data, file tracks and the LTC signal to choose the right production reference.
Configure Dual AI Studio inputs, Tech and Perf analysis, voices and NDI outputs, with an informed choice between Ollama and Gemini.