Reel Lab — Project Overview

The single reference page for the Reel Lab video studio: every feature we have discussed, the build phases, the technology underneath, and the decisions still open. Use this to add or edit items instead of re-discussing them.

Open the Studio Open Staging GitHub Repository
15
Feature Goals
8
Build Phases
49
Tests Passing
~$0.16
Per Video Clip
What this is: a private video studio at vstudio.viewervelocity.com — feed it a photo, idea, or reference and it makes realistic short meme and ad videos with consistent characters, captions, voice, and sound. Low cost. Personal use, not public.
Working rule: one capability at a time. Get it working, review it, then add the next. Cost is tracked on everything. No automatic paid retries and no premium model fallbacks. We label honestly what is and is not production-ready.

How It Works — The Video Pipeline

Everything in the studio serves this pipeline. The interface follows the pipeline, not the model names.

1 · Gather
→
2 · Generate
→
3 · Review
→
4 · Finish
→
5 · Export
→
6 · Save & Reuse

1 · Gather

Pick the inputs: photo, reference video, character, voice, saved prompt. Everything reusable lives in the Library.

2 · Generate (the only paid step)

Starting image, video clip, voice. Each becomes a Job with a recorded cost.

3 · Review

Preview, then decide keep / retry / save. Nothing is charged for looking.

4 · Finish (free, local)

Captions, music, sound, graphics, trimming. Done with FFmpeg on the PC — no re-spend.

5 · Export (free, local)

Deliver in the shapes needed: portrait 9:16, square 1:1, landscape 16:9.

6 · Save & Reuse (free)

Anything worth keeping goes to the Library, tagged, ready to feed the next video.

Current Status — Honest Assessment

CapabilityStatusNotes
Simple prompt or base image → small motion clipStrongOur best and most reliable output
Basic captions / text overlayWorks LocallyExisting local overlay; not proof that the caption options feature is complete
Caption options: full word-for-word and important-words-onlyNot CompletedEarly priority; both modes need a usable workflow and tests
Continuations (last frame → next clip)DecentCoffee and shower continuations worked
Consistent character (stills)DecentReference-image approach; not trained characters yet
Cost tracking and persistenceDoneLive in the panel
Timelapse / cleanup transformationsWeakGarage test: clutter floated and disappeared. Physics not there yet
Real movements (cart, grill, stove)MixedKling motion-control: ghosting, duplicate people
Video mimic / human replacementUnreliableGhosts and artifacts. Wan Animate still untested
Talking head / short yap videosNot BuiltResearch done; needs text-to-speech and lip-sync
PodcastNot BuiltResearch done; do edited shot / reverse-shot first
Voices / text-to-speechNot BuiltEasy to add; cheap (pennies per clip)
Music / sound effectsNot BuiltLocal mix with FFmpeg; free
Motion graphicsNot BuiltFFmpeg can do it; free. Later priority
Longer segments / long-form videosNot BuiltLater priority

Done Foundation

Private panel on a real domain. Upload (drag and drop) → starting image → 8-second video. Access-code sign-in. Cost per job plus running total. Prompts and photos persist across refresh. Refresh-jobs button. Sticky access code.

Active Library + Asset Vault (Phase 1)

Built and tested locally: save job outputs to our own never-expiring storage, organize with name, tags, and favorite, reuse as video inputs, sidebar navigation (Make / Library / Jobs / Settings). 49 of 49 tests pass.

Blocked on: enabling R2 storage on the Cloudflare account (a dashboard button only you can click). Until then the vault has no file storage behind it.

Key lesson: simple, restrained motion works well. Complex object physics and precise action-replication are the hard, unreliable parts. Play to the strength (simple motion plus good stills) and treat the hard ones as separate research with honest expectations.

Feature Wishlist — Everything We Have Discussed

Listing order is not a build order. Each is built and reviewed one bounded piece at a time.

