Note
FreeBSD aarch64 is dropped from this release. We had to cut releases, and we cannot build this target within the 5-hour CI limit for any of the Craft apps, so we are dropping it for now. This is a known blocker, flagged for a future fix in storytold/craft-common-actions#39. FreeBSD x86_64 and every other platform are included.
What's Changed
- Advanced 3D: Accepts Shadows Only draws just the shadow (#1691) by @HEOJUNFO in #1704
- Replace non-ASCII characters in EXR layer names so ProEXR export no longer panics (#1702) by @MarekSpodBiedry in #1709
- #1714: reopen each comp at its saved current time by @arnav-hiwarkar in #1721
- Paste path operators below the shapes they act on (#1681) by @MarekSpodBiedry in #1730
- Keep CC Simple Wire Removal between points A and B (#1724) by @MarekSpodBiedry in #1731
- Fix #1275: open the commands' file dialogs without blocking the frame on Linux by @gmrmad1 in #1752
- Resolve effects/ property paths in anim.applyPreset (#1746) by @MarekSpodBiedry in #1759
- feat(cli): render --progress reports frames on stderr when it is not a terminal by @ArchersIntel in #1778
- fix(shapes): update inner controls when Polystar type changes (#1685) by @nanox333 in #1785
- Let render --template --values fill a media replacement control with a file path (#1780) by @MarekSpodBiedry in #1787
- Format negative Audio Samples time as a signed timecode by @Silvertree2010 in #1790
- Refresh layered composition sources on import by @onlymoein in #1087
- Wave Warp: Top/Bottom edge pinning regression + GPU parity coverage by @vbasky in #1265
- Hide layer bounds while editing path points (#1220) by @RavoxX in #1269
- Shapes: Merge Paths no longer erases paint belonging to a group above it by @vbasky in #1271
- Ease Presets: apply incoming and outgoing easing to selected keyframes (#1329) by @tylerjenningsw in #1334
- Masks: Mask Expansion past a curve's radius grows a solid mask instead of a ring by @Ian-Chege in #1356
- Script sockets: per-socket locks, a write deadline, and close interrupts (#1248) by @DWAA1660 in #1362
- glTF import: validate accessor spans before allocating, with checked arithmetic by @DWAA1660 in #1375
- FBX import: budget the memory an import keeps, and share instanced meshes by @DWAA1660 in #1376
- Web: await IndexedDB transaction commits before acknowledging writes (#1242) by @tylerjenningsw in #1384
- Scripting: Stroke and Hue/Saturation parameters use After Effects' match-name numbers by @marcoarnulfo in #1406
- Guide layers: hidden in nested comps, and in the layer context menus, as in After Effects by @Themolx in #1413
- i18n: the layer and timeline context menus draw their items in the interface language by @marcoarnulfo in #1424
- Keyframes: a path pasted onto Position becomes a motion path by @marcoarnulfo in #1430
- i18n(ja): the Settings dialog in Japanese by @zitann2020 in #1448
- Typed values: with several layers selected, set only the edited component on each by @DWAA1660 in #1485
- UI fix: double-clicking an effect controls property should reveal it in the timeline by @caldiag in #1497
- EPS and PDF: huge arcs, long paths and loop passes count against the import's limits by @dotCooCoo in #1527
- Honor Fontconfig configuration search paths by @IanHollow in #1540
- Text: a variable font's named instances are styles of its family (#1563) by @switch87 in #1572
- Expressions: propertyGroup() and a group's propertyIndex (#1619) by @switch87 in #1620
- fix(viewer): drag a 3D layer along a gizmo axis (#1618) by @arnav-hiwarkar in #1627
- #1582, #1585: guard web serviceWorker against SecurityError in opaque contexts by @krinry in #1648
- Masks: the arrow keys nudge the selected points by @marcoarnulfo in #1649
- Convert a shape layer's parametric path to a bezier path by @Hamza0101 in #1652
- fix(engine): report the keys keys.delete removed, not the keys selected by @detth in #1659
- Lumetri: hue/saturation curves stay inside their box beside a close point by @marcoarnulfo in #1662
- Project: a new folder opens with its name ready to type by @marcoarnulfo in #1664
- Text: drag a Range Selector's Start and End in the Composition viewer (#1011) by @marcoarnulfo in #1672
- Viewer: unselected nulls keep their outline by @webdevtodayjason in #1679
- gpu: honour wgpu env overrides in headless/CLI (with_env, WGPU_ADAPTER_NAME, WGPU_POWER_PREF) by @MatejKozlovsky in #1688
- xtask bench --repeat N: median/p90 summary, compare by median by @MatejKozlovsky in #1689
- test(script): per-key methods in another comp leave both key selections alone (#1531) by @AyberkA0 in #1694
- fix(effects): starred effects survive a restart (#1692) by @AyberkA0 in #1695
- Resolve Microsoft font names to installed metric-compatible fonts by @Silvertree2010 in #1696
- Duplicate the selected text animator or selector instead of the whole text layer (#1665) by @MarekSpodBiedry in #1711
- Fall back to the page's thread when new Worker throws in a sandboxed iframe (#1586) by @MarekSpodBiedry in #1712
- Media: millisecond-rounded MP4 footage imports at its true frame rate (#1442) by @tylerjenningsw in #1753
- Fix/tga proxy import by @nanox333 in #1216
- SVG import: bound expansion by an element budget and skip reference cycles by @DWAA1660 in #1369
- Effects & Presets: drag animation presets onto a layer by @LloydNicholson in #1317
- Tests for #1778 and #1787 by @FredApps in #1802
- ci: configure Dependabot for Cargo and GitHub Actions by @dylanmtaylor in #1808
New Contributors
- @gmrmad1 made their first contribution in #1752
- @ArchersIntel made their first contribution in #1778
- @Silvertree2010 made their first contribution in #1790
- @RavoxX made their first contribution in #1269
- @Ian-Chege made their first contribution in #1356
- @caldiag made their first contribution in #1497
- @detth made their first contribution in #1659
Full Changelog: v0.11.1...v0.13.0