## Synfig 1.5.4 Release Notes ### Highlights * **Feature Enhancements**: Several new capabilities have been introduced, such as an angle converter that supports integers, hotkeys for locking/unlocking past and future keyframes, a new 'Alpha Intersection' blending mode, and enhanced palette clipboard functionality. Additionally, initial support for SVG Text elements and Lottie Text Layers has been added. * **Stability and Quality Improvements**: Numerous bug fixes address critical issues including rendering artifacts in outlines, undefined behavior during undo/redo operations after value conversion, crashes related to malformed PNG imports or null devices, and various UI/UX inconsistencies. Specific fixes include improved SVG importer behavior, corrected bline tool interactions, and resolution of font rendering issues. * **Performance and Code Refinements**: Significant refactoring efforts have been undertaken, including the porting of several layers (Bevel, Noise gradient, HalfTone2 & 3) to the more efficient Cobra rendering engine. Other improvements include optimizing code for image sequence import, enhancing parameter passing by reference, and general code style cleanups. ### What's Changed * fix: drag-n-drop import when filename contains non-latin chars by @rodolforg in https://github.com/synfig/synfig/pull/3412 * refactor: update macOS icons to higher resolutions by @pgilfernandez in https://github.com/synfig/synfig/pull/3224 * refactor: add move constructor to handle/loose_handle/rhandle by @rodolforg in https://github.com/synfig/synfig/pull/3417 * fix: change convert.exe syntax to avoid clash in Windows by @rodolforg in https://github.com/synfig/synfig/pull/3416 * fix: convert.exe directory and missing extension by @rodolforg in https://github.com/synfig/synfig/pull/3421 * fix: Lottie export failure with Japanese locale setting in Windows by @ice0 in https://github.com/synfig/synfig/pull/3419 * refactor: avoid macro in header file of ValueNode_Composite by @rodolforg in https://github.com/synfig/synfig/pull/3429 * fix: clang build (and bump macOS version) by @ice0 in https://github.com/synfig/synfig/pull/3438 * fix: Upgraded MLT version from '7.2.0' to '7.28.0' under MSYS2 environment by @shreyaspranav in https://github.com/synfig/synfig/pull/3437 * fix: uninitialized var and mixed declaration/definition of class by @rodolforg in https://github.com/synfig/synfig/pull/3435 * fix: color/gradient dialog edits the parameter that opened itself by @rodolforg in https://github.com/synfig/synfig/pull/3373 * feat: add "copy all" for Paste Options dialog by @rodolforg in https://github.com/synfig/synfig/pull/3422 * chore: fix various typos by @luzpaz in https://github.com/synfig/synfig/pull/3443 * refactor: rename setup and help-about actions - preparing to macOS by @rodolforg in https://github.com/synfig/synfig/pull/3195 * fix: proper reset of bonesetup size in WorkArea by @rodolforg in https://github.com/synfig/synfig/pull/3380 * refactor: Filesystem::remove_recursive() uses Path by @rodolforg in https://github.com/synfig/synfig/pull/3364 * feat(SVG): naive support to Text element by @rodolforg in https://github.com/synfig/synfig/pull/3320 * fix: handle (Radial)Composite valuenodes via Widget_Curves by @rodolforg in https://github.com/synfig/synfig/pull/3428 * refactor: simpler gradient render task declarations by @rodolforg in https://github.com/synfig/synfig/pull/3301 * refactor: add move constructor and move assignment operator to ValueDesc by @rodolforg in https://github.com/synfig/synfig/pull/3150 * ci: Resolve error when build dir cannot be removed after previous (failed) run by @morevnaproject in https://github.com/synfig/synfig/pull/3450 * ci: Add workflow to automatically generate release notes for GitHub releases by @akayiz in https://github.com/synfig/synfig/pull/3392 * ci: Add automatically showing contributors how their pull requests affect the release notes by @akayiz in https://github.com/synfig/synfig/pull/3393 * fix(ci): show-pr-change-note not working with prs from forks by @akayiz in https://github.com/synfig/synfig/pull/3453 * refactor: minor cleanup on Plant layer by @rodolforg in https://github.com/synfig/synfig/pull/3452 * fix: regression: couldn't edit color or gradient of multiple layers by @rodolforg in https://github.com/synfig/synfig/pull/3470 * chore: update .gitignore to exclude build files by @veermetri05 in https://github.com/synfig/synfig/pull/3466 * fix: julia Set used to ignore Bailout parameter by @rodolforg in https://github.com/synfig/synfig/pull/3465 * fix: make `FileSystem::write_block()` return the number of bytes actually written by @rodolforg in https://github.com/synfig/synfig/pull/3478 * fix: resolve issue with toolbar space remaining visible after hiding by @rodolforg in https://github.com/synfig/synfig/pull/3459 * fix: prevent potential null pointer dereference in ValueDescDisconnect action by @rodolforg in https://github.com/synfig/synfig/pull/3458 * refactor: cleanup Layer::get_sub_renddesc*() methods by @rodolforg in https://github.com/synfig/synfig/pull/3455 * fix(mod_ffmpeg): resolve missing audio export and incorrect error message display by @rodolforg in https://github.com/synfig/synfig/pull/3483 * build(MSYS2): add missing libraries to archive by @ice0 in https://github.com/synfig/synfig/pull/3491 * refactor: minor changes on Freetype layer by @rodolforg in https://github.com/synfig/synfig/pull/3489 * refactor: remove unused CanvasInterface::auto_export() method by @rodolforg in https://github.com/synfig/synfig/pull/3492 * fix: crash when trying to link to polygon instead of spline by @rodolforg in https://github.com/synfig/synfig/pull/3482 * fix: crash with positive sound delay for MLT >= 7.20 by @rodolforg in https://github.com/synfig/synfig/pull/3495 * fix: possible double free due to multithreading with Contour by @rodolforg in https://github.com/synfig/synfig/pull/3496 * fix: importing image sequence failed when there was no duplicates by @rodolforg in https://github.com/synfig/synfig/pull/3499 * refactor(Action): avoid direct use of etl::handle by @rodolforg in https://github.com/synfig/synfig/pull/3497 * fix: prevent crash due to null pointer dereference in `Action::LayerEncapsulateSwitch` by @rodolforg in https://github.com/synfig/synfig/pull/3501 * ci(Github Actions): bump Ubuntu version by @ice0 in https://github.com/synfig/synfig/pull/3505 * fix: some Coverity Scan reports by @rodolforg in https://github.com/synfig/synfig/pull/3507 * fix(lottie): Prevent SameFileError when exporting assets already in the images directory by @Stargazer10101 in https://github.com/synfig/synfig/pull/3506 * refactor: reduce visibility of internal variable members of Layer_Bitmap by @rodolforg in https://github.com/synfig/synfig/pull/3504 * build(ETL): cleanup dismissed ETL dependencies by @rodolforg in https://github.com/synfig/synfig/pull/3523 * fix: History panel didn't show sub-actions anymore by @rodolforg in https://github.com/synfig/synfig/pull/3522 * feat(dialog): add Enter key support to accept user choice by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3520 * refactor: make code for importing image sequence more readable by @rodolforg in https://github.com/synfig/synfig/pull/3503 * fix(lottie): add missing import for Advanced Outline by @WhatDidIDoWrong in https://github.com/synfig/synfig/pull/3508 * refactor: port more layers to Cobra renderer: HalfTone2 & 3 by @rodolforg in https://github.com/synfig/synfig/pull/3300 * fix(ui): refresh Parameters panel after undo/redo by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3525 * fix: FileSystem::remove_recursive() removes the directory itself too by @rodolforg in https://github.com/synfig/synfig/pull/3529 * fix: couldn't create converter to spline tangent or spline width (regression) by @Stargazer10101 in https://github.com/synfig/synfig/pull/3534 * fix(audio): add length check for MLT track loading by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3512 * fix(ui): rectify wayland window icon by @Integral-Tech in https://github.com/synfig/synfig/pull/3561 * fix: modifying waypoints for a group layer no longer modifies sibling layers by @mosasauridae in https://github.com/synfig/synfig/pull/3312 * fix: fix shift in gradient layers by @rodolforg in https://github.com/synfig/synfig/pull/3567 * fix: bump HalfTone2 and HalfTone3 layer versions after porting to Cobra by @rodolforg in https://github.com/synfig/synfig/pull/3566 * fix: Fix bug displaying "Unable to resolve " on project load by @shreyaspranav in https://github.com/synfig/synfig/pull/3540 * refactor: port XORPattern layer to Cobra renderer by @rodolforg in https://github.com/synfig/synfig/pull/3485 * feat: added support for setting playback interval through movable buttons by @mohamedAdhamc in https://github.com/synfig/synfig/pull/2765 * fix(GUI): add missing icon for type transformation by @Svarov-RZM in https://github.com/synfig/synfig/pull/3578 * chore: bump year to 2025 by @BobSynfig in https://github.com/synfig/synfig/pull/3581 * feat: "Angle" converter for real -> angle conversions by @Stargazer10101 in https://github.com/synfig/synfig/pull/3560 * refactor: remove commented-out code in HalfTone3 layer by @rodolforg in https://github.com/synfig/synfig/pull/3565 * chore: fix internal error message for TaskFilterPixelSW by @rodolforg in https://github.com/synfig/synfig/pull/3569 * fix: prevent crash due to null devices in DeviceManager from libgtkmm by @rodolforg in https://github.com/synfig/synfig/pull/3576 * refactor: rename pre_run() parameters of TaskPaintPixelSW and TaskFilterPixelSW and fix code style by @rodolforg in https://github.com/synfig/synfig/pull/3568 * fix: missing template argument : compiler in FreeBSD complained by @rodolforg in https://github.com/synfig/synfig/pull/3559 * feat(lottie): add support for Text Layer by @saurabh-ramola in https://github.com/synfig/synfig/pull/1469 * fix: avoid buffer overflow in Widget_SoundWave by @rodolforg in https://github.com/synfig/synfig/pull/3564 * refactor: make `debug` variable `const` in ValueNode_Bone by @rodolforg in https://github.com/synfig/synfig/pull/3586 * fix(lottie): allow to export SolidColor layer from old sif files by @rodolforg in https://github.com/synfig/synfig/pull/3583 * refactor: remove the optional "group" property of layer parameters by @rodolforg in https://github.com/synfig/synfig/pull/3587 * fix: new ValueNode_Angle couldn't be loaded because of tag name clash by @rodolforg in https://github.com/synfig/synfig/pull/3589 * fix(advanced outline layer): the outline on the last vertex of spline by @rodolforg in https://github.com/synfig/synfig/pull/3596 * fix(GUI): add missing icons for various bone types by @Svarov-RZM in https://github.com/synfig/synfig/pull/3599 * fix(bline tool): couldn't create the spline right after user drags the first vertex by @rodolforg in https://github.com/synfig/synfig/pull/3595 * fix(text tool): some fonts render corrupted text by @mosasauridae in https://github.com/synfig/synfig/pull/3611 * fix: border computation for raster image with Transformation task by @rodolforg in https://github.com/synfig/synfig/pull/3603 * feat: add new Map Range valuenode by @rodolforg in https://github.com/synfig/synfig/pull/3597 * fix(advanced outline): fix rendering of width point in non-homogeneous position by @rodolforg in https://github.com/synfig/synfig/pull/3555 * fix(bline tool): ignores double-clicking if without any created point by @rodolforg in https://github.com/synfig/synfig/pull/3594 * fix: SVG importer kept two vertices on closing (Z) a SVG path by @rodolforg in https://github.com/synfig/synfig/pull/3558 * chore: bump synfig versions for issue template & appveyor files by @rodolforg in https://github.com/synfig/synfig/pull/3625 * fix(SVG importer): tangents were merged if curve exists after straight line by @rodolforg in https://github.com/synfig/synfig/pull/3624 * refactor: port layer to Cobra renderer: Noise gradient by @rodolforg in https://github.com/synfig/synfig/pull/3306 * perf(Shade layer): do not insert blur task if none specified by @Svarov-RZM in https://github.com/synfig/synfig/pull/3635 * feat: palette clipboard functionality by @Kemosalamy in https://github.com/synfig/synfig/pull/2597 * feat(blend method): new blending mode: Alpha Intersection by @rodolforg in https://github.com/synfig/synfig/pull/2304 * refactor: prefer passing by reference instead of copy by @rodolforg in https://github.com/synfig/synfig/pull/3637 * fix: prevent negative bline/brush width in rectangle state and constrain the range by @mohamedAdhamc in https://github.com/synfig/synfig/pull/3640 * fix(mod_png): prevent crash when importing malformed png files by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3643 * refactor: port layer to Cobra renderer: Curve Gradient by @rodolforg in https://github.com/synfig/synfig/pull/3307 * refactor: port Bevel layer to Cobra engine by @rodolforg in https://github.com/synfig/synfig/pull/3457 * fix(advanced_outline): incorrect width rendering on open outlines by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3646 * feat: added a way to easily access the rendered file by @rodolforg in https://github.com/synfig/synfig/pull/3642 * ci(Github Actions): bump macOS version (13 Ventura -> 14 Sonoma) by @rodolforg in https://github.com/synfig/synfig/pull/3651 * ci(Github Actions): bump macOS version (14 Sonoma -> 26 Tahoe) by @ice0 in https://github.com/synfig/synfig/pull/3652 * fix: undefined behavior when user convert a value, change it, undo tw… by @rodolforg in https://github.com/synfig/synfig/pull/3570 * feat: add hotkeys for locking/unlocking past & future keyframes (Fixes #3638) by @omda777 in https://github.com/synfig/synfig/pull/3648 * feat: angle converter can now be used for integers by @rodolforg in https://github.com/synfig/synfig/pull/3650 * fix(rendering): remove artifacts in rendering outlines by increasing sampling resolution by @Abdelhadi-Wael in https://github.com/synfig/synfig/pull/3649 * chore: Bump year to 2026 by @BobSynfig in https://github.com/synfig/synfig/pull/3669 * chore: Update CLI help (seconds to synfig time) by @BobSynfig in https://github.com/synfig/synfig/pull/3670 * chore: Release version 1.5.4 by @Zloi-KoteikA in https://github.com/synfig/synfig/pull/3672