#FeatureWhat It MeansStatus
1Realistic short videos with text over themThe original ask; simple motion clips with overlaid textWorking
2Quality at low costNever spend on auto-retries or premium models by defaultWorking
3Consistent characters / avatarsThe same person reusable across every video; reference images first, trained characters optional laterPartial
4Talking head / yap videosShort 8–60 second speaking videos with believable lip movementNot Built
5Timelapse / contractor transformationsBuilds, cleanups, demolitions, interiors, movers — with a stable environmentWeak
6One person doing real movementsPushing a grocery cart, cooking at a grill, walking down the street filming herselfMixed
7PodcastOne or two people talking and interacting, natural feelNot Built
8Mimic a video / human replacementKeep the reference action (like jump-roping) but replace the person with any characterUnreliable
9Voices + scriptText-to-speech voiceover with scriptsNot Built
10Motion graphicsAnimated text, callouts, logos. Later priority; separate from basic captionsNot Built
11RevisionsFix a flaw (like a deformed arm) without redoing everythingNot Built
12Private dashboardSee everything we have made with cost per jobWorking
13Caption optionsFull word-for-word captions OR only important words and phrases highlighted. Early priorityNot Completed
14Longer segments / long-form videosLonger talking segments first, then complete long-form pieces. Later priorityNot Built
15Background music / sound effectsLocal mixing with FFmpeg; freeNot Built

New Idea URL to UGC Video discussed, not started

The idea: paste a product page URL — starting with Amazon — and the studio pulls the product images and description automatically, then creates a UGC-style (user generated content) video promoting the product. No manual upload of product photos or copy-pasting descriptions.

What it would do

  • Accept a product URL (Amazon first, other stores later).
  • Fetch product images, title, and description.
  • Build a short promotional script from the product details.
  • Generate a UGC-style video (casual, person-on-camera feel) promoting it.

What needs deciding before building

  • How to fetch Amazon data — Amazon blocks bots hard, so a scraping service or API may be needed.
  • Does this need voice and captions built first to feel like real UGC?
  • Where it sits in the build order (my lean: after captions, as its own Make workflow).

Reference tool: adskull.io — free URL-to-UGC-video tool (what this idea is modeled on).

Build Phases — One Piece At A Time

Each row is one finished, reviewable piece. Nothing starts until the previous one is reviewed (or explicitly shelved with a reason).

PhasePieceWhy In This OrderFinish Line
0FoundationThe base studio must exist firstDone Private panel on a real domain: photo → image → video, cost tracking, persistence
1Library + Asset VaultFixes expired provider links; everything after depends on itActive Save any job output from any browser; find it by name and tag; reuse it as a video input; it never expires
2Captions WorkflowEarly priority; feeds every video goalReal speech video in → timed captions → correct text and timing → export a captioned copy with original audio kept
3Versions: Re-run With ChangesThe revisions goal; cheap once jobs carry lineageFrom any job, change the prompt and re-run; both versions visible and linked
4Projects + Export VariantsThe repurpose engine (shape, caption mode)Assemble clips and captions in one project; export portrait and landscape copies
5Characters in the LibraryMust precede talking head, podcast, and replacementOne saved character used across two different videos and visibly consistent
6Voices in the LibraryMust precede talking head and podcastOne saved voice used in two different videos
7Capability Workflows, one at a timeThe hard video abilities; each adds exactly one Make cardReal movements → talking head → podcast → timelapse → mimic; each with agreed test examples and an honest quality bar
8Motion Graphics + Long-FormStated last prioritiesDefined when selected
What we explicitly do not do: build all the screens first and fill them in. No greyed-out menu cards of future ideas. No dashboard, library, and editing suite bundled into one phase. The sidebar gains words only when the area behind them is real.
Where "URL to UGC Video" fits: not placed yet. It is a Make workflow that depends on product-data fetching, script writing, and likely voice and captions. Recommendation: treat it as its own phase after Phase 2 (captions), or fold it into Phase 7 if we want the hard video abilities first. Your call.

Tech Stack — Everything Under The Hood

Hosting & App

  • Cloudflare Worker named reel-lab on the seosemworks account. Serves the panel and proxies all AI calls.
  • Live address: vstudio.viewervelocity.com (a Worker route on the viewervelocity.com domain).
  • Staging: reel-lab-staging.seosemworks.workers.dev (Worker reel-lab-staging).
  • Panel: plain HTML and JavaScript (no framework) in app/public/index.html. Job history in browser storage.
  • API proxy: app/worker.js — upload, image, video, status query, and library endpoints. The AI key never leaves the server.

AI Generation (RunningHub)

  • RunningHub API (runninghub.ai) — one paid gateway for all generation models.
  • Wan 2.2 — 8-second video clips. Portrait 720×1280 and landscape 1280×720.
  • Nano Banana 2 (economy) — starting images and character stills.
  • Kling motion-control — real-movement tests (unreliable so far).
  • Cost is read from the provider response on every job and shown in the panel.

