◆ Vortex CCReport · 2026-10-22
ShippedScreensMontageModelsNot achievedVerification
Branch chief/44ef3393b2 · 3 commits

Vortex Creative Center v0.1:
the first interface

A studio for iGaming video formats, for up to five people. Each format is a harness: a versioned spec the team runs, rates and improves. Shots come from Higgsfield and KIE, songs from Suno via KIE, and the montage follows the cut rules of mexicat/pdoom-video. Built in the bettter.us design system.

Every format a harness. Every cut on the beat before the word.

01

What was asked

02

What shipped

01
Five seats, two kinds of space
The first visitor creates the admin account; the admin invites four more with one-time links. Everyone gets a private dev space and shares one team space. Harnesses are forked into a private space and published back as the next version.
02
Six iGaming harnesses
Big Win Reaction, Crash Multiplier Rush, Slot Launch Trailer, Bonus Feature Explainer, AI Presenter, Theme Song Lyric Video. Each defines sections, shot prompts, draft and final models, a Suno plan, a voice plan, montage numbers and compliance rules (18+, banned phrases).
03
Every model, honestly labelled
324 catalog entries across both providers, checked live. Each model is labelled ready in the studio, ready via API, needs a Higgsfield CLI login, or web app only. Prices come from the providers' own estimate endpoints and price tables.
04
Price, then confirm
Every paid call (shot, Suno song, voice line) opens a dialog that prices it and shows the balance. Nothing runs without that confirm. Takes, tracks and voice lines can also be uploaded instead.
05
Montage on pdoom-video's rules
Beats are analysed with librosa on the same ffmpeg clock as the render. Cuts land on the last beat before each phrase and never inside a word; payoffs land on downbeats. Captions light up word by word. Ten rule checks run on every plan.
06
Render with QA built in
ffmpeg renders frame-exact cuts with karaoke captions, the 18+ badge and the legal end card. Music ducks under the voice, loudness is normalised to −14 LUFS / −1 dBTP, and BT.709 is tagged. Each render writes a cut sheet; shots without a take render as labelled slates.
03

Screens

Captured with browser-use in local Chrome from a mock-provider demo (no paid calls). The demo users are “Demo Producer” and “Demo Editor”. The model screens come from a live check against the real providers.

Studio home in the shared space: harness cards on dark green, productions, providers, team activity
Studio home (Shared): harness cards, productions, provider health, team activity. The switch at top left changes between My space and Shared.
Harness page for Big Win Reaction with section strip and shot list
A harness: section strip (payoffs in pink), shots with prompt templates, models per shot. Fork to my space, Edit spec (each save is a new version).
Harness models, music, voice, montage rules, compliance, versions and learnings panels
The rest of the harness spec: models, Suno V6 plan, voice, montage numbers, compliance, inputs, versions and learnings from runs.
Production shots tab with prompt, model picker and take preview
Production · Shots: edit the prompt, pick a model (draft or final), Price & generate, choose between takes, or upload your own clip.
Production audio tab with Suno music form and voice lines
Production · Audio: Suno V6 / V6_MINI / V6_WILD through KIE (2 tracks per call, beat analysis on arrival) and ElevenLabs voice lines with word timestamps.
Render tab with draft video and QA checks
Production · Render: draft 540×960 or final 1080×1920. Loudness, true peak and length checks, plus the plan checks at render time.
Team page with five seats, invites and account
Team: five seats, one-time invite links (admin only), and each person's drafts and productions.
New production brief form
New production: the harness's inputs fill its prompts, music style and voice lines. Choose My space or Shared.
Montage rules page
Montage rules: the 14 rules every harness inherits, each with its source in pdoom-video.
Sign-in screen
Sign in. Before the first account exists, the same layout shows “Set up the studio”.
Studio home on a phone
Phone, 390 px
Production montage on a phone
Production on a phone
bettter.us homepage used as the design referencebettter.us numbered section with cards
Design reference, bettter.us: floating white nav bars with the segmented switch, numbered uppercase heads with a dash, dark-green bands, tall numbered cards, yellow kinetic captions. Univers LT Pro is licensed, so Archivo stands in.
04

Montage

