Skip to content

release: v1.1.2 - #218

Merged
SteliyanH merged 2 commits into
mainfrom
release/v1.1.2-main
Nov 14, 2026
Merged

SteliyanH merged 2 commits into
mainfrom
release/v1.1.2-main

Conversation

@SteliyanH

Copy link
Copy Markdown
Owner

Portrait and rotated videos now export upright. Update if your app imports clips recorded on an iPhone.

Fixed

  • Portrait and rotated videos export upright.

    • What was wrong: a camera stores a portrait recording as landscape pixels plus a rotation tag (the track's preferredTransform), and the front camera may add a mirror. kadr never read that tag, so every portrait iPhone clip exported and previewed sideways, stretched to fill the frame.
    • What changed: each clip is now turned upright before it is scaled to fill. This applies to plain chains, transitions (slide included), Tracks and free-floating clips, clips with transforms or keyframes, filters and compositors, reversed clips, and the preview player and thumbnails.
    • Mixed orientations: clips with different orientations can share one video, and each keeps its own.
  • A plain clip no longer inherits the previous clip's transform. On the keyframe path, a clip with no transform that followed a transformed clip on the same track kept that transform. It now returns to its own layout.

Behaviour note

When every source is stored upright, nothing changes.

For a rotated source, kadr now builds a video composition so the rotation can be applied. If the preset can't encode it, the export throws KadrError.exportFailed instead of writing a passthrough copy, which would have been sideways. This is the same rule 1.1.1 introduced for transitions and crop.

Known gaps

  • A custom MultiInputCompositor still receives source frames as stored, unrotated.
  • VideoClip.metadata.resolution reports the stored size, not the displayed size.

Both are tracked for a later release.

Full changelog: v1.1.1...v1.1.2

A camera stores a portrait recording as landscape pixels plus a
preferredTransform, and the front camera may add a mirror. A layer
instruction's transform replaces that tag, and kadr never applied it, so
every portrait iPhone clip exported and previewed sideways.

The orientation of every source is now read from the composition's own
segments once the clips are placed, and each clip is turned upright before
it is scaled to fill. That covers plain chains, transitions (slide included),
Tracks and free-floating clips, clip transforms and keyframes, and the
preview player. Clips with different orientations on one track each keep
their own. ReverseProcessor now copies the source's transform to the
reversed file instead of dropping it.

Transforms on a layer are collected and emitted once in time order, so the
base layout and per-clip keyframes can't overwrite each other by call
order. That also fixes a plain clip inheriting the previous clip's
transform on the keyframe path.
@SteliyanH
SteliyanH merged commit 22b195f into main Nov 14, 2026
2 checks passed
@SteliyanH
SteliyanH deleted the release/v1.1.2-main branch November 14, 2026 04:12
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 14, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant