Repository navigation
Kilo/mega 100 - #837
Open
dragongod73584-design wants to merge 204 commits into
Open
Kilo/mega 100#837dragongod73584-design wants to merge 204 commits into
dragongod73584-design wants to merge 204 commits into
Conversation
Implements the Master Plan's business-documentary pipeline: the manifest, its 13 director skills, the artifact schemas it needs, and the two governance gates the plan makes non-negotiable. Pipeline - pipeline_defs/business-documentary.yaml: topic -> research -> evidence -> script -> fact_check -> storyboard -> narration -> footage -> editorial -> compose -> qa -> publish, budget_default_usd 0.0, human gates on topic/evidence/script/fact_check/storyboard/footage/publish. - skills/pipelines/business-documentary/: executive-producer plus one director per stage. Planning-stage and compose-stage skills carry the Present Both Composition Runtimes contract explicitly. Governance - lib/zero_cost_gate.py: strict zero-cost gate. Unknown cost, unknown route, unapproved paid action or unavailable tool -> BLOCKED. Failure taxonomy (auth/billing/rate_limit/transport/no_results) stays distinct; reroute_allowed() is always False, so an auth or billing failure stops the run instead of silently switching vendor. Adds search_stats_summary for per-query result classes. - lib/artifact_ids.py: resolves every evidence/source/scene/asset ID a downstream artifact references and reports each dangling reference with stage, artifact, field and value. A failed or blocked QA report cannot produce a publish package. Schemas (additive; existing artifacts unaffected) - New: topic_brief, evidence_ledger, fact_check_report, narration_manifest, alignment_report, qa_report, publish_package. - Extended: script.sections[].evidence_ids; scene_plan search_queries / visual_class / diagram_spec; asset_manifest author / attribution / license_url / sha256 / search_query / selection_reason / qa_verdict; research_brief.sources[] source_id and provenance fields; optional run_id / created_at on the six artifacts the pipeline produces. Tests - tests/factory/: 135 tests covering the manifest contract, artifact schemas, ID resolution, the zero-cost gate, a full artifact chain checkpointed through lib.checkpoint, and honest capability reporting. - tests/contracts/test_runtime_presentation_contract.py: the planning-stage lookup now falls back to a pipeline's first stage, so a pipeline that names it something other than proposal/idea cannot escape the contract. Verification: tests/factory 135 passed; tests/contracts 1244 passed, 7 skipped; tests/lib 58 passed; tests/tools 687 passed; tests/backlot 37 passed; tests/styles 15 passed; tests/qa 2 skipped. ffmpeg/ffprobe were missing from this environment and were installed (apt) before the runs, which also cleared two pre-existing environment-caused failures. Zero-cost mode verified: no paid API call, no generation, no upload. Only free operations ran (apt/pip installs, local diagram render).
…eal audio
Problem: the tool passed the `model` input straight to `piper --model`, and
`python -m piper.download_voices <voice>` writes the voice into the current
directory unless --download-dir is given. A bare name like
`en_US-lessac-medium` therefore only resolved when the process happened to
run from the directory holding the voice; everywhere else piper exited with
"Unable to find voice" and the tool surfaced a bare exit code with no fix.
Evidence: PiperTTS().execute({'model': 'en_US-lessac-medium'}) failed with
"ValueError: Unable to find voice: en_US-lessac-medium" from a working
directory that did not contain the voice files.
Minimal fix: resolve_voice_model() searches $PIPER_VOICES_DIR, then
~/.local/share/piper/voices, then the cwd, and raises an error that names
the download command and the directories searched. install_instructions
and the input schema description document the same order.
Regression test: tests/tools/test_piper_tts.py pins explicit-path priority,
each search directory, the actionable failure message, and real synthesis
(skipped with a reason when no voice is installed).
tests/factory/test_narration_real_audio.py synthesizes real per-section
narration, measures durations with ffprobe, hashes the exact input text and
builds a schema-valid narration_manifest from the measured values — the
Master Plan's "duration comes from the audio file, not a WPM estimate" rule.
Verification: tests/tools/test_piper_tts.py 9 passed;
tests/factory/test_narration_real_audio.py 6 passed;
tests/factory + tests/tools/test_piper_tts.py + tests/contracts →
1390 passed, 7 skipped, exit 0. Real artifact: 232492-byte WAV,
pcm_s16le, 22050 Hz mono, duration=5.270930, clean full decode.
Risk: additive — an explicit path keeps its previous behaviour; only the
bare-name case changes, and it previously failed outright.
…s 1-11) - Fix stale checkpoint path: copy all 10 stage checkpoints into the canonical nested directory lib.checkpoint._checkpoint_path resolves to - Update test_pilot_artifacts.py to assert the completed run: topic approved (human_approved=True), all stages 1-11 checkpointed as completed - Update OPENMONTAGE_RESUME.md: P1 marked complete, rendered MP4 documented, Stop Point/Next Action reflect the finished pilot - Append 2026-10-16 entry to OPENMONTAGE_WORK_LOG.md Pilot artifacts and checkpoints are gitignored by design (projects/).
…load decision, OpenVids refs, NTRS probe) - TOOLING_DECISIONS.md: new §8 table auditing the remaining stages (primary-document research, claim ledger, storyboard ID validation, packaging, upload, analytics review) — existing tool path or MISSING, license, $0 check, unknown; §9 upload decision (manual YouTube Studio publish; API upload only as private draft later; no OAuth, no credentials); §10 reference-only OpenVids (bazodev/open-vids, Apache-2.0) license-record and trusted-source fields worth copying into asset_record, no code copied; §11 Milestone B NTRS client probe item (no client in repo, not written; direct reachability attempted, timed out -> ERROR not zero results). - VIABILITY_PROBE_2026-10-16.md: Probe 4 NTRS client probe item recorded (not executed; network timeout -> ERROR, not zero results). No code changes, no installs, no process/lock changes. Docs only.
… skills
- TOOLING_DECISIONS.md §12: D1 audit (40-min time-box; docs/skills-in-.kilo +
/tmp scripts only; no paid routes/keys/process-lock changes). Preflight clean;
ffmpeg 6.1.1 filters all present (sidechaincompress, loudnorm, acrossfade, xfade,
amix, alimiter, ebur128); python libs observed (numpy, onnxruntime, piper-tts 1.8.0).
Voice-license table: Piper engine GPL-3.0-or-later (dist-info METADATA); Piper voice
en_US-lessac-medium UNKNOWN (sidecar has dataset:lessac, no license field); Kokoro/
Chatterbox UNKNOWN (not installed). Piper smoke test on CPU: audio 26.98 s, wall 5.74 s,
RTF 0.21 (~4.7x real-time), sample in /tmp, needs human listening, not a commercial-use
approval (voice license UNCONFIRMED). stable-ts 2.19.1 installed (attempt 2 after 300s
timeout); word_timestamps=True -> 82/80 reference words (~100%) in ~7.3 s (RTF 0.27);
known-text result.align not present in API (not exercised). piper fallback: 0% word
timestamps. Audio finishing prototype /tmp/opencode/d1_finished.wav: voice + synthetic
440 Hz bed -> sidechaincompress -> amix -> two-pass loudnorm (I=-14/TP=-1.5/LRA=11);
ebur128 verify -13.8 LUFS integrated, -5.2 dBFS true peak, LRA 1.2 LU. No blockers;
unstable/unknowns recorded.
- EDITING_DOCTRINE.md (new): editing doctrine ported read-only from agamm/video-agent (MIT,
pinned cc00d28..., LICENSE read; rugelees fork not consulted; not installed; no yt-dl/
vfx-edit/Remotion). Rules mapped to schemas/artifacts/edit_decisions.schema.json
(per-cut reason, J-L splits, pacing lint shot variation >= ~15% INITIAL GUESS, pause gaps,
cut-in-silence, beat-snap, transitions, captions --clean, audio ducking, universal op
order); thresholds marked INITIAL GUESSES. MUSIC_POLICY.md (new): pilot uses NO music
unless license evidence stored; allowed sources; required record fields
(source_url/license_text/author/download_date/sha256/commercial_use_allowed/
modification_allowed/attribution/license_url); Content ID risk UNKNOWN.
- .kilo/skills/{cutting-rhythm,edl-edit,audio-edit}/SKILL.md (new): Linux-adapted, pinned to
upstream commit cc00d2815869cbf2d708426a5082612f0c3b4dbf; no mlx-whisper, no
h264_videotoolbox, no uv run video-agent CLI.
- OPENMONTAGE_RESUME.md / OPENMONTAGE_WORK_LOG.md: D1 stop point, next action, work-log entry.
No code, repo installs, model runs, or lock changes (stable-ts to system site-packages only).
- Add four Kilo subagents: editor, qa-reviewer, evidence-checker, footage-scout (.kilo/agents/) - Add docs/openmontage/QA_SPEC.md (hard checks, qa_report.json schema, INITIAL GUESS thresholds, gate mapping, added-value metrics) - Add docs/OPENMONTAGE_PLAN_V3_2.md (niche, max-3-runtime stack, asset_record fields, stage 0 viability gate, Go/No-Go gates, publishing, speed, zero-secrets, milestone order, open risks) - Mark master plan SUPERSEDED by v3.2; append v3.2 changelog entry - Update AGENTS.md: agent roster, permissions summary, orchestrator rule - Append dated entry to docs/OPENMONTAGE_WORK_LOG.md No application code, no installs, no network except reading Kilo docs.
…nt topic probe - Add docs/openmontage/RIGHTS_MODEL.md (rights_basis enum, fail-closed source_policy_us_gov conditions, flags NEEDS_REVIEW, unknown=>not usable) - Add docs/openmontage/audit/C1_RIGHTS_REPORT.md (re-classification of Boeing 720/Shuttle clips; X-15/XB-70/Helios probes; NTRS primary-doc attempt; stage 0 gate recompute; qa-reviewer PASS) - Append dated C1 entry to docs/OPENMONTAGE_WORK_LOG.md All 5 topics NO-GO on footage (binding constraint: NASA API exposes no license; unreviewed flags); NTRS network ERROR (primary docs unverifiable). No code, installs, or lock changes.
- Add docs/openmontage/audit/C2_RIGHTS_EVIDENCE_REPORT.md (reason-code breakdown, NTRS retest persistent ERROR, rights evidence pass on 8 clips, NASA exceptions re-quoted, proposed gate wording) - Add docs/openmontage/audit/REVIEW_QUEUE.md (per-clip evidence + human checklist + preview/contact-sheet paths) - Append dated C2 entry to docs/OPENMONTAGE_WORK_LOG.md REJECT=29, NEEDS_REVIEW=8, usable=0; all 5 topics NO-GO on footage. NTRS network ERROR persistent (HTTP 000 x4). No code, installs, or lock changes. Media previews in gitignored projects/ (not committed).
…agnosis - Add docs/openmontage/audit/C3_RIGHTS_DIAGNOSIS_REPORT.md (R1 sub-reason breakdown, NTRS persistent ERROR x4, candidate sweep Shuttle/Edwards+X-15, gate check, pivot recommendation) - Rewrite docs/openmontage/audit/REVIEW_QUEUE.md (corrected NEEDS_REVIEW list of 3 clips, owner checklist, third-party credit=REJECT rule) - Append dated C3 entry to docs/OPENMONTAGE_WORK_LOG.md R1 was stricter than written RIGHTS_MODEL.md (source_policy_us_gov needs no license statement); 25 clips reclassified. Third-party credit clips → REJECT. NTRS TCP 443 persistent block (HTTP 000 x4), local network OK. All 5 topics NO-GO; pivot recommendation: no topic reaches 10 usable clips. No code, installs, or lock changes. Media previews in gitignored projects/ (not committed).
- Add docs/openmontage/audit/EVIDENCE_CID_PRIMARY_DOCS.md (6 CID primary docs, EXTERNALLY_VERIFIED_METADATA) - Add docs/openmontage/audit/C4_CID_FOCUS_REPORT.md (clip classification, gate recompute, owner review pack, proposed insignia wording owner decision) - Append docs/openmontage/audit/REVIEW_QUEUE.md (CID NEEDS_REVIEW list + owner checklist; contact sheets blocked) - Append dated C4 entry to docs/OPENMONTAGE_WORK_LOG.md CID gate: 11 usable-pending-review clips (>=10), 6 primary docs (>=3) -> counts met but NEEDS_OWNER_REVIEW (flags unreviewed, NTRS unreachable). CID 1984 = slice/pilot candidate; X-15 + Shuttle/Edwards fallbacks. No code, installs, or lock changes. Media previews in gitignored projects/ (not committed; downloads blocked).
- Add tools/qa/qc.py QC module (stdlib + ffmpeg/ffprobe only, no network): ffprobe_streams, full_decode (-f null), blackdetect, freezedetect, silencedetect, ebur128 (ffmpeg 6.x summary parse), duration_vs_script, subtitle_sync, credits_complete, claim_ids, rights_basis, added_value. Fail-closed (tool missing -> BLOCKED); absent optional inputs -> NOT_RUN; verdict treats NOT_RUN as not-passed. - Add tests/tools/test_qc_tool.py (TDD, 11 tests, ffmpeg lavfi fixtures in tmp dirs, no committed media): all pass. - Add config/qc_thresholds.json with INITIAL GUESSES from QA_SPEC.md. - Output qa_report.json per QA_SPEC schema (job_id, check_id, status, evidence, measured_value, threshold, tool_version, timestamp). No secrets. - Smoke test on pilot MP4: verdict FAILED (ebur128 I=-17.1 LUFS outside -14+/-2, TP=-0.0 > -1.5). Internal tool test only, not publishability. - Wire .kilo/agents/qa-reviewer.md + AGENTS.md roster row. - Append dated Q1 entry to docs/OPENMONTAGE_WORK_LOG.md. No new dependencies, no network, no process/lock changes. ruff unavailable (used py_compile).
- Diagnosed archive.org download: works with curl -L (HTTP 302 redirects); earlier C4 '0 bytes/HTML' was missing -L, not access restriction/blocking - Real metadata file lists obtained for NIX-EM-0004-01, NIX-EM-0004-02, NIX-LV-1998-00090, NIX-LV-1998-00091 (10/10 network requests used) - Downloaded preview derivatives to gitignored projects/c5_review (~2.6MB, under cap, never committed); built ffmpeg contact sheets for 2 clips - Printed + wrote numbered owner list of 11 archive.org item URLs to REVIEW_QUEUE.md - Added NASA Facts FS-2009-02-003-CID to EVIDENCE_CID_PRIMARY_DOCS.md (primary docs now 7) - Sequential-ID analysis: NIX-LV-1998-00090…00098 = 9 of 10 implied parts, multi-camera angles of same impact, likely temporal overlap - Append dated C5 entry to work log Docs only; no code, installs, or lock changes. Media in gitignored projects/ not committed.
…decision summary - Built ffmpeg contact sheets (~12 frames) for all 11 CID clips in gitignored projects/c5_review/ (~13 MB, under 200 MB cap, never committed) - Per-clip ffprobe table: all 320x240; NIX-EM-* no audio (2 clips), NIX-LV-* audio (9 clips); total ~286s - Coverage map: 4 distinct narrative beats covered (remote piloting, impact, fire, other); 3 beats zero (preparation, flight, aftermath); proposed (not applied) beat-based viability gate wording - Voice decision summary from TOOLING_DECISIONS.md D1: Piper voice license UNKNOWN (blocks commercial publication until resolved); Kokoro UNKNOWN (not installed) - Updated owner list durations to ffprobe-measured values - Append dated C6 entry to work log Docs only; no code, installs, or lock changes. Media in gitignored projects/ not committed.
…C tool - Add tools/audio/finish_audio.py: two-pass loudnorm (measure then apply with measured values) + alimiter true-peak safety + optional sidechaincompress ducking. Targets I=-14, TP=-1.5, LRA=11 from config/qc_thresholds.json (INITIAL GUESSES). Fail-closed (BLOCKED on unparsable measurement); outputs pcm_s16le wav (f32le->aac and s16->aac-after-limiter broken in this build). - Add tests/tools/test_finish_audio.py (TDD, 5 tests, ffmpeg lavfi fixtures in tmp dirs, no committed media): voice loudness+true-peak, music ducking, no-music, mono/stereo+22050/44100 Hz, failure-path BLOCKED. All 5 pass. - Add docs/openmontage/AUDIO_FINISHING.md: what the tool does, proposed integration point (EDITING_DOCTRINE step 5 audio normalize/music bed, not wired yet), voice license blocker from TOOLING_DECISIONS.md. - Smoke test on pilot MP4 audio into /tmp (original untouched): BEFORE I=-17.2 LUFS/TP=-0.0 dBFS (clipping); AFTER I=-15.3 LUFS/TP=-4.5 dBFS; QC ebur128 PASS + full_decode PASS. Internal test only, not publishability. - Append dated D2 entry to docs/OPENMONTAGE_WORK_LOG.md. No new deps, no network, no model downloads, no process/lock changes. py_compile OK; ruff unavailable (py_compile used).
…dence, install, CPU test - Add docs/openmontage/VOICE_DECISION.md: Kokoro selected (Apache-2.0 weights); license evidence table (kokoro/misaki Apache-2.0, Kokoro-82M Apache-2.0, Piper lessac UNKNOWN, Lessac Blizzard 2013 dataset URL); training-data caveats (CC BY Koniwa/SIWIS, synthetic origin UNKNOWN); owner sign-off required; Piper lessac blocked; voice license gate status - Add docs/openmontage/KOKORO_TTS_PROPOSAL.md: KokoroTTSTool at tools/audio/kokoro_tts.py, integration point = EDITING_DOCTRINE step 5 audio, no pipeline changes in V - Update docs/openmontage/TOOLING_DECISIONS.md: §12.2 voice-license table (Kokoro row, Piper voice blocked, note); §14 Milestone V summary - Append dated V entry to docs/OPENMONTAGE_WORK_LOG.md Verified: kokoro 0.2.2 installed (binary-only; spacy source build failed on Python 3.14), weights kokoro-v1_0.pth (~313 MB) to /tmp/hf-cache (<=600 MB cap, gitignored, not committed), espeak-ng missing (warning only), 3 voices synthesized (RTF 1.58-1.75 CPU), QC ebur128 on each sample, finish_audio on af_heart (I=-15.0 LUFS/TP=-4.4 PASS), native aac mux works (FINISHED MP4 I=-15.0/TP=-4.3 PASS). No pipeline code, no lock/process changes, no paid routes/keys. Docs only committed.
- Add docs/openmontage/KAGGLE_BRIDGE_DESIGN.md: job protocol (job.json, kernel-metadata.json, run.py), single private runner kernel with serialized jobs, per-job wav + manifest.json (sha256, duration, library versions, license facts), push -> poll with backoff + total timeout -> output -> verify sha256/manifest -> run tools/qa/qc.py -> result JSON; fail-closed table; UNVERIFIED constraints (GPU 30 h/week, 12 h session, phone verification, internet toggle); secrets rule; disk rule. - Reachability: kaggle.com + api.kaggle.com reachable (HTTP/2 404 on root, service up); 4/6 network requests used. - CLI: kaggle 2.2.4 installed (1.3 MB); push supports --accelerator/-t but NOT --no-run; status/output/list take kernel URL suffix; status terminal strings UNVERIFIED. - Auth test STOPPED: KAGGLE_API_TOKEN not set (reported yes/no + length only, no token value handled). Owner must create Codespaces secret and restart. - Append dated K0 entry to docs/OPENMONTAGE_WORK_LOG.md. Docs only; no app code, no pipeline changes, no process/lock changes, no paid routes/keys, no token value printed/logged/committed.
- Add tools/kaggle_bridge/kaggle_bridge.py: KaggleBridgeTool(BaseTool) with build_job_folder, push, poll, fetch_output, verify, run_qc, run_job commands. build_job_folder generates kernel-metadata.json from Kernel metadata template written to: /workspaces/OpenMontage/kernel-metadata.json output (no guessed field names). push uses -t/--timeout and --accelerator (no --no-run). poll uses backoff + total timeout. verify recomputes sha256 vs manifest. Fail-closed; token never in args/result JSON. - Add tests/tools/test_kaggle_bridge.py (TDD, 16 tests, fake kaggle executable, stdlib only, no network): all pass. - Live smoke job on private kernel forts845/of-bridge-runner (CPU only, no GPU/internet): push OK (2.4s), status KernelWorkerStatus.COMPLETE, output hello.txt+manifest.json fetched, sha256 verified against manifest, verdict PASS. Result JSON at /tmp/k1_result.json (not committed). - Title must slugify to id suffix else 409 Conflict; enable_internet=false confirmed works on private CPU kernel. - Update docs/openmontage/KAGGLE_BRIDGE_DESIGN.md with observed facts (status strings, title/slug constraint, internet toggle) and work log. - No GPU, no datasets, no Kaggle Secrets, no third-party wrappers, no process/ lock changes. Token never printed/logged/committed/passed on command line. Docs + code + tests committed; media in /tmp not committed.
- Add docs/openmontage/VOICE_BAKEOFF_LICENSES.md: license evidence table for Chatterbox Turbo/base (MIT/MIT), Maya1 (Apache-2.0/Apache-2.0), Kokoro-82M (Apache-2.0/Apache-2.0); all three PASS the license gate (none excluded). Record training-data statements, watermarking (Chatterbox Perth), reference audio requirement (optional for Chatterbox; not required for Maya1/Kokoro), VRAM needs, commercial-use statements, and ASR checker licenses (faster-whisper MIT, openai-whisper MIT; Whisper weights not separately licensed in repo). - Add docs/openmontage/MASTER_RUN_STATE.md: phase tracking P1 DONE, P2-P7 PENDING; global rules recap. Docs only; no code, installs, network downloads, or process/lock changes. AGENTS.md (user modification) and pre-existing untracked files left uncommitted and preserved.
- Add docs/openmontage/evidence/CID_CLAIM_LEDGER.md: 16 claims (CID-01..CID-16) with sources, source-type tags, verification status (FS claims AGENT_VERIFIED_TEXT after fetching NASA Facts PDF; TM-only claims per stated provenance, TM-4084 not re-fetched) - Add docs/openmontage/slice/CID_SLICE_SCRIPT_v0.md: 8 sentences (S1-S8) with claim_ids, DRAFT/NOT_PUBLISHABLE; S5/S7/S8 flagged SINGLE_SOURCE; S8 BLOCKED until CID-13 second source - Add docs/openmontage/slice/CID_SLICE_CLAIM_IDS.json: 9 sentence-claim_id pairs - Run QC claim_ids check: PASS (9/9 sentences have claim_id, threshold 100%) - NASA Facts FS-2009-02-003-CID.pdf fetched (reachable) -> FS-derived claims AGENT_VERIFIED_TEXT - Update docs/openmontage/MASTER_RUN_STATE.md: P2 DONE Docs only; AGENTS.md (user modification) and pre-existing untracked files preserved.
- Add tools/audio/tts_kaggle.py (KokoroTTSTool): license gate blocks non-permissive engines (piper en_US-lessac-medium REFUSED), Kaggle bridge primary with local Kokoro CPU fallback when bridge BLOCKED, finish_audio + QC verify on finished wav, token never logged/passed - Add config/voice.json: engine config with license statuses; piper blocked - Add tests/tools/test_tts_kaggle.py (5 pass): license refuse, bridge blocked→fallback, bridge success route, kokoro license ok, missing inputs - Fix tools/audio/finish_audio.py: handle loudnorm 'input_i: -' (silent audio → -60.0) so float() doesn't fail - py_compile OK Docs/code only; AGENTS.md (user modification) and untracked skills/docs dirs preserved uncommitted.
- Add docs/openmontage/footage/SOURCE_REGISTRY.md: source registry for 19 sources with probe results (NASA/IA/Wikimedia/LoC/NARA/DVIDS keyless probes); rights/credit field exposure; MISSING adapters list (NASA SVS, DVIDS, Open Beelden, Europeana, Smithsonian, NPS, CDC, Vimeo CC, Videezy) - Verify all 16 existing stock_source adapters load via auto-discovery (12 available incl. nasa/archive_org/wikimedia; 4 key-required unavailable: pexels/pixabay_video/unsplash/videvo) - Update MASTER_RUN_STATE.md: P5 DONE Docs only; AGENTS.md (user modification) and untracked dirs preserved.
- Add docs/openmontage/GLOBAL_CHECK_2026-10-17.md: phase table (P1-P7), 32 tests passed, QC qa_report.json 12/12 PASS, ffprobe summary, repo hygiene, open gates (voice license, rights flags, single-source claims, insignia decision, monetization, Content ID) - Add docs/openmontage/OWNER_ACTIONS.md: numbered owner steps (voice license decision, clip rights review, single-source claims, insignia clearance, monetization, Kaggle GPU retry) - Update docs/openmontage/MASTER_RUN_STATE.md: P7 DONE MASTER RUN complete: P1 DONE, P2 DONE, P3 BLOCKED (Kaggle GPU quota), P4 DONE, P5 DONE, P6 DONE (QC 12/12 PASS), P7 DONE Docs only; AGENTS.md (user modification) and untracked dirs preserved.
- consistency-ab-test run.py: switch IP-Adapter to official diffusers API (load_ip_adapter + set_ip_adapter_scale + ip_adater_image=PIL.Image), drop manual ip_adapter_image_embeds construction; non-OOM render errors now fail the test - PROJECT_PLAN.md: record official IP-Adapter API failure on T4/diffusers 0.37.0 (mat1/mat2 1664 vs 1280 shape mismatch, zero usable adapter frames); lock fallback consistency method — baseline SDXL Base 1.0 + detailed text-prompt discipline (O8 variant «а»); add §4.8 first assembled pilot scene (§1, frame + Kokoro af_heart narration, Remotion MP4) and remaining work (9 sections, subtitles, transitions, EDL) - remotion-composer: new PilotScene1 composition (frame full-bleed + narration audio), registered in Root; renders 1920×1080 h264/aac 83s clip - add pilot-frame-1b Kaggle job (SDXL baseline frame for §1 beat S001)
…fallback; IP-Adapter not viable - EPISODE_IMAGE_PIPELINE.md: locked model changed from FLUX.2-klein-4B to SDXL Base 1.0; added section 10 'Консистентность персонажа — фиксированный метод для пилота' documenting baseline SDXL Base 1.0 + detailed fixed text-prompt per frame; IP-Adapter Plus/Plus Face tested on Kaggle T4 via official API (diffusers 0.37.0) — failed (embedding dim mismatch 1664 vs 1280, 0 usable frames); adapter deferred to post-pilot timebox, not a blocker - flux2-klein-test/test_protocol.json: full test protocol per official BFL recommendations (steps 4, guidance 1.0, 1024x1024 + 1792x1024, max 4 references, narrative line-art prompts, 4 tests, 6 consistency categories, line-art quality criteria, master reference re-passed every frame)
- tools/kaggle_bridge/jobs/pilot-render/: new Kaggle job generating one image per pilot section (§1–§10), SDXL Base 1.0, fixed text-prompt consistency, no IP-Adapter. All 10/10 rendered OK, peak VRAM 5196 MB, ~4.5 min T4 time. - docs/PROJECT_PLAN.md: added section 7.5 with all 10 section renders, known consistency risks, and klein 4B blocked note. - docs/openmontage/image_gen/EPISODE_IMAGE_PIPELINE.md: locked model set to SDXL Base 1.0, character consistency method documented (§10). - NOTE: klein 4B NOT used — blocked on diffusers 0.37.0 (missing components). SDXL Base 1.0 is the documented locked model per EPISODE_IMAGE_PIPELINE.md.
- tools/kaggle_bridge/jobs/pilot-render/audio/: 10 WAV files generated via Kokoro af_heart (24 kHz), total 1099.9s (18:20), one per pilot section §1–§10 - remotion-composer/src/PilotDraft.tsx: new composition — one generated image per section, full-bleed, synchronized with Kokoro audio, no transitions/effects (draft for owner review) - remotion-composer/src/Root.tsx: registered PilotDraft composition - docs/PROJECT_PLAN.md: added §7.6 (audio results), §7.7 (Remotion draft), §7.8 (remaining work for final version including open music track decision) - NOTE: video render not committed (too large, ~2.5h render time through Remotion) Output path: remotion-composer/out/pilot-draft.mp4 Music track: OPEN DECISION per HANDOFF document
- PROJECT_PLAN.md: Klein 4B не исключена; метод консистентности = нативный multi-reference Klein 4B; IP-Adapter не нужен; SDXL Base 1.0 = резерв; фаза 2 переведена на flux2-klein-4b; раздел 5.3 скорректирован (ошибка была в FluxPipeline, а не в Klein) - LICENSE_EVIDENCE.md: FLUX.2-klein-4B (Apache-2.0) — базовая модель пилота - RUN_STATE.md: этапы K0-K4 добавлены как PENDING; заметки обновлены - HOST_CHARACTER.md, VISUAL_STYLE_GUIDE.md: созданы пре‑requisites для K1 - pilot-render/images/ -> pilot-render/images_sdxl/ (SDXL-кадры сохранены, не удалены) - RESULTS.md: пути к кадрах обновлены на images_sdxl/
- run.py: signature Flux2KleinPipeline, bf16→float16 фолбэк, 8 кандидатов 1280x720, contact_sheet_master.jpg 2x4, логирование времени/VRAM/dtype - kernel-metadata.json, job.json: конфиг ядра для Kaggle T4 - WAITING_OWNER: владелец называет номер кандидата (1-8) для master.png
- Kaggle-ядро COMPLETE: forts845/k1-k2-host-candidates-flux-2-klein-4b - 8 кандидатов 1280x720, bfloat16, peak VRAM 11.15 ГБ, все OK - contact_sheet_master.jpg 2x4 с номерами (58.98 KB) - WAITING_OWNER: владелец называет номер кандидата (1-8) для master.png
rufustent-dotcom
approved these changes
Oct 27, 2026
- scripts/assemble_pilot_final.py: 10 клипов 1280x720 (zoompan 3-5%, чередующееся направление, вход увеличен 2x), xfade=fade 0.5с на стыках, субтитры srt встроены фильтром subtitles (крупный без засечек, нижняя треть), аудио concat без усиления - Музыка: assets/music/ пуст -> финал без музыки, отмечено в RUN_STATE.md - Выход: remotion-composer/out/pilot-final.mp4 (не в git, артефакт) - ffprobe: 1099.8s, h264 1280x720@30fps, aac 24kHz mono, 59 MB - Аудио пик ~-89 dB (без клиппинга), 3 кадра на стыках извлечены, субтитры встроены в видео - RUN_STATE.md: S12 добавлен как DONE, заметки обновлены
- shot_list.json: 78 бита по 12-18с на 10 разделов, id, start/end, текст, промпт Клейн, host_in_frame=false (в сценарии нет ведущего) - Оценка: ~90с/кадр, 78 кадров = 117 мин GPU (<2ч, но dziel на 3 ядра) - Ядро 1: разделы 1-4 (35 кадров), ядро 2: 5-7 (26), ядро 3: 8-10 (17) - Каждое ядро: signature Flux2KleinPipeline, bf16->float16 фолбэк, детекция NaN/чёрного кадра, логирование времени/VRAM/dtype
- K3: shot_list.json (78 битов 12-18с, 10 разделов), 3 Kaggle ядра (секции 1-4/5-7/8-10), все COMPLETE, bfloat16, peak VRAM 11.15 ГБ, 78 кадров OK без NaN/чёрных, frames_klein/sNN_BNNN.png - K4: 7 контактных листов 4x3 с номерами (кадры 1-78), каждый <2 МБ - K5/S12: финальная сборка v4 — 78 клипов Klein, жёсткая склейка concat, субтитры subtitles_bits.srt (324 блока, 2-5с, ≤42 симв./стр, шрифт 38px, нижняя треть, обводка 2px), аудио мастериング (acompressor+alimiter+loudnorm I=-16:TP=-1.5:LRA=7), ebur128: I=-25.6→-15.7 LUFS, TPK=-4.9→-1.5 dBFS, max_volume -0.7 dB - Выход: remotion-composer/out/pilot-final.mp4 (58.6 MB, 1099.8s, h264 1280×720@30fps, aac, субтитры встроены, без музыки, не в git) - RUN_STATE.md: K3, K4, K5 marked DONE, S12 updated
- K5 (competitor analysis) added to RUN_STATE.md as PENDING - K5a-K5e sub-steps marked BLOCKED - docs/openmontage/research/competitor_notes.md created with measurement method template - K5a: MCP YouTube not found, yt-dlp not installed — blocked pending owner choice - K5b: waiting for 3-5 competitor video links from owner - Ожидает владельца обновлено: K5b (ссылки на конкурентов)
- .kilo/kilo.jsonc: добавлен "plugin": ["@dietrichgebert/ponytail"] (официальный способ для Kilo/OpenCode)
- ~/.config/ponytail/config.json: {"defaultMode": "off"} — режим не активен по умолчанию
- docs/PROJECT_PLAN.md §11.4: документировано установка, версия, техническое поведение, область применения
- Область: только задачи редактирования кода, НЕ исследования/тестирование. Включается /ponytail full
- Сетевой доступ в рантайме не требуется, скриптов при установке не выполняется
…екстура на одежде) - HOST_CHARACTER.md: чиби-пропорции (голова 1:2 к телу, короткие конечности), глаза крупные круглые с бликом, одежда с лёгкой текстурой потёртости только на ткани, обновлён текстовый блок персонажа - VISUAL_STYLE_GUIDE.md: текстура только на одежде (не на коже/лице/фоне), чиби-пропорции, крупные круглые глаза с бликом, правило no gradients сохранено, текстурный фон запрещён - Старые правила (толстый чёрный контур, чистый фон, два тона шейдинга) без изменений
- Документы обновлены (чиби-пропорции, глаза с бликом, текстура на одежде) - Новый Kaggle-ядро k1k2-host-candidates-v2 с промптом, синхронизированным с VISUAL_STYLE_GUIDE.md - contact_sheet_master_v2.jpg не перезаписывает v1 - WAITING_OWNER: выбрать кандидата из v2 листа
- scripts/assemble_pilot_final.py: canonical сборка pilot-final.mp4 (78 кадров Klein + аудио + субтитры, без hardcoded /tmp путей) - scripts/audit_pilot_artifacts.py: инвентаризация артефактов перед сборкой (PASS: 78 кадров, 10 аудио, 324 субтитров, 7 контакт-листов) - scripts/package_youtube.py: пакет метаданных YouTube (5 заголовков, 19 тегов, 10 глав, статус draft) - tools/qa/qc_pilot_final.py: технический QC (ffprobe, full_decode, blackdetect, silencedetect, ebur128) - docs/PROJECT_PLAN.md: раздел 13 'Путь к автономной фабрике' с категориями A (агент сам), B (одно решение владельца), C (постоянное участие владельца, никогда не автоматизируется) - docs/RUN_STATE.md: этапы S13-S15 Ожидает решений владельца: B1 (номер мастер-референса ведущего), B1a (одобрение 78 кадров), B2 (файл музыки из YouTube Audio Library). Категория C (лицо ведущего, музыка, ссылки競еров, имя, голос, темп) — никогда не автоматизируется.
- HOST_CHARACTER.md: зафиксировано точное описание кандидата №6 (якорь-референс) как обязательное в каждом промпте - pilot-render/ref/master_v3_anchor.png: сохранён якорь-референс (candidate_06 из v2) - k3-v3-host-variations: Kaggle-ядро с image= параметром Flux2KleinPipeline (native multi-reference Klein identity), 6 вариаций поз (анфас, профиль, 3/4, крупный план лица), загружает якорь с GitHub raw URL - contact_sheet_master_v3.jpg — вариации ОДНОГО персонажа - WAITING_OWNER: показать результат; если консистентность плывёт — обсудить fallback на SVG-риг
- tools/qa/qc_pilot_final.py: исправлен ebur128 (-af вместо -vf), парсинг TPK regex (TPK: X dBFS, берётся максимум), loudness измеряется корректно - docs/RUN_STATE.md: этапы S16-S18 (верификация category A, assets/music/, статус Ponytail) - assets/music/README.md: курс для владельца — куда класть файл музыки (B2) Все скрипты категории A прогоны: assemble_pilot_final.py (--help OK), package_youtube.py (youtube_package.json сгенерирован), qc_pilot_final.py (все проверки работают), audit_pilot_artifacts.py (PASS). Ожидает решений владельца: B1 (номер мастер-референса, contact_sheet_master_v2.jpg), B1a (одобрение 78 кадров, 7 контакт-листов contact_sheets_klein/), B2 (файл музыки в assets/music/).
- Kaggle-ядро COMPLETE: forts845/k3-v3-host-variations-flux-2-klein-4b - Якорь: кандидат №6 из v2 (pilot-render/ref/master_v3_anchor.png) - 6 вариаций poses (анфас, профиль, 3/4, крупный план) — 6/6 OK - float16 + sequential_cpu_offload: peak VRAM 2.11 ГБ (было 11.15 ГБ) - ~30с на кадр, contact_sheet_master_v3.jpg 2x3 (50 KB) - WAITING_OWNER: показать результат v3; если консистентность плывёт — fallback на SVG-риг
…, категории A/B/C - scripts/run_factory.py: главный оркестратор фабрики (13 стадий с чекпоинтами, resume, fail-closed, zero-cost gate, категория A/B/C граница) - pipeline_defs/factory.yaml: манифест конвейера factory (13 стадий, явное human_approval_default только для release_gate) - docs/openmontage/FACTORY_ARCHITECTURE.md: архитектура фабрики (10 слоёв L1-L10, границы категории A/B/C, критерии готовности) Стадии 1-8 проходят успешно на пилоте (zero_cost_gate → speculative_gate). Стадия 9 (render) идёт — 78 кадров Klein через ffmpeg с zoompan (~10 мин). Стадии 10-13 ждут завершения рендера и решений владельца (B1, B1a, B2). Категория C (лицо, музыка, конкуренты, имя, голос, темп) не затрагивается.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Related issue
Closes #
Changes
Testing
Checklist
make test-contracts/make test) where applicable.