ai newsSa., 31. Okt.
EilmeldungClaude Code for VS Code 2.1.313 backdoor: how to check your machine and clean up

Chuttamalle Dance AI: Stripe Credits for a One-Portrait Generative Vertical Clip

How I shipped an authorized-portrait → vertical generative dance product on Cloudflare Workers — with Stripe credits that refund when Seedance says no. trychuttamalle.app is a fan-style tool around the Chuttamalle / Devara-song dance edit trend: upload an authorized adult portrait → get a ~15s 9:16

dev.toSamstag 06:32 · 31.10.3 Min. Lesezeit
Bild: dev.to

Posted on Oct 31 • Originally published at trychuttamalle.app

How I shipped an authorized-portrait → vertical generative dance product on Cloudflare Workers — with Stripe credits that refund when Seedance says no.

trychuttamalle.app is a fan-style tool around the Chuttamalle / Devara-song dance edit trend: upload an authorized adult portrait → get a ~15s 9:16 generative dance MP4 (720p path). Unofficial — not affiliated with the film or studio. AI-labeled results; original/AI or licensed audio only; no NSFW.

This write-up focuses on the Stripe credit loop that makes a one-photo dance product feel trustworthy. Prices and model ids change; treat live site / console as source of truth.

Failed generations should restore credits — that sentence belongs next to the price, not buried in a ToS PDF. Guest Stripe checkout keeps the “I only want one vertical” path alive.

This niche is a generative dance edit from a single clear face/body reference — not a dedicated face-swap booth with left/right seats. UX copy stresses: even light, face toward camera, authorized adult only. That reduces role confusion and support load.

Product is also honest about what it is not: not a mega-template library, not an official studio app. Honesty converts better than feature inflation.

Never merge (1) and (3) in one mental spreadsheet. Underpricing usually comes from ignoring retries + refunds + Stripe fees.

portrait → generative dance template → if credits low → Stripe → lock credits → create task → poll MP4 → deliver → failed → unlock/refund credits Enter fullscreen mode Exit fullscreen mode

Operational checklist after register / top-up:

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 <TRYALLAPI_API_KEY> Content-Type: application/json Accept-Encoding: identity GET /api/v3/contents/generations/tasks/{id} Enter fullscreen mode Exit fullscreen mode I send Accept-Encoding: identity from the Worker because some gateways behave badly with transparent decompression. Model ids used in production look like Seedance 2.x family strings — treat console ids as source of truth, not this paragraph.

A few details that bit me across this family of sites:

Rough mental model for upstream cost (illustrative only — use your own usage fields and invoices):

tokens ≈ duration_sec × width × height × fps / 1024 cost ≈ tokens × price_per_million_tokens Enter fullscreen mode Exit fullscreen mode Price the site after you measure a few real runs with retry margin, Stripe fees, and failed-job refunds — not from a spreadsheet fantasy of 0% failure.

One-reference notes: keep the locked dance template stable; push 9:16 for Shorts; rehost signed URLs; safety refusal → refund + short message.

Demo UIs are easy. The line between toy and product is:

Two books of account stay separate: USD balance at TryAllAPI (your cost) vs site credits (what you sold). Mixing them in one mental ledger is how you underprice or invent “mysterious” losses.

When several products share one Stripe account, isolate webhooks by endpoint or by metadata ( site / product ). Callbacks pointed at the wrong apex domain are a classic multi-site footgun.

Secrets stay in Workers: TRYALLAPI_API_KEY, STRIPE_SECRET_KEY, webhook secret, auth secrets. The browser only ever sees publishable Stripe keys if needed.

pnpm install # wire D1 database_id, production env, custom domain in wrangler pnpm cf:deploy Enter fullscreen mode Exit fullscreen mode Before calling a deploy “done”:

Production origin: https://trychuttamalle.app (alternate hostname may exist — keep Checkout return URLs aligned).

Face-based generation is not “just another SaaS CRUD app”:

Those constraints belong in the product, not in a footnote you add after the first dispute email.

Creators: try trychuttamalle.app with a photo you have rights to. Builders: TryAllAPI for create/poll, then wrap Stripe credits with automatic refunds. Price the pack after you measure real 720p COGS — then make failure boring.

Quelle: dev.to (dev.to). Original öffnen