Development - #354
Draft
IAnMove wants to merge 278 commits into
Draft
Conversation
AAC mix was a few milliseconds short of the integer-frame duration and failed export validation. Pad and trim the mixed audio to the video length before promoting the artifact.
Give explorer previews an owner/refcount pool with a bounded idle cache and abort of stale fetches so 20 open/close cycles stay stable without revoking buffers another view still holds.
Keep resolve/assert helpers below the eslint complexity 15 gate and narrow the receipt cast so tsc and the E2E webServer build succeed.
…20260911 feat(video3d): exportar e importar plantillas de escenario
…0911 feat(ui): Generación directa y Director en el área principal
…20260911 feat(settings): requisitos y explicación de cada modelo
…le-20260911 fix(picker): bound preview resources and cancel stale loads
…-20260911 ci: cache Python deps and shard tests without weakening CI required
…ames-20260911 fix(video-editor): exact frame accounting in concat exports
Merging #333 added frame-accounting tests that the committed shard manifest did not list. --group then exited 2, so every PR against development skipped Python A/B. Assign ungrouped suite files to python-a and record the Video Editor tests in python-b. --check-partition still fails on a stale manifest.
…260911 feat(generation): typed generation.video for Wizard and MCP
…20260911 fix(ci): include new pytest modules in shards
…ción Settings, Director y Generación directa se abrían solo por eventos de ventana registrados en DirectGenerationWorkspace. Ese panel ya no está montado en Story Lab, biblioteca ni Director, así que Ajustes no abría y las producciones de Story/Comics no revelaban Director. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
mergeKeptSlot solo buscaba slot.sourceUrl. Las pantallas standalone guardan el vídeo en screen.sourceUrl, así que Conservar mis objetos dejaba billboards y control rooms en blanco. Importar un plano solo con pantalla también infería includeAssets=false y recortaba el media. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
#339 added studio/video generation modules. --group assigns them to python-a, but test_ci_shards still requires an exact committed partition.
#339 added studio/video generation modules. --group assigns them to python-a, but test_ci_shards still requires an exact committed partition.
Export used Video3D media into a versioned zip, import with preflight and picker repair, and refuse templates, cinema runtimes, zip slip and oversized archives without touching the previous project on failure.
…tory CI cannot install python-multipart; accept the package as a raw zip body. Split preflight helpers so complexity stays under the ratchet, copy bytes before SHA-256 for TypeScript, and record the new scene-package reader.
Split URL/ref/preflight helpers and extract router handlers so no function stays at complexity 15+ and the service stays under 1200 lines.
…shes Export looked up packed hashes with (workspace, filename, url), but slots that only have sourceUrl were rewritten with an empty filename, so the GLB stayed pointed at the source workspace after a "successful" import. Also skip dest names whose .meta.json already belongs to another extension. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…0 lines The ratchet treats a new 1,253-line module as a hotspot. Move import, reassignment and unique-name helpers to scene_packages_import.py.
Read Activity as request → child jobs → attempts → artifacts. Group by existing intent/receipt IDs, keep selection stable across SSE/polling, and let Wizard receipts open the exact group without a second progress source.
Extract stream, panel, compact bar and execution cards so every function stays at eslint complexity 14 or lower. Refresh the architecture wire inventory for the ActivityFooter store import in tests.
Activity opened details via agentUiBus and mapped targets via executionCards. Both belong to Agent Mode; listen through uiBus and keep the tab map local so the slice-import contract stays empty.
Add a cue timeline for source-time viseme edits and interval reanalysis, and hash stored GLBs with a workspace SHA-256 so face profiles still save on HTTP LAN without crypto.subtle.
Extract track, tools and cue fields so no function exceeds complexity 14, and call reanalyze only after an explicit selection/handler guard.
CueTimeline reused the Listen aria-label and the GLB digest route was unhandled after boot. Give playback its own copy and stub /character-kits/speech/digest in the simulated API.
Cutout planning no longer treats consonants as silence or shuts short Whisper words for half their duration. Aligned-audio beats stay open during speech. Tijeral ships Spanish and English scripts, WAVs, and Video 2.5D shots (shots/ vs shots/en/).
A zero-length closed viseme shared a timestamp with the first spoken word. rebuild kept the later open frame, so evaluateSceneLayer held that viseme from t=0 (Nilo open for 6s, Berta for 17s). Rest closed now starts at t=0. Detect-from-audio no longer applies a dummy plan when every Whisper unit is empty. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
Backfill used a Studio selection as playback authority and also cleared video_stale. After an image rerun the selected take no longer matches the new start frame, but load, prompt edits, and review persist then let Rejoin assemble that outdated video. Keep the selection for playback and leave video_stale for callers that gate export. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…tale-selected' into codex/review-pr406-20260912 # Conflicts: # tests/test_director_review.py
Rejoin gated video_stale only on the non-H3 path. MiniMax H3 productions still assembled playable segments or a Studio selection after the start image changed, so the joined movie no longer matched the current frame. Raise the same stale-clip error before the H3 branch. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…3-stale-rejoin' into codex/review-pr406-20260912
Fix review persist dropping Approve after notes blur
fix(review): preserve recovered takes and stale-video guards
fix(cut-paper): lipsync Hocus de Tijeral con las voces Qwen
After Approve plus an image rerun the desk re-sends tag_clip:good with notes. Rejecting that no-op dropped the whole atomic batch. Allow an already-good tag to be restated while still blocking a new approval of a missing or stale take. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
fix(review): keep notes when restating a stale approval
…60913 feat(studio): contextual Series production and reusable phonetic character rigs
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.
Resumen ejecutivo
Qué cambia
Para qué sirve
Impacto para el usuario
Riesgo
Estado
Summary
Overview
Detailed changes
Backend
UI and Wizard
Data, provenance and compatibility
Files and ownership
Validation
Date (UTC):
Base SHA:
Head SHA:
Validation scope: focused / fast / CI-equivalent (
--full) / real smokepython scripts/verify_clean_repo.pypython -m compileall -q app/services app/launch.py scriptsFocused Python tests:
cd ui && npm run i18n:checkUI tests:
cd ui && npm run lint -- --max-warnings=0cd ui && npm run buildgit diff --checkE2E/smoke checks:
Code quality
main: pending CICI and review
Mutable CI/Cursor facts belong in this PR body. Updating them does not
require a new documentary commit. Stable behavior evidence belongs in docs.
Cursor/Bugbot — pick exactly one. A review of an older SHA does not cover a
new HEAD. Silence is not approval. If required QA is missing, use another
authorized agent or leave pending; do not assume a human code review will
substitute.
Coste de la tarea
Notes and limitations
Follow-up work
Checklist
marked as waiting for them.