Skip to content
TypeUnlocked
StageQuick win
DifficultySimple
JobShare stream
ForDev teams
ForProductivity power users
ServicesPipe
Why HoodyHTTP-native
TypeUnlocked
StageQuick win
DifficultySimple
JobShare stream
ForDev teams
ForProductivity power users
ServicesPipe
Why HoodyHTTP-native
TypeUnlocked
StageQuick win
DifficultySimple
JobShare stream
ForDev teams
ForProductivity power users
ServicesPipe
Why HoodyHTTP-native
TypeUnlocked
StageQuick win
DifficultySimple
JobShare stream
ForDev teams
ForProductivity power users
ServicesPipe
Why HoodyHTTP-native
PIPE · AUDIO · LIVE

A microphone over HTTP, in two terminals

You're pair-debugging at midnight and the other side's hotspot won't survive a Zoom. You both have a shell. ffmpeg captures the mic, curl PUTs it to a pipe path, the other terminal curls and plays the bytes. No SDK, no signaling, no meeting.

Read the pipe docs

no signaling, no SDK, no Zoom

Two curls, one pipe path, no signaling

ffmpeg encodes your microphone to opus and writes it to stdout. curl PUTs that stdin to /api/v1/pipe/voice. Whoever GETs the same path receives the bytes as the sender produces them. The pipe holds the receiver up to five minutes for the sender to connect, forwards Content-Type, and stores nothing.

From mic to speakers in four lines4 STEPS · ZERO SIGNALING
0101 · CAPTURE

Read the mic

ffmpeg -f alsa -i default -c:a libopus -f ogg - reads your microphone, encodes to opus, writes to stdout.

0202 · STREAM

Pipe into curl

curl -T - PUTs stdin to /api/v1/pipe/voice. The pipe waits up to five minutes for a receiver on the same path.

0303 · CONNECT

Receiver GETs the path

Their terminal runs curl https://.../api/v1/pipe/voice. The pipe matches sender to receiver and starts streaming.

0404 · PLAY

Bytes hit speakers

Their curl pipes into aplay or mpv. Audio plays as it arrives, byte for byte. ctrl-C ends the call.

The pipe forwards Content-Type, supports up to five-minute hold-time before a counterpart connects, and uses HTTPS — nothing more exotic than the protocol your shell already speaks.

Lo-fi on purpose

There is no echo cancellation, no jitter buffer, no fancy DSP. It is the kind of voice channel an SRE pair-debugs over: stripped down, low overhead, dependable. Every layer a meeting platform builds is a layer the pipe pair simply doesn't have.

LAYERS THAT DON'T EXIST0 LINES OF CODE

Things that don't happen

  • Open a STUN/TURN handshake
  • Run a signaling server to swap SDPs
  • Negotiate a codec across the WebRTC stack
  • Accept a microphone-permission dialog
  • Click Join in a desktop app
  • Fall back to TURN when NAT punching fails
  • Sit in a waiting room for the host
WHAT YOU ACTUALLY DOTWO TERMINALS

Things that do happen

  • Type ffmpeg | curl in the sender shell
  • Type curl | mpv in the receiver shell
  • Talk while bytes flow through the pipe
  • ctrl-C when you're done — the path goes back to nothing

Three readers, one pair of curls

The same mic-over-HTTP mechanism reads three different ways depending on who is on the other end of the pipe.

FOR THE PAIR-DEBUGGER

Voice the SRE deserves

You're three commands deep into a prod incident. Spinning up Zoom would take longer than the fix. ffmpeg | curl on your side, curl | mpv on theirs — you can talk while you tail logs.

FOR THE TRAVELING DEV

Survive the hotspot

Phone-tethering chokes on a video call. A 32 kbps opus stream over HTTP doesn't. The other end opens a URL and listens — they don't even need a mic to participate.

FOR THE PRIVACY-MINDED

No recording, no app, no account

Nothing is stored on a server. There is no third-party app on either machine. The pipe is purely streaming — bytes pass through and are gone the moment ctrl-C lands.

Audio is just bytes. Bytes are just a pipe.

stream starts when you press enterstream ends when you press ctrl-C
livepipe.containers.hoody.com/api/v1/pipe/voicewhile either side is up
ctrl-C
404pipe.containers.hoody.com/api/v1/pipe/voiceno recording, no replay

What this replaces

The lineup of voice tooling every pair of engineers accumulates. Each one assumes a meeting, an account, or a custom signaling server. The pipe URL assumes none of those.

  • Zoom voice callScheduled bridge, app install, desktop permissions
  • Slack screen-share with audioBoth sides on the desktop client, Huddles only
  • Discord voice channelServer membership, account, bitrate caps
  • Google Meet voiceCalendar plumbing for a 90-second debugging chat
  • WebRTC with custom signalingSTUN/TURN, SDP swap, a server you have to run
  • Voice-chat SaaSYet another vendor, yet another seat license

The next time someone says 'can we hop on a quick call', open a pipe instead.

Read the pipe API

Read the others