DamilolaDami / DamilolaDami/EditOS

Keyframe animation for clip transform (position, scale, rotation, opacity)

Open
#2 0 comments 0 reactions 0 assignees View on GitHub
enhancement help wanted
Dominant language
Swift
Stars
2
Forks
0
PR merge metrics
No merged PRs in 30d

Description

## Why this matters

Every clip currently has a single static `transform` (`scale`, `rotation`, `opacity`, position). To do CapCut-style motion — a logo zooming in, a sticker drifting across the canvas, a Ken Burns pan on a still — we need keyframe animation.

## Scope

- Add a `[Keyframe]` collection to `Clip` (or to each animatable property). A keyframe is `(time: TimeInterval, value: Double, easing: Easing)`.
- Animatable properties (V1): position X, position Y, scale, rotation, opacity. Stickers and text clips first, then video.
- Inspector UI: an inline timeline strip per property showing keyframe diamonds; click on the property's row to drop a keyframe at the playhead; drag a diamond to retime; right-click to delete or change easing.
- Evaluation happens in the composition pipeline (preview + export). Interpolate using the selected easing curve (linear, ease-in/out, cubic).

### Acceptance criteria

- Drag the playhead, change opacity → a keyframe is auto-created at that time.
- Scrubbing back/forward animates the value smoothly between keyframes.
- Export bakes the animation into the rendered MP4.
- Removing all keyframes restores the static-value behaviour.

## Pointers

- `EditOS/Core/Models/Clip.swift` — model
- `EditOS/Features/Editor/Inspector/InspectorPanel.swift` — UI
- `EditOS/Core/Engine/CompositionBuilder.swift` — overlay/sticker rendering (see `renderStickerOverlay`, `OverlayInstance`)

## Difficulty

🔴 Advanced — significant model + UI + pipeline work. Worth breaking into sub-PRs by property type.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading EditOS/Core/Models/Clip.swift, then trace the inspector flow in EditOS/Features/Editor/Inspector/InspectorPanel.swift and rendering in EditOS/Core/Engine/CompositionBuilder.swift, including renderStickerOverlay and OverlayInstance. Break the work into property-focused sub-PRs. Done means keyframes can be created, retimed, deleted, eased, previewed, exported to MP4, and removed to restore static values.

Written by the indexing model from the issue text.

Assessment

Tech stack
swift
Domain
computer-graphics
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.