AI video iteration and evaluation tool built around the Five Rope methodology. Structured scoring replaces "pretty good" with measurable, traceable, improvable.
Every AI video render gets evaluated, scored, attributed to a specific control lever, and linked to its generation settings. Every iteration decision is traceable. Every improvement is measurable. Nothing lives in someone's head.
The core loop:
Generate JSON → Render in Wan2GP → Score in Iteratarr →
Attribute to rope → Generate next iteration JSON → Repeat until locked
Six controllable levers (called ropes) drive every prompt engineering decision:
| Rope | What it controls | JSON field |
|---|---|---|
| 1 — Prompt Position | Word order. Identity block first, never compressed. | prompt |
| 2 — Attention Weighting | Token emphasis. (mckdhn:1.3) boosts, (Monaco:0.9) reduces. |
prompt |
| 3 — LoRA Multipliers | Phase-aware weights for dual-DiT. "1.0;0.3 0.3;1.2" |
loras_multipliers |
| 4a — CFG High Noise | Prompt adherence in composition pass. Sweet spot: 5.9-6.2 | guidance_scale |
| 4b — CFG Low Noise | Prompt adherence in identity refinement pass. | guidance2_scale |
| 5 — Steps Skipping | Faster iteration renders. Taylor2 cache. Off for production. | skip_steps_cache_type |
| 6 — Alt Prompt | Secondary prompt driving low noise phase only. Pure identity. | alt_prompt |
Bonus levers: flow_shift, NAG_scale, sample_solver
- 32 frames for iteration (half render time)
- 81 frames for production (after lock at 65/75)
- Same seed across all iterations — controlled experiment
- One variable change per iteration — clean comparison
- Score threshold: 65/75 to lock as production ready
75 points maximum across three categories:
Identity (40 max): Face match, head shape, jaw, cheekbones, eyes/brow, skin texture, hair, frame consistency
Location (20 max): Location correct, lighting, wardrobe, geometry
Motion (15 max): Action executed, smoothness, camera movement
- Three-panel dark UI — terminal meets broadcast suite aesthetic
- Episode Tracker kanban — not started → in progress → evaluating → locked → in queue
- 15-slider evaluation with live score ring and ghost markers (previous iteration scores)
- Smart rope guidance — contextual suggestions based on lowest-scoring element
- Import Evaluation — paste structured JSON from AI assistant, pre-fills everything
- AI vs human score tracking — ai_scores, human_scores, score_deltas on every evaluation
- Side-by-side video comparison — previous vs current render via
VideoDiffcomponent - FFmpeg frame extraction — auto-extract thumbnails, copy path for external review; dedupes PNG/WebP frames and skips corrupted files before vision scoring
- Frame strip — thumbnail strip in evaluation panel via
FrameStripcomponent - JSON diff panel — see exactly which generation settings changed
- Prompt intelligence — phrase-level prompt diffing, score correlation, and inline diff UI via
PromptDiffInline - Iteration lineage — ancestor chain visualization and scoring pattern analysis via
IterationLineage - Ghost markers — previous iteration scores as trend-coloured dots on sliders
- Character Registry — LoRA files, locked identity blocks, proven settings
- Production lock — 7-step workflow: LOCKED folder, 81-frame JSON, DaVinci sidecar, queue
- Structured file layout — episode/scene/clip hierarchy with auto-naming
- Wan2GP integration — output_filename auto-set, render path auto-detected
- Autopilot — fully automated score → recommend → apply → render loop
- Cross-clip analytics dashboard — overview pills, per-character performance, rope effectiveness bars, seeds analysis tab (
SeedsTab), stalling/locked/healthy clip sections; shortcut in Seed HQ header - Storage monitoring — disk usage tracking per clip, iteration, and frame directory; surfaced in
StoragePage - Telemetry foundation — opt-in, anonymized, off by default
- Backend: Node.js, Express, SQLite (better-sqlite3), FFmpeg
- Frontend: React 18 (Vite), Tailwind CSS v4
- Ports: 3847 (backend), 3848 (frontend dev)
# Backend
cd backend
npm install
npm run dev
# Frontend (separate terminal)
cd frontend
npm install
npm run devEdit backend/config.json:
{
"wan2gp_json_dir": "path/to/wan2gp/app",
"wan2gp_output_dir": "path/to/wan2gp/app/outputs",
"wan2gp_lora_dir": "path/to/wan2gp/app/loras/wan",
"project_base_dir": "path/to/your/project",
"vision_model": "claude-sonnet-4-6",
"score_lock_threshold": 65,
"iteration_frame_count": 32,
"production_frame_count": 81,
"telemetry_enabled": false,
"port": 3847
}Three tiers. Curation is the moat. Not completeness.
Tier 1 — Core Ropes: Always visible. Directly and predictably affect output quality.
Tier 2 — Advanced Levers: Collapsed by default. Power users reach for these when Tier 1 isn't solving the problem.
Tier 3 — Passthrough: In the JSON for Wan2GP. Never shown. Preserved silently on generation.
Off by default. Opt-in only. When enabled, records evaluation scores, rope attributions, and generation settings locally. Export is fully anonymized — no file paths, no prompt text, no character names.
The methodology is universal. The data is model-specific. Keep them cleanly separated.
Private. Not yet released.