Storage

  • Cloudflare KV (reel-lab-kv) — asset metadata: names, tags, favorites, lineage, cost.
  • Cloudflare R2 — the actual image and video bytes in the vault. Not yet enabled — waiting on the account setting.
  • Saved assets get copied into our own storage the moment you save them, because provider links expire.

Local Finishing (free)

  • FFmpeg on this PC — captions, music and sound mixing, voice, cropping, export.
  • Python scripts — the original pipeline (run_test.py, custom scenes, test runners) for work not yet in the panel.
  • Finishing never re-spends: only the Generate step costs money.

Code, Tests & Secrets

  • GitHub: makbot2000/reel-lab (private). main = production, staging = staging.
  • Tests: Node's built-in test runner, 8 suites / 49 tests, including real-Chrome browser flows. Run before every deploy.
  • Access: one access code (the APP_TOKEN secret) typed once in the panel.
  • Secrets: the RunningHub key and access code live only as Worker secrets — never in code or chat.

Known Format Limits

  • Square video output is not supported by the current video model — shown honestly in the interface. Square images and square exports of existing video are fine.
  • Generated videos are silent — sound is added locally.
  • ETA shows "unavailable" until we have real completion history to estimate from. No invented countdowns.

Costs — Observed Prices

ItemCostNotes
Image (Nano Banana 2 economy)~$0.027 eachStarting images and character stills
Wan 2.2 vertical video~$0.16 per 8-second clipOur workhorse
Kling motion-control~$0.06 per secondUntested here for quality
Captions / music / voice mixingFreeDone locally with FFmpeg
Text-to-speech voice~pennies per clipWhen voices are built
Cost rules: no premium models. No paid retries without asking. Every job shows its cost. The human is the cost guard.

Deploy & Workflow

How Changes Go Live

  1. Work and commit on the staging branch.
  2. Deploy staging and test there.
  3. After review, merge staging into main.
  4. Deploy production (vstudio.viewervelocity.com).

Tests run before every deploy. Production is never deployed from unreviewed work.

Deploy Commands (from the app folder)

# staging first
npx wrangler deploy --config wrangler.staging.toml

# production only after review
npx wrangler deploy

# regression tests before any deploy
node --test --test-concurrency=1 \
  tests/*.test.cjs tests/*.test.mjs

Where Everything Lives

  • Project folder: X:\Dropbox\hermes_projects\reel-lab\
  • Source of truth for goals and status: PLAN.md in that folder
  • Studio map and build order: INTERFACE-PLAN.md
  • Code: app\ (worker, panel, tests)
  • Generated media: stays on Dropbox only — never in git

Standing Rules

  • Never resubmit a job on timeout — poll for status instead.
  • Never auto-retry a paid job or fall back to a premium model.
  • Paid generation stays behind an explicit click with the cost shown.
  • Finishing work (captions, music, trimming) is always free and local.
  • Test with clearly labeled fixtures; no paid generation just to grab a test sample.

Open Decisions

DecisionContextStatus
Enable R2 storage on the Cloudflare accountThe vault needs file storage. This is a dashboard setting only you can switch on. Everything else in Phase 1 is built and testedWaiting On You
Review Phase 1 (Library) on stagingOnce R2 is on: deploy staging, save real media end to end, then your review before productionNext Up
A real short video with speechNeeded to test the captions workflow. Generated clips are silent, so they cannot prove transcription or timingWaiting On You
Where "URL to UGC Video" sits in the build orderMy lean: its own phase after captions. Alternative: Phase 7 if the hard video abilities matter moreYour Call
How to fetch Amazon product dataAmazon blocks bots; likely needs a scraping service or product API. This shapes what the UGC feature can pull automaticallyYour Call
Organizing style for the LibraryTags plus favorites (my lean — simple), or folders, or bothYour Call
Cost guardrail in SettingsWarn before any single job over a set amount? If yes, what amount?Your Call
How to use this page: when a new idea or change comes up, tell me to add it here — the Feature Wishlist, Build Phases, Tech Stack, and Open Decisions tables all grow with the conversation, so nothing gets repeated or lost.

Reel Lab project overview · vstudio.viewervelocity.com · GitHub repository · source of truth: PLAN.md + INTERFACE-PLAN.md in the project folder