Montage timeline with waveform, beats, shots, words, captions and phone animatic
One clock. From top: waveform (pink = music ducked under the voice), sections, beats (white = downbeats), shots with cuts in yellow, voice words, caption chunks. Right: a phone animatic that plays the chosen takes against the music with word-by-word captions inside the 9:16 safe zone, then the rule checks and per-production overrides.
Draft render (540×960, 12.00 s) from the mock demo: green “mock take” slates stand in for generated shots, the music is a synthetic 128 BPM track, and the voice is placeholder tones. The real parts are the cut timing, the karaoke captions, the 18+ badge, the legal end card, the ducking and the loudness.
Cut sheet: frames before, at and after each cut
Cut sheet: the frame before, at and after every cut (pdoom-video's QA practice).

Rules taken from pdoom-video

  • One clock. The analyser decodes through ffmpeg so it and the render agree; this removes the ~23 ms MP3 encoder offset pdoom warns about.
  • Shots are anchored to their phrase by text or line, never by a stored time.
  • The cut goes on the last beat at or before the phrase's first word (±20 ms), never inside a word.
  • Hard cuts; payoffs and section changes land on downbeats; sub-cuts stay at least 0.3 s apart.
  • A word lights up exactly at its start; a dim preview may appear up to 0.4 s early.
  • Renders are tagged BT.709 with faststart and get a cut sheet.

Added for short-form ads: hook inside 2 s, voice lines starting just after a beat, music ducked 8–12 dB, −14 LUFS, 9:16 platform safe zones.

05

Model availability

Checked live on 2026-10-22 with the borrowed keys, using free calls only (Higgsfield GET /models and /estimate, KIE balance).

Asked forHiggsfieldKIEPrice seen
Seedance 2 Miniweb app onlyAPI · studio adapterKIE 3.8 cr/s at 480p (15.2 cr for 4 s ≈ $0.08)
Seedance 2.5API · t2v, i2v, ref2v, edit, extendAPIHiggsfield ≈ $1.03 for 5 s at 480p (before discounts)
Kling 4.0 (released 2026-10-21)web app onlynot listed–
Kling 3.0 std / pro / 4K / turbo / omni / motion controlAPIAPIHiggsfield std 5 s: 6.72 cr ($0.42) without sound; KIE 720p 5 s: 70 cr ($0.35)
Suno V6 · V6_MINI · V6_WILD–API (V4–V5.5 discontinued)12 cr ($0.06) per call, 2 tracks
ElevenLabs voice (word timestamps)–APIturbo 2.5: 6 cr per 1,000 characters
Talking avatars (Kling AI Avatar, InfiniteTalk, OmniHuman)web app onlyAPIKling Avatar std 8 cr/s
Veo 3.1, Nano Banana Pro/2, GPT Image 2CLI login onlyAPIsee the Models page
Sora 2, Midjourneynot offered by either API–
Models page spotlight cards with live access labels
Models · “Asked for first”: every route to each model and whether the studio can call it now (live check).
Models page full table
Models · all 324 entries, filterable by kind, provider and “callable only”. Highlighted rows have a studio adapter.
06

Not achieved

KIE is effectively blocked. The borrowed AgentRadar key KIE_API_KEY is rejected (401). The studio falls back to the older backup key in the same file, which works but holds 8.13 credits: less than one Suno song (12) or one 4 s Seedance 2 Mini draft (15.2). Music, voice and every KIE video model will be refused until the team's own key is in .env.local.
07

Verification

Tests
npm test: 17/17 pass. 10 montage tests cover beat grid, cut before phrase, never inside a word, captions, sentence-break chunks, ducking, payoff downbeats, every seed harness planning cleanly, and price parsing. 7 end-to-end studio tests use mock providers, a real ffmpeg render and librosa.
Beat accuracy
Known-tempo tracks at 96, 128 and 140 BPM: max error 7.3–8.0 ms, mean ~4 ms against the true grid (20 ms cut tolerance).
Render
Final 1080×1920: h264 yuv420p, BT.709 tagged, 30 fps, 12.00 s, −14.3 LUFS, −1.8 dBTP. Draft: −14.3 LUFS, −1.1 dBTP.
Browser
browser-use in local headless Chrome:
  • Login works, and the price dialog priced a shot and showed the balance.
  • A render started from the UI, and the page refreshed itself when the render finished.
  • No horizontal overflow at 390 px on 11 pages.
Live providers
Free calls only:
  • Higgsfield /models: 88 models.
  • Higgsfield /estimate: Seedance 2.5 and Kling 3.0 priced.
  • KIE balance: 8.13 credits.
  • A throwaway local instance was used and then deleted.
Security
  • Keys stay server-side, are never logged or rendered, and .env.local is git-ignored.
  • Passwords are hashed with scrypt; session cookies are HttpOnly.
  • Other users' private media returns 404, path traversal is refused, and cross-origin POSTs get 403 (all covered by tests).
Commits
b176823 v0.1 studio · 0f6cbbf polish after the browser pass · 04589f7 price parsing and table fix