
visual-anim-studio
Automated visual generation pipeline for GPTMarlon Reels
Created Sep 2026
This update introduces a more proactive asset intake system and clearer feedback when assets are missing. Instead of stalling silently, the pipeline now provides actionable resolution paths—such as capture, substitution, or reconfiguration—based on asset requirements. Matching heuristics were also refined to prevent false positives by enforcing whole-word matching and prioritizing precise metadata. 
The checkVideo script previously failed to find video files when invoked via pnpm --filter because it relied on the current working directory, which pointed to the package folder rather than the repository root. By utilizing INIT_CWD, the script now correctly resolves file paths relative to where the command was originally executed, improving developer ergonomics. 
We've implemented a new Hyperframes render route, establishing a path to eventually retire the Remotion-based rendering engine. This update includes fixes for critical bugs found during testing, specifically addressing Node.js spawn constraints with .cmd files and correcting JSON report parsing to accurately track layout samples. With 156 of 158 project files already mechanically compatible, this change sets the stage for a cleaner, more robust rendering pipeline. 
Introduced a new short-form mode optimized for 15-25s clips, ensuring structural integrity by strictly preserving the first and last beats while intelligently sampling intermediate content. Centralized critical timing constraints like 'readingFloorSeconds' and 'lineFitsDuration' into the core package to prevent logical drift across the director, planner, and authoring modules. These changes improve pacing and consistency, ensuring generated cuts remain watchable and punchy regardless of the source material length. 
We've implemented a new 'beat brief' director that shifts the creative workflow from selecting rigid templates to describing the desired outcome of a beat. By enforcing strict schemas and arithmetic reading floors, the system now provides actionable feedback when models struggle, reducing silent failures and improving output quality. This approach removes restrictive vocabulary lists, allowing for more creative and accurate visual compositions. 
We have deprecated the heavy 88k-LOC composition engine in favor of 'direct-beat', a concise set of 8KB prose instructions for managing animation composition. By focusing on explicit rules for reading speed, layout transitions, and ground-truth commitment, this change significantly improves composition quality and performance metrics while reducing maintenance surface area. 
This update introduces a manually authored HTML and GSAP version of 'beat 11' to overcome limitations in the automated ScenePlan-based compilation. The manual implementation significantly improves visual timing and layout logic, resolving rendering defects where content was previously truncated or poorly spaced. This experiment confirms the value of manual control for complex scene timing, highlighting issues like overlapping text and improper logo rendering in the automated approach. 
To support free-form authoring where compile-time layout data is unavailable, validation gates have been moved from analyzing the IR to analyzing decoded video frames. This update introduces robust metrics—including luminance-based emptiness checks and boundary contrast analysis—to detect rendering issues like blank panels or clipped content. These engine-neutral checks now successfully identify visual defects without false positives across the test corpus. 
We updated the AiScene composition to utilize the same phase-based model as our static blueprints, introducing ESTABLISH, ACTION, DEVELOPMENT, and PAYOFF stages. This move replaces the previous repetitive, timer-based animation loop with semantic, multi-moment developments that vary across different actors in the composition. Scenes now feel much more deliberate and less like repetitive vibrations, with duration-aware scheduling to ensure short beats aren't over-animated. 
This update refines the visual presentation and timing for card layouts and title reveals. I updated grid_card_assemble to correctly fill the designated stage area rather than floating thin content, ensuring better proportional scaling. I also extended the motion sequences in titlecard_reveal to remove dead air during longer beats, resulting in more consistent and intentional visual pacing. 
The stutter detector was incorrectly flagging gaps between words in kinetic type animations as hitches. By raising the neighbour threshold and tightening the criteria for identifying sharp dips against movement, we successfully eliminated these false positives while keeping the detector effective. This ensures that intentional design pauses are no longer flagged as performance issues. 
Following the removal of transitions, we observed instances of empty frames at the start of beats due to delayed element rendering and overly cautious pacing. This update adjusts how opacity, supports, and lead-in times are calculated to ensure elements are immediately visible upon hard cuts. By shifting entrance logic, we've successfully reduced the number of blank frames and improved the synchronization of our motion design. 
Identified and resolved a flawed timing guard that was incorrectly disabling late-stage blueprint animations (accent, development, and payoff) whenever an opening sequence finished early. By switching from a floating-point time comparison to a robust check on the scheduled moment count, we restored proper animation behavior across six key templates. This fix also cleared up stale anchor references in several fallback expressions, improving rendering consistency across all blueprint variants. 
This update moves from wipe-based scene transitions to instantaneous cuts at beats to resolve clipping issues and improves camera movement logic. I've implemented a MIN_CAMERA_INTENSITY threshold (0.35) to correctly identify and disable imperceptible micro-drifts that were previously masked as motion. These changes ensure transitions are clean and camera behavior is intentional, setting the stage for more focused dead-hold improvements. 
Introduced a high-precision, frame-by-frame motion analysis tool in frameByFrame.ts to replace the previous 0.2s interval sampling. By decoding every frame in a single ffmpeg pass, the analyzer now accurately detects jitter, stutter, jerk, and other motion artifacts that were previously obscured by the sampling approach. The tool's improved centroid tracking and adjusted cut-exclusion window significantly reduced false positives, providing a much clearer picture of video quality. 
Improved collision detection in sceneBounds by ensuring elements only trigger a collision if they overlap while both are on-screen. Previously, elements occupying the same slot sequentially (like caption swaps) were incorrectly flagged as overlapping. This fix prevents false positives during gate validation while maintaining strict checks for elements sharing both space and time. 
This update significantly improves how scenes occupy the available frame by narrowing margins and introducing an auto-fit layout pass. Analysis showed that scenes were using only ~25% of the frame on average, so we reduced padding across layouts and implemented fitLayoutToFrame to intelligently scale arrangements without altering their design proportions. These changes ensure elements are larger and better positioned relative to the screen, providing a much more efficient use of the canvas. 
Resolved an issue where UI components like 'InfoCard' were causing text truncation by ignoring container width limitations. I refactored the text-fitting contract test to be exhaustive—instead of a whitelist, it now scans all primitives for text-fitting compliance and enforces a ratchet mechanism for any remaining exceptions. This change ensures consistent text rendering across the UI, preventing future regressions where text would otherwise be clipped or compressed.
This update overhauls how beats are transitioned and validated to ensure visual consistency. We replaced problematic cross-fades with cleaner cut and wipe transitions and introduced an automated repair pipeline in directBeat that fixes pixel-overflow issues caused by GSAP camera overshooting. Furthermore, margin configurations were centralized into scene-spec, ensuring the renderer and validator remain in sync, while renderBeatBounds.ts now provides pixel-perfect validation for safe edges. 
This update fixes an issue where the camera damping mechanism relied only on static element bounds, causing content to clip or overflow during motion. We introduced a motion-aware bounding calculation using existing sampleMotion logic and implemented repairBounds.ts, a multi-step ladder that applies corrective nudges and shrinking to ensure elements remain within the frame without sacrificing visual impact. A report-only sweep confirmed the stability of the new constraints, effectively catching layout bugs while protecting hero elements. 