Raindance AI: Clip-Length Pickers, Head-Swap vs Whole-Person, and Seedance via TryAllAPI A developer built Raindance AI, a timeline-aware video remake product on Cloudflare Workers that lets users pick solo or duet photos, choose head-swap or whole-person modes, and select a 3–10 second moment from a trend clip, with output rendered as MP4 for Shorts and Reels. The Worker routes generation through the TryAllAPI aggregator to Seedance, passing an explicit integer duration on every request because omitting it lets the model choose its own length and causes costs to drift against fixed-price credit packs starting at $5.99. Failed jobs trigger credit refunds, and the developer advises pricing packs only after measuring real runs with retry margin, Stripe fees and refunds included. How I shipped a timeline-aware Raindance remake product on Cloudflare Workers — where duration knobs drive Seedance costs through TryAllAPI. raindanceai.app https://raindanceai.app/?utm source=devto&utm medium=blog&utm campaign=builder is not “upload and hope.” Users pick solo 1 photo or duet 2 photos , choose Head swap or Whole person , then select a 3–10s moment from the trend clip including quick Part 1 / 2 / 3 for a full ~30s stitch later in CapCut . Output is an MP4 ready for Shorts/Reels. This post focuses on the API + duration economics side: why an aggregator, which Seedance knobs matter, and how pricing from $5.99 maps to credits. Prices and model ids change; treat live site / console as source of truth. Unlike one-shot 15s party templates, Raindance exposes length: That means the Worker must pass explicit duration every time. Omitting duration and letting the model “pick a smart length” is how bills drift — and how a $5.99 entry pack silently loses money. Live pricing seen on the homepage while writing: packs from $5.99 , with other tiers such as $9.99 one-video credit messaging and multi-packs $23.99 / $14.99 / $36.99 variants appear in copy . No subscription required for the core path. Re-check the create CTA before you quote a friend. | Layer | Choice | Role | |---|---|---| | Front / SSR | TanStack Start Vite | Landing, upload panel, generation status | | Runtime | Cloudflare Workers | Edge deploy, secrets, API routes | | DB | Cloudflare D1 | Credits, orders, task rows table prefixes if DBs are shared | | Payments | Stripe Checkout | One-time packs + optional larger packs; guest checkout | | Video upstream | TryAllAPI → Seedance | Async create + poll | | Analytics | GA | Funnel sanity check | solo/duet photos + length + mode → locked Raindance template prompt → check credits else Stripe → Worker creates Seedance task via TryAllAPI → poll until MP4 URL → store / show → on failure: refund credits Demo clips / scene stills are self-hosted with the product. Do not scrape other CDNs for marketing. Direct vendor onboarding for every video model means accounts, KYC, docs drift, and different async status machines. For a small indie product I wanted one API key in Workers Secrets, USD balance billed by usage, and a path to Seedance without rewriting the client each time the console UI changes. That is what TryAllAPI https://tryallapi.com/?utm source=devto&utm medium=blog&utm campaign=builder is for on this project. Operational checklist after register / top-up: raindance-prod vs sandbox . TRYALLAPI API KEY . Never in the frontend bundle or a blog post. Conceptually the call shape looks like this field names follow the aggregator’s v3 contents API; always re-check current docs : POST /api/v3/contents/generations/tasks Authorization: Bearer