Bitfocus AS
logo
logo
Bitfocus AS
logo
logo
Sign upSign in

Loading...

Bitfocus

Subscribe to our newsletter

The latest news, articles, and resources, sent to your inbox.

FacebookInstagramGitHubYouTubeLinkedIn

Products

  • Buttons
  • Companion

Integrations

  • Supported Devices
  • Developer Community
  • Connection Development

Support

  • Support Overview
  • Documentation
  • Video Tutorials
  • Community Forum

Sales

  • Resellers & Integrators
  • Buttons Pricing

Updates

  • Case Studies
  • Events & Trade Shows
  • Press Releases
  • Product Updates
  • Webinars

Legal

  • Legal Overview
  • Privacy Policy
  • Buttons EULA
  • Terms & Cookie Policy

Company

  • About us
  • Press kit
  • Careers

© 2026 Bitfocus AS. All rights reserved.

  1. Connections
  2. RED - RCP2 Camera Control

RED

RCP2 Camera Control

Communityv1.5.0Updated 2 months ago
DocumentationReport an issueView on GitHub

Documentation

Red RCP2 Camera Control

Configuration

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.


v1.5.0 — What's New

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.


v1.4.8

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:

  • WebSocket errors now correctly update the connection status indicator
  • Stagger timers are now properly cleaned up when the module is destroyed or the connection drops
  • Set ISO and Set Sensor Frame Rate actions now correctly ignore invalid input instead of sending garbage values to the camera
  • LUT subscribe parameter IDs corrected (ENABLE_CAMERA_LUT_SDI_1/2) — LUT state variables were not populating on some firmware versions

Code structure: Module split into src/ files (actions.js, feedbacks.js, variables.js, upgrades.js) per Bitfocus module standards.


v1.4.6

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 sensor
  • Broadcast color space and EOTF variables (broadcast monitoring controls)

Not confirmed in support matrix (may work on all cameras — unverified):

  • $(NAME:tally_thickness) — tally border thickness
  • $(NAME:camera_position) — camera position letter

Reliability fixes:

  • Fixed 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 integer
  • Fixed rcp_cur_parameters response being silently dropped
  • Removed phantom media parameters that don't exist in the RCP2 database (MEDIA_FREE, MEDIA_USED, MEDIA_MINUTES_REMAINING) — replaced with confirmed equivalents

CPU optimizations:

These changes keep CPU load flat and avoid large spikes during connect or heartbeat cycles:

  • Proxy-based variable batching: 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 changed
  • Implicit subscription fix: rcp_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 session
  • Staggered connect burst: ~900 poll-only parameters are fetched in batches of 5 every 500ms, spreading the initial fetch over ~90 seconds instead of blasting all at once. Subscribed parameters (record state, ISO, tally, timecode, etc.) are live immediately
  • Staggered heartbeat: The 30-second heartbeat sends 3 parameters every 500ms (~5.5 seconds spread) instead of all 33 at once
  • setVariableDefinitions caching: Only called when genuinely new dynamic variables are discovered, not on every reconnect
  • Process naming: The module now shows as RED RCP2 in task managers and ps instead of node

Available Actions

Recording Control

  • Start Recording
  • Stop Recording
  • Toggle Recording

Camera Settings

  • Set ISO (100–25600, full 1/3-stop range)
  • Set Record Format (Sensor Crop)
  • Set Sensor Frame Rate
  • Set White Balance (2000K–10000K)
  • Set Tint
  • Set Exposure Adjust (Static)
  • Increase Exposure Adjust
  • Decrease Exposure Adjust
  • Set Aperture (T-stop)
  • Set ND Filter
  • Set Record Mode (Normal, Timelapse, etc.)

Camera Identification

  • Set Camera ID
  • Set Reel Number
  • Set Camera Position (A-Z)

LUT Control

  • Toggle LUT on SDI 1 / SDI 2
  • Enable LUT on SDI 1 / SDI 2
  • Disable LUT on SDI 1 / SDI 2

