Skip to content

RubyFPV OSD

Ruben M edited this page Jul 17, 2026 · 1 revision

RubyFPV OSD

ArduDeck can design the OSD that RubyFPV draws on its ground unit, and deliver it to that board over the ArduDeck Agent. You author the layout on the same visual canvas used for flight-controller OSDs, then send it to the RubyFPV ground station, which renders it over your video.

RubyFPV is digital FPV link software that runs on the radio hardware itself (Raspberry Pi / Radxa ground and air units, OpenIPC cameras). Its OSD is rendered on the ground unit, not in the flight controller. ArduDeck talks to that Linux board through the Companion Board Agent.

Three kinds of OSD, three destinations

ArduDeck's OSD Tool has three modes. They look similar but the layout you build goes to a completely different place in each. The mode switch and the coloured destination bar under it always tell you which.

Mode Who draws it Where it lives How it gets there
HUD ArduDeck Your screen, over the video Nothing is uploaded - it is a ground-rendered overlay
Text OSD Flight controller / digital goggles In the FC (analog / Betaflight) Written to the FC over MAVLink or MSP
RubyFPV RubyFPV On the RubyFPV ground unit Delivered to the board over the ArduDeck Agent

The important idea: a fully custom graphical HUD is always ground-rendered. A flight-controller "digital OSD" (MSP DisplayPort for DJI / Walksnail / HDZero) is a fixed character grid and cannot draw a bespoke HUD. RubyFPV, like ArduDeck's own HUD, draws on the ground - which is exactly why ArduDeck can help you configure it.

Why configure it from ArduDeck

RubyFPV's OSD is configured through an on-screen menu on the ground unit. ArduDeck already manages companion boards (metrics, files, services) through its Agent, and the RubyFPV ground unit is one of those boards. So instead of editing menus on a small screen in the field, you lay the OSD out on a full canvas on your computer and push it to the board.

Setup

  1. Open the OSD Tool and select the RubyFPV mode in the top switch. Authoring and exporting a layout needs nothing else.
  2. To deliver the layout to the board, get the RubyFPV ground unit on your network and install the ArduDeck Agent on it (see Companion Board > Dashboard > Connecting):
    curl -fsSL https://ardudeck.com/agent/install.sh | bash
    
  3. Pair the board in the Companion view.

How RubyFPV's OSD actually works (important)

RubyFPV's OSD is not a drag-and-drop canvas of freely positioned elements. Its built-in elements are toggles: you turn each element on or off per screen, pick a layout preset (None / Minimal / Compact / Default / Custom), and set font size, transparency, and where stats windows are anchored. RubyFPV then auto-arranges the enabled elements. So in ArduDeck you choose what shows and how it is laid out, not exact pixel coordinates.

  • Elements (toggled per screen): altitude, distance, home, battery and cells, GPS info/position, ground/air/vertical speed, pitch, throttle, flight mode, time, wind, FC temperature, CPU, video mode/Mbps, radio links, RC RSSI, link-quality bars/numbers, signal bars, and the grid/crosshair overlays.
  • Instruments (also per-screen toggles): horizon, heading, speed and altitude, altitude graph.
  • Five OSD screens, each with its own element set, preset, and preferences - you pick which screen is active.
  • Free X/Y placement in RubyFPV exists only for widgets and plugins, not built-in elements.

Elements that only make sense as a ground HUD (a bespoke artificial horizon, the CCIP/CCRP ballistic reticles) are not part of RubyFPV's OSD - use ArduDeck's HUD mode for those.

Delivering it to the board

The destination bar shows the path: Author here -> ArduDeck Agent -> RubyFPV ground board -> Drawn over video. The flight controller is not involved.

RubyFPV stores the OSD in the vehicle model file (ctrl-N.mdl). The delivery model is to replace only that file's osd: block with your settings and leave the rest of the model untouched.

  • Export OSD block saves the exact osd: text to splice into ctrl-N.mdl, so you can inspect it or apply it on the board.
  • Direct one-click push to a paired board over the Agent is being finalised; today, export the block and apply it yourself.

Will it look exactly like the goggles?

The layout and which elements show will match. For pixel-exact fidelity RubyFPV draws with its own fonts and gauges on the ground unit, so ArduDeck's preview is layout-faithful rather than pixel-identical (ArduDeck does not ship RubyFPV's fonts). The reliable "what you see is what you get" is the live RubyFPV video feed: after you push the OSD, confirm it on the actual feed in ArduDeck's camera panel.

How it differs from drawing your own HUD over RubyFPV video

You can also point ArduDeck's camera at a RubyFPV video feed (add a RubyFPV (relayed video) source in the camera panel) and draw ArduDeck's own HUD on top. That HUD is ArduDeck's, rendered on your screen. The RubyFPV OSD mode described here is the opposite: you configure the OSD that RubyFPV itself draws on its ground unit. Use whichever fits - ArduDeck's HUD for a rich custom overlay on your GCS, RubyFPV's OSD when you want it baked into the RubyFPV output (e.g. on its own recording or HDMI out).

See also

Clone this wiki locally