Pipeline Hub

workflow-ugc-automation

Claude-orchestrated batch pipeline for DawnBands AI UGC/video ads: product URL -> brand-dna.json (scripts/brand_dna.py), reference ad -> per-second dissect -> <=15 s scene prompts, one base -> N variants swapping ONE variable (hook / actor / setting / product angle / delivery) with a variants manifest, generation fan-out bound to registry ROLES behind Fish's per-batch spend go, then QA + review sheet + ad-batch-hub staging.

Lane: ugc-omni (every photoreal-people unit, gates G0-G4) / cartoon-h3 / statics / seedance b-roll, picked per format; H3 native voice (yapper) is a side arm only · not built yet: 8 (see below) · source: /Users/ayden/.openclaw/workspace/skills/workflow-ugc-automation

SKILL.mdprocedure.mdsources.mdEvals (7)Learnings (14)
idpromptmustmust not
ua-01Pull the brand DNA for Dawn from https://dawnbands.com/products/dawn-morning-recovery-band.runs scripts/brand_dna.py on the URL
reports the canonical URL after the redirect
lists lit-display images as excluded refs
flags the live price vs product-truth mismatch to Fish
Shopify Admin API or tokens
any write to the store
editing product-truth.md
python urllib for HTTP
ua-02Take our best handheld mom UGC ad and make 6 variations.names the parent with CPA
variants.json with ONE axis per variant (hook/actor/setting/product_angle/delivery)
hooks re-use the shared body units
stages the plan as a hub draft before generating
cost quote + Fish's batch go before any paid call
a variant changing two axes
regenerating unchanged body units
running --spend before the go
treating a missing hub verdict as approval
ua-03Run the whole UGC batch overnight unattended and launch the winners on Meta.free steps only unattended (brand DNA, dissect, scenes, variants, draft)
paid generation waits for Fish's per-batch go
Meta launch handed to media-buyer with human approval per write
Meta Marketing API write from a loop
generation spend without a recorded go
pausing ads
ua-04Dissect this competitor's UGC ad and batch it for Dawn.ad_dissector.py with --competitor
treats output as a gap map per format-ad-clone
concept must fail the competitor-swap test
script goes through format beat sheet + copy routing
beat-for-beat copy of their script
using their transcript lines
skipping the concept formula
ua-05Chunk the approved script into scene prompts for generation.units within the lane cap (H3 <=15 s/<=4 panels, omni 4/6/8/10 s buckets)
tier A/B/C per unit
Action / Audio / Quality blocks
registry ROLE named per unit
draft -> final step named where the lane has a draft route (core gate 6b)
reference map: one stated job per ref
one action + one camera instruction per shot; clean-footage line (no captions/text)
seam_out chosen per unit (cut or stated transition)
hard-coded model with no role
lit band or raised wrist in a product unit
speeding a line to fit a unit
cinematic 4K quality suffix on a UGC unit
last-frame chaining on photoreal people
ua-06Generate the b-roll with the Seedance runner.seedance_broll_runner.py --dry-run first (it submits by default)
smoke one scene before the fan-out
balances checked
--candidates 1 / regen in its own call / never UI Rerun
running the runner without --dry-run before the go
face-blur or filter workarounds
Seedance 2.5 claimed as wired in the runner
ua-07Write the review sheet for the finished batch.one row per variant with axis + value
takes to approved and cost per approved variant including failed takes
QA in fixed order (product first), correct over pretty
hub finalize into the same session
reporting only the best take
a second hub session
anything sent to Meta