Opening a project of ninety 17 MP photos got Effector killed by the kernel's OOM killer: 4.6 GB of decoded RGB on a machine with 3.6 GB free, and no core dump to show for it. Bulk allocations are now sized first and refused with an OutOfMemoryError past three quarters of the free memory (MemAvailable, or less under a cgroup memory.max). loadImages sizes the batch from the file headers and refuses it before decoding anything, and holds the decodes in flight to what is left; renderChain and renderFrames refuse a canvas at 24 bytes a pixel, plus any picture a Path param loads. The interface keeps a refused batch's paths, so saving the project never drops them. Version 0.6.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
123 lines
4.7 KiB
Markdown
123 lines
4.7 KiB
Markdown
# Changelog
|
||
|
||
Every release of Effector, newest first. The version lives in one place, the
|
||
`project()` line of `CMakeLists.txt`, and each release is a `vX.Y.Z` tag on the
|
||
commit that made it. The interface shows this file under Changelog in its menu.
|
||
|
||
## [0.6.1] - 2026-09-26
|
||
|
||
### Fixed
|
||
- Opening a project whose images would not fit in memory no longer gets
|
||
Effector killed by the system. The images are measured before any is read,
|
||
and a batch that would not fit is refused with a message saying how much it
|
||
needs; the images stay in the project, so saving it keeps them.
|
||
- A canvas too large to render in the free memory is refused the same way,
|
||
in the interface and on the command line, instead of taking the machine's
|
||
memory down with it.
|
||
|
||
## [0.6.0] - 2026-09-26
|
||
|
||
### Added
|
||
- Video projects: switch Video on under Setup and give the clip a length and a
|
||
frame rate, or pick a preset that sets the canvas too: Instagram story,
|
||
Instagram reel, Instagram feed video, TikTok / YouTube Short, Square loop and
|
||
Full HD clip. The preview renders the clip and loops it, with play/pause and
|
||
a scale to look at any one frame.
|
||
- Save As… writes a video project as `.mp4`, `.mov`, `.mkv`, `.webm` or `.gif`
|
||
through `ffmpeg`, with a progress window that can cancel it.
|
||
- Channel split moves in a video: its channels sway, shake from frame to frame
|
||
and a tracking bar rolls down the picture, like an old tape on a tube. The
|
||
new Wobble, Jitter and Tracking bar settings show only in a video, and a
|
||
still renders exactly as before.
|
||
- `--duration`, `--fps` and `--video-preset` render a video from the command
|
||
line.
|
||
- A Vertical Full HD canvas format, 1080 × 1920.
|
||
|
||
## [0.5.3] - 2026-09-26
|
||
|
||
### Added
|
||
- Effector has its own icon, an E split into its colour channels, in the app
|
||
menu, the dock and About Effector; a one-colour version goes with it for
|
||
panels.
|
||
|
||
## [0.5.2] - 2026-09-26
|
||
|
||
### Changed
|
||
- Effector is free software under the GNU General Public License, version 3
|
||
or later; the `LICENSE` file holds the text, and About Effector says so.
|
||
|
||
## [0.5.1] - 2026-09-26
|
||
|
||
### Added
|
||
- An Arch Linux `PKGBUILD` in `packaging/arch`: `makepkg -si` there builds and
|
||
installs the tagged release with pacman.
|
||
- A desktop entry, so an installed Effector shows up in the app menu.
|
||
|
||
## [0.5.0] - 2026-09-26
|
||
|
||
### Added
|
||
- A version number: `effector --version` prints it, and About Effector in the
|
||
menu shows it.
|
||
- This changelog, readable from the interface under Changelog in the menu.
|
||
- Open Recent in the project menu, listing the projects opened or saved here.
|
||
- An optional shadow or glow under the image overlay, with an offset, size,
|
||
spread, colour and opacity.
|
||
- Reordering the chain by dragging a row.
|
||
|
||
### Fixed
|
||
- The params' scrollbar no longer covers the spin buttons.
|
||
|
||
## [0.4.0] - 2026-09-23
|
||
|
||
### Added
|
||
- Eight chaotic effects: slit shift, channel split, pixel sort, corruption,
|
||
shatter, warp, bit crush and feedback. None needs sources, so any of them can
|
||
lead a chain.
|
||
- The sidebar split into Chain and Setup tabs.
|
||
- A rotation for the text effect's placement.
|
||
- Text stages labelled in the chain list with their words.
|
||
|
||
### Changed
|
||
- The preview stays centred however long the status line gets.
|
||
- The status line stays short, with the full chain and setup in its tooltip.
|
||
- The chain/params split fits the chain's rows until it is dragged; a
|
||
double-click on the handle fits it again.
|
||
- The mouse wheel scrolls past spin buttons that do not have the focus.
|
||
|
||
## [0.3.0] - 2026-09-19
|
||
|
||
### Added
|
||
- Named styles: several text stages can share one font and colour, and editing
|
||
the style moves every stage that follows it.
|
||
- Switching a chain stage off without taking it apart, in the interface and
|
||
with `--disable NAME` on the command line.
|
||
|
||
### Changed
|
||
- The interface opens on an empty chain, and shows the sources only when the
|
||
chain uses them.
|
||
|
||
## [0.2.0] - 2026-09-18
|
||
|
||
### Added
|
||
- Effect chains: stages cascade, each handed the previous one's output, built in
|
||
the sidebar or with repeated `-e`.
|
||
- Blur, film grain, black and white, image overlay, text and tiles effects.
|
||
- Projects saved and opened as plain JSON.
|
||
- Standard web and print canvas formats (`--format`, `--dpi`).
|
||
- Effects declare whether they need source images, so a chain led by blur
|
||
renders with none loaded.
|
||
|
||
### Changed
|
||
- The chain comes first in the sidebar.
|
||
|
||
### Fixed
|
||
- The canvas size is checked before it is narrowed to an int.
|
||
- Projects are written and read in the C locale, and keep the seed whole.
|
||
|
||
## [0.1.0] - 2026-09-18
|
||
|
||
### Added
|
||
- The C++20 port of the Python prototype: a GTK 4 interface and a headless
|
||
command line over pluggable effects, starting with scanlines.
|
||
- Source images load in the background, with a progress window and Cancel.
|