Skip to content

feat: add timeline-driven video rendering with ffmpeg export#3

Merged
AsPulse merged 7 commits into
mainfrom
feat/timeline-and-video-export
May 23, 2026
Merged

feat: add timeline-driven video rendering with ffmpeg export#3
AsPulse merged 7 commits into
mainfrom
feat/timeline-and-video-export

Conversation

@AsPulse
Copy link
Copy Markdown
Member

@AsPulse AsPulse commented May 23, 2026

Time-driven scene composition that's rendered into a video via ffmpeg, plus the supporting type machinery for animation work.

  • tellur-core::time: Time trait abstracting over TimelineTime (received from the renderer) and LocalTime (produced by remaps). Default combinators include during (gate, type-preserving), during_ripple (gate + rebase), lerp (affine warp with extrapolation), fps (floor quantization), and cycle / bounce / phase (periodic and range decompositions). A TimeOptionExt mirrors them on Option<T> for chaining.
  • tellur-core::phase: Phase newtype enforcing [0.0, 1.0] at construction. Useful for easing, progress, and other normalized scalars.
  • tellur-core::interpolate: Interpolate trait with impls for f32, Vec2, and Anchor. Phase::interpolate(from, to) reads naturally in animation code.
  • tellur-core::timeline: Timeline trait (build(t, target) -> RasterImage) plus a timeline() closure helper.
  • tellur-core::geometry: AnchoredSize::snap_to(target_point) for absolute positions (Vec2-interpolation-friendly); snap_to_anchor(target_size, target_anchor) kept as the convenience for static layouts.
  • tellur-renderer::video: FfmpegEncoder that streams raw RGBA frames into an ffmpeg subprocess. Input side (size, fps) is fixed; codec / container / filters are caller-controlled raw args, so mp4/mov/ProRes/etc. are all reachable. Two-row indicatif progress bars (Render / Encode) show by default; -progress pipe:1 drives the Encode bar.
  • Example: timeline_to_mp4 — four BouncingDot instances stacked vertically, each fed the same t quantized to 60/30/24/16 fps, so the lower-fps stutter is directly visible against the smooth top track.

@AsPulse AsPulse merged commit 059279c into main May 23, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant