stream deck × etc eos

a ~$200 stream deck + as an eos encoder wing.

bitfocus companion · osc · works with nomad or any eos-family console

what it is

A budget DIY control surface for ETC Eos family consoles built on an Elgato Stream Deck + — 8 LCD buttons, a touchscreen strip, and 4 rotary dials. The dials become real encoder wheels for moving-light parameters with live parameter names and values on the device, plus pages for cue playback, softkeys, submasters, and facepanel keys. It’s a mini version of the console’s encoder panel that costs about as much as one conventional fixture.

My setup runs Eos Nomad and Companion on the same Mac over loopback; the same config works with physical consoles (Eos, Ion, Gio, Apex) over the network.

how it works

Stream Deck + → Bitfocus Companion (free, open source) → OSC over TCP, port 3032 → Eos. Button presses and dial turns become OSC commands; Eos answers back over the same connection, so cue names, softkey labels, and wheel values appear live on the deck.

the seven pages

wheels
the star feature — six category buttons (intensity / focus / color / image / form / shutter) assign the 4 dials to that category’s encoders for the selected fixture, live name + value per dial, dial press homes the parameter, coarse/fine toggle
cues
go, stop/back, go-to-cue 0 / out — with live previous/active/pending cue, command line, and show name
softkeys
the console’s 6 softkeys with live labels, plus {more sk}
submasters
dials = subs 1–4 — turn for level, hold for bump; x1/x2/x4 speed
facepanel
live, blind, timing, flexi, format, data, select last/manual/active
setup
brightness, encoder step-size tuning (coarse/fine/acceleration), clock & ip displays
menu
home page — jumps to everything above

what I changed from stock

The base is Stefan Staub’s excellent eosstreamdeckplus config. I made three modifications, editing the config JSON directly:

permanent labels
twenty edits baking static labels into the layout (SK1–SK6, W1–W4, “Cmd:”, “Hold=Bump”) — stock buttons were blank until the console sent data
state-driven category toggle
replaced 36 fragile set-color actions with six expression feedbacks watching one variable — exactly one category button glows, always correct, survives restarts
console encoder sync via snapshots
eos doesn’t expose encoder-category switching over osc (open etc feature request) — so each category button also fires snapshot 901–906, recorded once with only the encoders component checked. pressing focus on the deck flips eos’s own encoder display to focus too

setup

Enable OSC RX and TX in Eos (setup → system settings → show control → osc). Install Companion, quit the Elgato Stream Deck app fully (it owns the deck otherwise), and plug in. Import the config below, point the etc-eos connection at your console’s IP (127.0.0.1 for Nomad on the same machine, port 3032, TCP SLIP on), record snapshots 901–906 for the encoder-sync feature, select a fixture — and the labels come alive.

honest caveats

Dials are step-based, not true continuous encoders — the step-size and acceleration settings make them feel right. A dial press on the wheels page homes that parameter, which is easy to hit by accident. The submaster % readout is Companion’s own counter, not console feedback. Encoder-display sync is one-way, deck to console. And yes — the setup page’s quit-eos button really does send power off. Built against Eos v3.2.x and Companion v5.x.

the cheat sheet

Every button, touch-strip slot, and dial on all seven pages:

What every button, touch-strip slot, and dial does in the eosstreamdeckplus Companion config (sstaub, v5). Layout per page: top two rows = the 8 LCD buttons · third row = the 4 touchscreen slots · bottom row = the 4 dials.
Navigation (changes page/mode) Sends a command to Eos Display only (live info) Dial (turn / press) Careful!

Page 1 · Menu

Home screen. Every button just jumps to another page. Every other page has a "Menu" button (top-right) to come back here.
Buttons

Page 2 · Wheels — the encoder page

This mirrors the console's encoder screen. First pick a category with a button; the four dials then become the first four wheels of that category for whatever fixture is selected. The number in ( ) on each category shows how many wheels your selected fixture has there. Blank until a channel is selected on Eos.
Buttons
Intens (n)
Dials = Intensity category wheels
Focus (n)
Dials = Focus wheels (pan/tilt…)
Color (n)
Dials = Color wheels
Image (n)
Dials = Image wheels (gobo…)
Form (n)
Dials = Form wheels (zoom, edge…)
Shutter (n)
Dials = Shutter/framing wheels
Touchscreen strip
Value + name
Live readout for dial 1 (e.g. "45.0 Pan")
Value + name
Live readout for dial 2
Value + name
Live readout for dial 3
Value + name
Live readout for dial 4
Dials
Dial 1
Turn = adjust wheel 1 of the chosen category
Press = HOME that parameter
Dial 2
Turn = adjust wheel 2
Press = HOME
Dial 3
Turn = adjust wheel 3
Press = HOME
Dial 4
Turn = adjust wheel 4
Press = HOME
Pressing a dial homes that parameter (sends /eos/param/…/home) — easy to hit by accident while turning. If a mover suddenly snaps to home, that's why.

