Hydra
HY1 · marathon-specs
Architecture spec · HY1 · queued behind RM2

Hydra
the distribution
machine

Hydra writes, renders, checks, and posts short-form video at a scale no single person could sustain — one script factory, one renderer, one quality gate, and one distribution layer, running the same faceless format that took rizz-class apps to millions in revenue. A campaign is a config file. The product being sold is not hard-coded — today it's an AI dating assistant, tomorrow it's anything.

4
Pipeline stages
≥3
Distinct videos / run
0
Watermarked frames allowed
15
Hard post cap / account / day
01

The signal chain

A campaign config goes in one end. Videos come out the other, gated, varied, and scheduled. This is the whole machine.

STAGE 01 Script factory LLM · campaign.yaml STAGE 02 Renderer B-roll + text overlay STAGE 03 Quality gate OCR + hash + limits PASS REJECT · re-render with new variation STAGE 04 Distribution Postiz · many accounts VIEW / INSTALL SIGNAL → REWEIGHTS SCRIPT FACTORY
content flow gate pass → ships gate reject → re-render
01 / SCRIPT

Script factory

  • Cheap text LLM (OpenRouter, DeepSeek-class) writes the message-by-message conversation
  • Driven by campaigns/*.yaml — product, persona, hooks, CTA
  • New product to sell = new config file, zero code changes
02 / RENDER

Renderer

  • B-roll library + timed chat-bubble overlay, beat by beat
  • 1080×1920, 7–30s, Remotion or ffmpeg composition
  • Strictly serial — one render at a time, never parallel Chrome
03 / GATE

Quality gate

  • OCR every frame — burned-in promo text is an instant reject
  • Hash-distance check against recent posts, per account and globally
  • Duration, legibility, caption length, banned words
04 / DISTRIBUTE

Distribution

  • Postiz hosted API — no per-account TikTok keys, no audit wait
  • Per-account daily cap, slow ramp, staggered post times
  • Post → video → campaign logged for the learning loop
02

Inside the quality gate

Every rendered video runs this checklist before it's allowed near a real account. Any failure re-renders with a new variation — nothing ships to patch over a rejection.

VIDEO RENDERED Duration & resolution 7–30s window · 1080×1920 · legible text contrast OCR watermark scan every frame · brand text / logo → instant reject Hash similarity vs. recent posts · per account & global Caption & word list platform caption limits · banned-word scan Schedule REJECTED reason logged → re-render, new variation queued
03

Account ramp cadence

New accounts start at one post a day and climb slowly toward a working ceiling — nowhere near TikTok's hard cap, which is a redline, not a target.

TIKTOK HARD CAP · 15 / DAY · NEVER DEFAULT WORKING CEILING · 4 / DAY D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 15 4 0
04

The learning loop

Posts Metrics Script weights Views

Posts ship through the gate onto real accounts. Views come back through Postiz's reporting. Metrics rank which hook archetypes and script styles actually got watched, per campaign.

Those rankings become script weights — the script factory leans harder on what worked last cycle. Full install attribution is a later phase; v1 only needs to bias toward what gets watched.

05

Operator surface

One CLI. A campaign is a config file. Secrets come from the vault, never the repo.

$ hydra run --campaign aura-launch
 script factory  3 scripts generated  (openrouter · deepseek-v4-flash)
 renderer         3 videos rendered   (serial · remotion)
 quality gate     2 passed, 1 rejected  (watermark frame @ 4.2s → re-render queued)
 distribution     2 scheduled       (postiz · 2 accounts · staggered)

$ hydra report --campaign aura-launch --last 7d
 posted 18  rejected 6  top hook: "screenshot → savage reply"  (2.4x avg views)
// campaigns/aura-launch.yaml
product:    aura
persona:    confident, screenshot-savvy, mildly unhinged
hooks:      ["you're hooping", "screenshot this reply", "rizz check"]
cta:        "link in bio · 3-day trial"
accounts:   [tiktok:acct_07, tiktok:acct_12]
daily_cap:  4   # hard TikTok ceiling is 15 — never approach it
06

Ships when

Anti-laundering criteria — nothing here closes on a scaffold. Every line must be provable by an artifact, not a status.

End-to-end dogfood. One campaign config produces ≥3 fully rendered, gate-passing, visibly different videos and schedules them via the real Postiz API.

Golden-script render. A known script produces a valid MP4 whose overlay timing matches the script beats exactly.

Gate proven, not assumed. A video with burned-in promo text is rejected by OCR; a near-duplicate is rejected by hash distance.

Serial rendering enforced. No parallel Chrome — one render at a time, verified under load.

One boot command. Verify can launch and drive the whole pipeline without hand-holding.

Real source in the commit. Four modules and their tests land in the diff — not a config-only or scaffold-only change.