x402 · Base USDC · async jobs
Stem separator pay before process
Upload a track, choose 2-stem or 4-stem, get a duration-scaled USDC price, pay on Base, then download stems when the job finishes. GPU work never starts until payment verifies on-chain.
Backend: Replicate Demucs (htdemucs) — ~$0.02/run class COGS, async.
Not run on Vercel serverless for the full separation (timeout risk).
Code lives in
products/music-stems/ (Next.js App Router).
List prices (examples)
List ≈ 4× estimated COGS, floored, rounded to $0.05. Long tracks cost more.
| Length | Mode | Est. COGS | x402 price | Margin |
|---|---|---|---|---|
| 1 min | 2-stem | $0.03 | $0.15 | ~80% |
| 1 min | 4-stem | $0.04 | $0.25 | ~84% |
| 3 min | 2-stem | $0.07 | $0.35 | ~80% |
| 3 min | 4-stem | $0.09 | $0.55 | ~84% |
| 5 min | 2-stem | $0.11 | $0.55 | ~80% |
| 5 min | 4-stem | $0.14 | $0.85 | ~84% |
| 8 min (cap) | 4-stem | $0.20 | $1.25 | ~84% |
API (for agents)
{`POST /api/music/stems/submit` multipart → HTTP 402 quote
`POST /api/music/stems/submit` + X-PAYMENT {txHash, quote_id} → job_id
`GET /api/music/stems/status/{job_id}` → poll
`GET /api/music/stems/download/{job_id}` → signed URL
`POST /api/music/stems/retry/{job_id}` → free reprocess if paid but failed once
Drop StemSeparator from products/music-stems/src/components/StemSeparator.tsx
into your Next.js music app after wiring env: REPLICATE_API_TOKEN, BLOB_READ_WRITE_TOKEN, treasury.