Page 3 · Cues

Playback control plus a live view of previous / active / pending cues.
Buttons
Stop / Back
Console Stop/Back key
Go
Fires the next cue (GO)
Dur / %
Active cue duration & intensity (display)
Previous
Last cue: label, time, list/number (display)
Active
Current cue info (display)
Pending
Next cue in line (display)
Touchscreen strip
GoTo Cue 0
Types Go To Cue 0 Enter — releases playback
GoTo Cue Out
Types Go To Cue Out Enter — fades stage out
Command line
Live Eos command line (display)
Show name
Current show file (display)

Page 4 · Softkeys

The six softkeys exactly as they appear on the console right now — the labels come live from Eos, so they change with context (that's why they can be blank if nothing is selected / OSC TX is off).
Buttons
Softkey 1
Presses console softkey 1
Softkey 2
Presses console softkey 2
Softkey 3
Presses console softkey 3
Softkey 4
Presses console softkey 4
Softkey 5
Presses console softkey 5
Softkey 6
Presses console softkey 6
More SK
Presses {More SK} — flips to the next softkey set

Page 5 · Submasters

The four dials become submaster faders 1–4. The x1 / x2 / x4 buttons set how fast a dial turn moves the level.
Buttons
Touchscreen strip
Sub 1 · %
Level readout (display)
Sub 2 · %
Level readout (display)
Sub 3 · %
Level readout (display)
Sub 4 · %
Level readout (display)
Dials
Dial 1
Turn = Sub 1 level up/down
Hold = BUMP (on while held)
Dial 2
Turn = Sub 2 level
Hold = BUMP
Dial 3
Turn = Sub 3 level
Hold = BUMP
Dial 4
Turn = Sub 4 level
Hold = BUMP
The % shown is Companion's own count, not read back from the console — if someone moves a sub on the desk itself, this display won't know.

Page 6 · Facepanel

Common console hardkeys.
Buttons
LIVE
Live mode
BLIND
Blind mode
Timing
Hold to show timing data (like holding [Time] on the desk)
Flexi
Cycle Flexichannel mode
Format
Cycle display format (table/summary…)
Data
Hold to peek absolute data (like holding [Data])
Touchscreen strip
Select Last
Reselect previous selection
Select Manual
Select all channels with manual data
Select Active
Select all active (on) channels

Page 7 · Setup

Housekeeping: clock/date/IP info, Stream Deck brightness, and the tick sizes the Wheels-page dials use.
Buttons
Quit EOS
Sends the console POWER OFF key. Not a page button — it shuts Eos down!
Clock
Time (display)
Weekday
Day (display)
Date
D/M/Y (display)
IPs
This computer's IP addresses (display)
Touchscreen strip
Enc Adj Coarse
Current coarse tick size (display)
Enc Adj Fine
Current fine tick size (display)
Enc Adj Acc
Current acceleration tick (display)
Bright
Brightness label
Dials
Reg Value
Turn = coarse step size up/down
Press = reset to 1
Fine Value
Turn = fine step size (0.1 steps)
Press = reset to 0.5
Accel Value
Turn = acceleration step size
Press = reset to 5
Bright
Turn = Stream Deck brightness
Press = reset brightness
Watch the "Quit EOS" button (top-left, red text on the device too) — it sends /eos/key/power_off and will shut the console software down. Consider deleting it or moving it somewhere un-fat-fingerable.
Why labels can look blank: most labels on these pages are fed live by the console (cue names, softkeys, wheel names/values). They need OSC TX enabled in Eos (Setup → System Settings → Show Control → OSC), and the Wheels page additionally needs a channel selected — with an empty command line it's blank by design, exactly like the console's own encoder display.

downloads

Based on eosstreamdeckplus by Stefan Staub (MIT license, copyright notice retained) via Bitfocus Companion and the companion-module-etc-eos module (MIT). Elgato, Stream Deck, ETC, and Eos are trademarks of their respective owners; no endorsement implied.