Loading...
Type in the IP address of the RED camera. Works with all DSMC3 cameras (V-RAPTOR, V-RAPTOR XL, KOMODO, KOMODO-X). Tested primarily with RED V-RAPTOR 8K S35.
Record Format labels corrected (issue #24): The Set Record Format dropdown previously mislabeled RED's native 17:9 formats as 16:9 — selecting "4K 16:9" actually put the camera in 4K 17:9 (4096×2160 DCI). All labels now match the camera's own menu: the 17:9 crops are labeled 17:9, true 4K 16:9 UHD (3840×2160, value 18) has been added, and the missing 6K anamorphic modes (4:3 2x, 6:5 2x, 3:2 1.8x, 4:3 1.8x, 3:2 1.6x, 16:9 1.5x, 17:9 1.3x, 17:9 1.25x) are now available. The $(NAME:record_format) variable reports the corrected names too. Existing buttons keep sending the same values they always did — on-camera behavior is unchanged, the labels are now just accurate. If you picked "4K 16:9" wanting true UHD, re-select the new 4K 16:9 entry.
Magnify control (issue #16): New Set Magnify action with Enable / Disable / Toggle on one or more outputs at once (SDI 1, SDI 2, Top LCD, Built-in LCD — multi-select design from @ChristopherJohnson2's PR #20), a Magnify Active feedback for button styling, and live per-output status variables. Output availability depends on camera model — outputs your camera doesn't have simply ignore the command.
Shutdown fixed, Restart added (@ChristopherJohnson2, PRs #18/#19): The Shutdown Camera action was sending SHUTDOWN value 1, which restarts the camera per RED's RCP2 documentation — it now sends value 2, a true power-off. A separate Restart Camera action provides the old behavior under an honest name. Both require their confirmation checkbox before firing.
Maintenance release addressing Bitfocus code review feedback. No new features — all changes are internal.
Upgrade script: Existing buttons using the old action IDs (start_record, stop_record, toggle_record) are automatically migrated to the current names (start_recording, stop_recording, toggle_recording) when the module loads. No manual button updates needed.
Bug fixes:
Set ISO and Set Sensor Frame Rate actions now correctly ignore invalid input instead of sending garbage values to the cameraENABLE_CAMERA_LUT_SDI_1/2) — LUT state variables were not populating on some firmware versionsCode structure: Module split into src/ files (actions.js, feedbacks.js, variables.js, upgrades.js) per Bitfocus module standards.
This release expands parameter coverage, improves reliability, and significantly reduces CPU usage.
Dynamic parameter discovery: On connect the module calls rcp_get_parameters to get the full list of parameters the camera supports, then categorizes each as Subscribe, Poll-Only, or Skip. This handles camera-to-camera differences automatically.
Expanded subscriptions: Subscribed parameter set expanded from 36 to 75+ parameters, covering CDL color grading, power/battery monitoring, calibration temperatures, autofocus, GPS metadata, livestream, frame guides, project settings, pre-record, display tools (log view, false color, peaking), exposure angle/integration time, color space, roll off, media percentage/time remaining, and timecode. Previous versions required a manual generic command to get timecode — it is now subscribed automatically.
Camera-specific parameter handling: The module uses dynamic parameter discovery — on connect it asks the camera what it supports and subscribes accordingly. This means it works correctly across all DSMC3 models and firmware versions without hardcoded per-camera lists.
The following variables will only populate on specific cameras. All other variables in this module are supported on all cameras (KOMODO, KOMODO-X, V-RAPTOR, V-RAPTOR XL).
V-RAPTOR / V-RAPTOR XL only:
$(NAME:record_format_rect_sdi2) — SDI 2 format rect (V-RAPTOR has dual SDI outputs)$(NAME:lut_sdi2_enabled) — SDI 2 LUT enabled state$(NAME:lut_sdi2) — SDI 2 applied LUT$(NAME:sdi2_freq) — SDI 2 monitor frequency$(NAME:cal_status_temp) / $(NAME:cal_current_temp) — AUX temperature sensorNot confirmed in support matrix (may work on all cameras — unverified):
$(NAME:tally_thickness) — tally border thickness$(NAME:camera_position) — camera position letterReliability fixes:
SENSOR_FRAME_RATE showing wrong values for drop-frame rates — RED reports rates in milliHz internally (e.g. 24000 = 23.976 fps). The module now uses the camera's own display string instead of converting the raw integerrcp_cur_parameters response being silently droppedMEDIA_FREE, MEDIA_USED, MEDIA_MINUTES_REMAINING) — replaced with confirmed equivalentsCPU optimizations:
These changes keep CPU load flat and avoid large spikes during connect or heartbeat cycles:
this.variables is now a JavaScript Proxy that intercepts every write, skips unchanged values, and flushes all dirty variables in a single setVariableValues() call per event loop tick. Previously setVariableValues was called on every incoming WebSocket message regardless of whether anything changedrcp_get silently creates a persistent push subscription on the camera. Poll-only parameters now immediately send rcp_subscribe on_off:false to cancel the implicit subscription — without this, hundreds of phantom subscriptions accumulated per sessionsetVariableDefinitions caching: Only called when genuinely new dynamic variables are discovered, not on every reconnectRED RCP2 in task managers and ps instead of nodeThe Send Generic Command action accepts any valid RCP2 JSON object. Example:
{"type":"rcp_set","id":"ISO","value":800}
| Variable | Description |
|---|---|
$(NAME:connected) | Connection state ("Connected", "Connecting", or "Disconnected") |
| Variable | Description |
|---|---|
$(NAME:iso) | ISO |
$(NAME:white_balance) | White Balance (Kelvin) |
$(NAME:tint) | Tint |
$(NAME:shutter) | Shutter speed / angle |
$(NAME:aperture) | Iris Aperture (T-stop) |
$(NAME:exposure_adjust) | Exposure Adjust |
$(NAME:nd) | ND Filter |
$(NAME:fps) | Sensor Frame Rate |
| Variable | Description |
|---|---|
$(NAME:recording) | Recording State (Recording / Idle) |
$(NAME:record_duration) | Current Clip Duration (HH:MM:SS) |
$(NAME:record_format) | Record Format |
$(NAME:record_codec) | Recording Codec (R3D / ProRes) |
$(NAME:record_mode) | Record Mode |
| Variable | Description |
|---|---|
$(NAME:lut_project) | Project/Camera LUT |
$(NAME:lut_sdi1) | LUT on SDI 1 Output |
$(NAME:lut_sdi2) | LUT on SDI 2 Output |
$(NAME:lut_top_lcd) | Top LCD LUT |
$(NAME:lut_sdi1_enabled) | SDI 1 LUT Enabled (On/Off) |
$(NAME:lut_sdi2_enabled) | SDI 2 LUT Enabled (On/Off) |
| Variable | Description |
|---|---|
$(NAME:sdi_freq) | SDI Output Frequency |
| Variable | Description |
|---|---|
$(NAME:camera_id) | Camera ID string |
$(NAME:camera_pin) | Camera PIN |
$(NAME:camera_position) | Camera Position (A-Z) |
$(NAME:reel_number) | Current Reel Number |
$(NAME:clip_name) | Next Clip Name |
$(NAME:total_clips) | Total Clips on Media |
| Variable | Description |
|---|---|
$(NAME:media_remaining_min) | Remaining Time (minutes) |
$(NAME:media_remaining_time) | Remaining Time (HH:MM:SS) |
$(NAME:media_capacity_min) | Total Capacity (minutes) |
$(NAME:media_free_space) | Free Space |
$(NAME:media_used_space) | Used Space |
| Variable | Description |
|---|---|
$(NAME:camera_name) | Camera Name |
$(NAME:camera_type) | Camera Model |
$(NAME:serial_number) | Serial Number |
$(NAME:firmware_version) | Firmware Version |
$(NAME:camera_runtime) | Camera Runtime (hours) |
| Variable | Description |
|---|---|
$(NAME:power_voltage) | Input Voltage |
$(NAME:power_current) | Input Current |
$(NAME:power_percent) | Battery Percentage |
$(NAME:power_runtime) | Estimated Runtime |
$(NAME:power_state) | Power State |
$(NAME:power_present) | Power Present |
$(NAME:power_valid) | Power Valid |
$(NAME:power_type) | Power Input Type |
| Variable | Description |
|---|---|
$(NAME:timecode) | Current Timecode |
$(NAME:timecode_display_mode) | Timecode Display Mode |
| Variable | Description |
|---|---|
$(NAME:tally_state) | External Monitor Tally State |
$(NAME:tally_1_color) | Tally 1 Color |
$(NAME:tally_2_color) | Tally 2 Color |
$(NAME:tally_3_color) | Tally 3 Color |
$(NAME:tally_opacity) | Tally Opacity |
$(NAME:tally_style) | Tally Style |
$(NAME:tally_thickness) | Tally Thickness (Small/Medium/Large) |
$(NAME:tally_led_enable) | Camera Body Tally LED (all cameras) |
| Variable | Description |
|---|---|
$(NAME:cdl_slope_r) | CDL Slope Red |
$(NAME:cdl_slope_g) | CDL Slope Green |
$(NAME:cdl_slope_b) | CDL Slope Blue |
$(NAME:cdl_offset_r) | CDL Offset Red |
$(NAME:cdl_offset_g) | CDL Offset Green |
$(NAME:cdl_offset_b) | CDL Offset Blue |
$(NAME:cdl_power_r) | CDL Power Red |
$(NAME:cdl_power_g) | CDL Power Green |
$(NAME:cdl_power_b) | CDL Power Blue |
$(NAME:cdl_saturation) | CDL Saturation |
| Variable | Description |
|---|---|
$(NAME:color_space) | Color Space |
$(NAME:roll_off) | Roll Off |
| Variable | Description |
|---|---|
$(NAME:log_view) | Log View Enabled |
$(NAME:false_color) | False Color Enabled |
$(NAME:peaking) | Peaking Enabled |
$(NAME:magnify_sdi1) | Magnify Enabled SDI 1 (On/Off) |
$(NAME:magnify_sdi2) | Magnify Enabled SDI 2 (On/Off) |
$(NAME:magnify_dsi1) | Magnify Enabled Top LCD / DSI 1 (On/Off) |
$(NAME:magnify_lcd) | Magnify Enabled Built-in LCD (On/Off) |
| Variable | Description |
|---|---|
$(NAME:cal_status_temp) | Calibration Status Temperature |
$(NAME:cal_current_temp) | Current Calibration Temperature |
| Variable | Description |
|---|---|
$(NAME:af_state) | Autofocus State |
Additional variables are registered automatically based on what your specific camera supports. They appear in Companion's variable picker after the first connection and populate gradually over approximately 90 seconds.
The following parameters change continuously during a shoot (voltage fluctuating, temperatures drifting, etc.) and are intentionally not subscribed — push subscriptions on these would flood the connection with constant updates. Instead they are polled every 30 seconds as a reasonable sample rate for monitoring purposes.
rcp_get implicitly creates a push subscription on the camera — the module always follows poll-only requests with rcp_subscribe on_off:false to prevent phantom subscription buildupTIMECODE_HIGH_FREQUENCY is intentionally skipped — it fires at frame rate (24–120fps) and would flood the connectionAUDIO_VU_DATA and HISTOGRAM are intentionally skipped — continuous streaming data with no useful state to track