explaingit

jyeswak/zeststream-cast

0ShellAudience · vibe coderComplexity · 3/5ActiveLicenseSetup · moderate

TLDR

Shell-script CLI that replaces OBS on macOS by driving ffmpeg to capture HDMI, webcam, and mic and stream to YouTube Live.

Mindmap

mindmap
  root((zeststream-cast))
    Inputs
      HDMI capture
      Webcam feed
      Microphone audio
      YouTube stream key
    Outputs
      RTMPS to YouTube
      Local ffplay preview
      Audit logs
    Use Cases
      Stream gameplay live
      Switch OBS-style scenes
      Run uplink bitrate sweep
      Score encode quality
    Tech Stack
      Shell
      ffmpeg
      AVFoundation
      videotoolbox

Things people build with this

USE CASE 1

Stream live gameplay to YouTube from macOS without running OBS

USE CASE 2

Switch between gameplay, BRB, and Starting Soon scenes with a single keystroke

USE CASE 3

Benchmark your Mac encoder and uplink before going live with the bitrate sweep and VMAF check

USE CASE 4

Recover from broken macOS camera and mic permissions using the repair subcommand

Tech stack

ShellffmpegAVFoundationmacOS

Getting it running

Difficulty · moderate Time to first run · 30min

macOS and Apple Silicon only; needs Homebrew, ffmpeg, and macOS camera and mic permissions reset on first run.

MIT license, so you can use, modify, and redistribute it freely as long as you keep the copyright notice.

In plain English

zeststream-cast is a command-line replacement for OBS Studio on macOS. The author built it after OBS started crashing on macOS 26 following a security update that Apple did not let users roll back. Instead of a windowed application, this project drives ffmpeg directly from shell scripts to capture a video signal, mix it with a webcam and microphone, and push the result to YouTube Live. The core pipeline takes input from an HDMI capture card, a webcam, and a microphone, then composites them in the style users expect from OBS: full-screen game footage with a webcam picture-in-picture and the mic mixed over the game audio. Encoding uses Apple's hardware h264 encoder (h264_videotoolbox) and the output is sent to YouTube over RTMPS. A local ffplay window shows a preview. The tool also supports OBS-style scenes (gameplay, no-cam, Be Right Back, Starting Soon) that can be switched with one keystroke from a small terminal menu. The project is intentionally narrow. It is macOS and Apple Silicon only because it uses AVFoundation and videotoolbox. There is no drag-and-drop GUI, no browser sources, and no audio plugin support. The author points users to OBS, ecamm Live, or Lightstream if they need those features. Installation is a clone-and-run script. It checks that Homebrew and ffmpeg are present, copies the zscast command into the user's local bin folder, and walks through device selection. macOS camera and microphone permissions are handled by a separate repair command that resets the privacy state and triggers the system permission dialogs. For going live, three options are documented: paste the YouTube stream key once into a file, run a self-hosted Nango deployment for OAuth, or write a custom key-fetcher script. The CLI is large and follows what the author calls a canonical CLI scoping spec. There are subcommands for diagnostics (doctor, health), idempotent repairs, audit logs, an encoder benchmark, a bitrate sweep that probes the uplink, and a VMAF quality check that scores rendered test content. A verify command chains several of these into a single go or no-go check before going live. The license is MIT.

Copy-paste prompts

Prompt 1
Install zeststream-cast on my Apple Silicon Mac, pick my HDMI capture device, and run the doctor command
Prompt 2
Configure zeststream-cast to read my YouTube stream key from a local file and start a 720p stream
Prompt 3
Run the bitrate sweep and VMAF quality check, then recommend a stable bitrate for my upload speed
Prompt 4
Add a new scene called Intermission to zeststream-cast that shows a static image and a music bed
Prompt 5
Wire zeststream-cast to fetch the YouTube key via a self-hosted Nango OAuth deployment
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.