FlowAPI control plane

Browser-farm orchestration for Hetzner Flow workers.

Central Postgres state, Vercel Blob artifacts, and dashboard-managed browser accounts. Hetzner workers run persistent Chrome profiles and report real Flow sessions back to this control plane.

Queue controlRunning
Workers claim queued jobs normally. Pausing stops all claims immediately without touching the workers.
Captcha
accounts benched on captcha cooldown
...
Rate limit
accounts benched on rate-limit cooldown
...
Workers
online / total
...
Bridged
loading bridge state
...
Accounts
0 total registered
...
Jobs
loading queue state
...
Profiles
active / assigned browser profiles
...
Register existing box
Paste SSH credentials for a fresh Hetzner server. Trigger will bootstrap VPN, Chrome, pnpm, and the worker service.
Add account
Real workers will create a profile and mark it ready after manual Google login.
Queue test job
Queue generation or existing-image upscale work for a connected Flow account.

Queue this many identical jobs (1–100).

Worker runtime config
Hot-reload batch sizing without SSH. Workers apply changes on their next heartbeat.

Global v0

Caps ready accounts offered per worker poll. Current effective value is 4.

Hard cap on accounts running a job AT ONCE on one box (unlike claim groups/tick, which only limits new claims per poll). Lower it to cut the box's aggregate request rate to Google and dodge captchas. Current effective value is 4.

Low end of the randomized upscale batch. Each claim draws a size between min and max (1-8). Set equal to max for a fixed batch. Current effective value is 4.

High end of the randomized upscale batch (must be ≥ min, 1-8). Current effective value is 4.

Min gap per account between job starts. Raise during big jobs to avoid captchas. Current effective value is 120s.

Min gap between job starts anywhere on the box (jittered ±10%), so the busy cap refills gradually instead of bursting from the shared IP. 0 disables it. Current effective value is 4s.

Hard cap on image jobs started per account in a rolling 24h window, enforced at claim time. Flow allows ~100/day, so ~95 trips ours before the provider benches the account. Current effective value is 200.

Eventual-success SLA stamped on jobs at enqueue; recoverable failures retry until it expires. Global only - a queued job has no worker yet, so this knob is hidden for per-worker overrides. Current value is 24h.

Bench applied on the first auth failure. Effective: 1m.

Backoff never climbs past this. Effective: 1m.

Backoff grows the bench with repeat failures up to the cap; constant re-benches the base every time.

Bench applied on the first captcha failure. Effective: 30m.

Backoff never climbs past this. Effective: 360m.

Backoff grows the bench with repeat failures up to the cap; constant re-benches the base every time.

Bench applied on the first rate limit / daily quota failure. Effective: 4m.

Backoff never climbs past this. Effective: 4m.

Backoff grows the bench with repeat failures up to the cap; constant re-benches the base every time.

Expected public egress IP for VPN health checks.

Disabled

Wipes each account's cookies after every generation via the privileged relay userscript, resetting reCAPTCHA/device reputation. Needs the relay installed per account.

Login sessions
Embedded noVNC sessions for manual Google login on the worker's real Chrome profile. The dashboard mints a short-lived first-party proxy URL for the Cloudflare-protected Hetzner desktop; direct Access links remain available as a fallback.
Workers
Dedicated boxes and the accounts currently assigned to them.
NameStatusTagsBridgedProfilesThrottleHeartbeatLast claimBuild
Loading workers...