From 80f69bea421ef97fe9fdee3e2209656c254a3742 Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Wed, 19 Aug 2026 18:25:45 +0200 Subject: [PATCH] docs: make the on-chain command runnable and name the 402 The section read "ffmpeg ... | uv run client.py --signer ...", where the ellipsis is a placeholder, so the natural move is to copy the offchain snippet above it, which carries no --signer. That fails with a 402 about a signer address the reader never set: the SDK only sends the payer address header when a signer is configured, and the orchestrator needs it to build the payment challenge. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 66f4687..d18dd71 100644 --- a/README.md +++ b/README.md @@ -134,10 +134,14 @@ Layer the overlay to add a remote signer and put the orchestrator on-chain, so t ```sh cp .env.example .env # fill in RPC, network, keystore paths, accounts, price cap docker compose -f compose.yml -f compose.onchain.yml up -d --build -ffmpeg ... | uv run client.py --signer http://localhost:7936 | ffplay -f mjpeg -i - +ffmpeg -f lavfi -i testsrc2=size=512x512:rate=15 -f image2pipe -c:v mjpeg -q:v 5 - \ + | uv run client.py --signer http://localhost:7936 \ + | ffplay -f mjpeg -fflags nobuffer -flags low_delay -i - docker compose -f compose.yml -f compose.onchain.yml down ``` +`--signer` is what makes this the paid path: the client only sends its payer address when a signer is configured, so without it the orchestrator cannot build a payment challenge and rejects the session with `402 invalid live runner payment signer address`. + The price is unchanged by the overlay: static runners advertise it from `runners.json` (`price_info.price`, USD per hour by default), which both compose files mount. Keep demo sessions short — the meter runs for as long as the socket is open. > [!WARNING]