Display Tools

  • Set Magnify (Enable / Disable / Toggle on one or more outputs: SDI 1, SDI 2, Top LCD, Built-in LCD)

Tally Control

  • Set External Monitor Tally State (Off / Tally 1 / 2 / 3)
  • Enable / Disable / Toggle Camera Body Tally LED
  • Set Tally 1 / 2 / 3 Color
  • Set Tally Opacity (25% / 50% / 75% / 100%)
  • Set Tally Style (Solid / Dashed / Bracket)
  • Set Tally Thickness (Small / Medium / Large)

System

  • Shutdown Camera (true power-off; requires confirmation checkbox)
  • Restart Camera (requires confirmation checkbox)
  • Send Generic Command (raw RCP2 JSON)

The Send Generic Command action accepts any valid RCP2 JSON object. Example:

{"type":"rcp_set","id":"ISO","value":800}

Available Variables

Connection State

VariableDescription
$(NAME:connected)Connection state ("Connected", "Connecting", or "Disconnected")

Image Settings

VariableDescription
$(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

Recording

VariableDescription
$(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

LUT

VariableDescription
$(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)

Output

VariableDescription
$(NAME:sdi_freq)SDI Output Frequency

Camera Identification

VariableDescription
$(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

Media

VariableDescription
$(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

Camera Info

VariableDescription
$(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)

Power / Battery

VariableDescription
$(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

Timecode

VariableDescription
$(NAME:timecode)Current Timecode
$(NAME:timecode_display_mode)Timecode Display Mode

Tally (External USB-C Monitor — all cameras)

VariableDescription
$(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)

CDL Color Grading

VariableDescription
$(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

Color

VariableDescription
$(NAME:color_space)Color Space
$(NAME:roll_off)Roll Off

Display Tools

VariableDescription
$(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)

Calibration

VariableDescription
$(NAME:cal_status_temp)Calibration Status Temperature
$(NAME:cal_current_temp)Current Calibration Temperature

Autofocus

VariableDescription
$(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.


Heartbeat Polling (30-second interval)

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.

  • Power/Battery: Voltage, current, percent, runtime, state, present, valid, type, low-power warning, info string
  • Temperatures: AUX, IOB, Level, PCM, PL, PS, SB board sensors
  • Media: Percentage remaining, time remaining, clip count, capacity
  • Network: WiFi status, WiFi signal strength, WiFi IP, wired network status, USB-C status
  • USB-C Media: Media name, media status
  • Sync: Sync source, sync state
  • Calibration: Status temperature, current calibration temperature
  • Camera Runtime: Total operating hours

Protocol Notes

  • Communicates via RCP2 (RED Command Protocol 2) JSON/WebSocket on port 9998
  • Maximum 8 simultaneous WebSocket connections per camera; 1 per application recommended
  • 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 buildup
  • TIMECODE_HIGH_FREQUENCY is intentionally skipped — it fires at frame rate (24–120fps) and would flood the connection
  • AUDIO_VU_DATA and HISTOGRAM are intentionally skipped — continuous streaming data with no useful state to track

Details

Manufacturer
RED
Product
RCP2 Camera Control
Latest Version
v1.5.0
Author
Seth Haberman
Contributors
thecloudmediagroup(14)
ChristopherJohnson2(2)

Open Issues and Requests

To file a new issue, you need to sign up for a user on GitHub.

Go to GitHub issues →

In other news

Buttons v1.8 Main with text

Buttons v1.8

October 2, 2026

Buttons v1.8 IBC award win

Bitfocus wins IBC2026 Best of Show Award for latest Buttons enhancements

September 21, 2026

Buttons v1.8 grey background

Biggest functionality boost yet makes Buttons the perfect platform for broadcast and media management

September 10, 2026

Vivid Buttons on screen

Bitfocus Buttons makes complex OB production feel simple

August 10, 2026

View all news →