Repository navigation
Releases
Releases · molexxxx/molex-media-toolkit
v5.2.1
A clearer preset panel
Changed
- One block per preset. In the Batch inspector, the preset under the list is summed up in one place: the goal it serves, the standard it meets with its loudness and true peak, what it does, and the technical details folded at its foot. Levels the preset fixes are no longer repeated in the Loudness fields, which keep only what you can change.
- The Normalize list is grouped by goal: home, web, and media servers; music and podcasts; broadcast delivery; and older guidelines. The separate Choose by goal list and the links from one preset to another are gone from the inspector.
Fixed
- Emphasize dialog was offered for every source, though it only changes sources with more than two channels; on a stereo file it changed nothing but marked the preset edited. It now shows only for a surround source that does not use it yet.
- The Linux AppImage build now refuses a launcher that lacks the fallback for systems that restrict user namespaces, such as Ubuntu 24.04, so a build tool change cannot ship an AppImage that fails to start there.
Full changelog: v5.2.0...v5.2.1
v5.2.0
Updates that install themselves, and a Linux AppImage
Added
- Background updates. molexMedia checks for a new version a few seconds after launch, every 30 minutes, and when its window comes back after a while, and downloads it in the background. A notice then offers Restart to install: the update installs without the installer's windows and molexMedia opens again on the new version. Choose Later and it installs the next time you quit. A running batch holds the restart back until it finishes, and a ready update also raises a system notification while the window is out of sight. The switch is in Settings, Application.
- Linux AppImage.
molexMedia-<version>-x86_64.AppImageruns on most distributions without installing and updates itself like the Windows and macOS builds. It uses the static AppImage runtime, so it does not need libfuse2, and carries AppStream metadata and AppImageUpdate information. The .deb and .rpm packages are still published.
Full changelog: v5.1.1...v5.2.0
v5.1.1
Frame rates in the Editor
Fixed
- Trim on files that are not 30 fps. The In, Out, and Length readouts on a 24, 25, or 60 fps file showed the wrong time (a 60 fps file read twice its length), and dragging the in and out handles could export the wrong part of the file. Trim now counts and exports in the file's own frame rate, so it still steps one real frame at a time.
- Timeline clips from files that are not 30 fps. A 60 fps clip took twice its length on the timeline, previewed at half speed, and exported with a gap after it; 24 and 25 fps clips were shown too short and previewed too fast. Clips now keep their real length, and a range marked in Trim keeps its length when it is added to the timeline.
- MPEG Layer II (.mp2) sources are labeled MP2 instead of MP3 in the Batch queue.
- The Dashboard's Add files and Tools keys show their whole detail line instead of cutting it off.
Full changelog: v5.1.0...v5.1.1
v5.1.0
Live streams and picture subtitles in the Player
Added
- Live streams in the Player. Live links, and links that offer only HLS, play through one FFmpeg session that carries the sound and the picture on the stream's own clock. A live stream reads Live in place of its length, counts from when you joined, and cannot be moved; the playlist marks it Live. A recording seeks by opening a new session from that point, and one that stops before its end, after a dropped connection for example, picks up again just past where it stopped.
- Picture subtitles in the Player. PGS (Blu-ray), DVD, and DVB subtitles appear in the subtitle menu next to the text ones. FFmpeg draws the chosen one onto the picture, and a subtitle already on screen at the seek point shows straight away.
Fixed
- The Player's seek bar no longer breaks when switching between Video and a visualization on a live stream.
Full changelog: v5.0.0...v5.1.0
v5.0.0
UI 2.0 and the loudness pipeline rebuilt
UI 2.0 rebuilds every view of the app on one design system: ice blue on neutral graphite, the platform's own type, a quieter layout that puts the work first, and keyboard paths for every action. Behind the batch view, the audio pipeline is replaced by one measured against the standards it names. The two land together because the old batch flow could not express the new pipeline: presets had to be chosen before files were added, and a job carried no record of what it ran with.
The new interface
- Batch is one queue with Queue, Review, Run, and History tabs. Add files, then pick each job's operation and preset in the inspector beside the queue; every job keeps its own settings. Review shows what each job will write (output file, encoder, streams kept, the planned FFmpeg command) before anything runs. Run shows progress per job and per operation with time left and speed. History keeps each batch with its settings, the measured result of every job, and reports to export.
- Presets are named after the standards they meet (EBU R 128, ATSC A/85, Apple Podcasts, Spotify, and more) and explained at three depths: what each is best for, how it works, and the technical values. A goal finder answers common goals, such as quiet dialogue next to loud action.
- Dashboard is a front panel: what is waiting, running, and done, the machine's readiness (FFmpeg build, GPU, CPU, memory), keys that add files with each operation, and the latest jobs with their measured stamps.
- Settings has Batch, Presets, FFmpeg, and Application tabs: output and worker defaults, your presets, the FFmpeg build with its self-test, and app and yt-dlp updates.
- Logs is a searchable grid with levels in words, a source filter, follow new lines, and a details pane with the full FFmpeg command and output. Show log from any job jumps straight to its lines.
- First run is one screen that says what the app needs, downloads and verifies FFmpeg with live progress, or uses an FFmpeg already on the computer.
- Editor opens straight into Trim, Timeline, or Inspect. Trim has in and out readouts and an export panel like the batch inspector; Timeline keeps every edit, snap, and shortcut; Inspect reads the file's ffprobe report in plain words and measures its real keyframes.
- Player shows the video or a visualization, plays files Chromium cannot decode by repackaging or decoding them with FFmpeg on the GPU, offers audio track and subtitle choice, plays links with video through yt-dlp, goes truly full screen, pops out into a small window, and says in Media information exactly how a file is being played.
- Every list shares one row menu (More actions, right click, Shift+F10), menus and selects stay inside the window, scrollbars are thin and never shift the content, and F6 moves between the regions of each view.
Added
- A job engine in the main process. Jobs survive a restart, and every finished job carries what was measured in its output.
- A golden suite that runs every audio chain on real FFmpeg builds (2022-10-13, 5.1.2, 7.1.1, and 9.0.2) locally and in CI; releases are gated on it.
- yt-dlp kept current by the app from signed GitHub releases, with the checksum file's signature verified against yt-dlp's key, a swap deferred until no yt-dlp process of ours runs, and the old copy kept on failure.
- A surround metering self-test that refuses multichannel loudness jobs on a build whose meter misreads them, and a workflow that checks candidate FFmpeg builds on Apple Silicon.
Fixed
- Normalization was too loud and could distort. Loudness is now measured with
ebur128and the gain planned from it, with noloudnorm; the limiter runs withlevel=disabledandlatency=1, oversampled for a true-peak ceiling; timeline exports are limited at -1 dBTP; AAC exports use-aac_coder fast, since the default coder let an abrupt start decode above the ceiling. - FLAC was written into MP4, which the FFmpeg 5.1 muxer refuses; FLAC outputs now go to Matroska or a
.flacfile. - A mono source sent to two speakers got separate dither noise per channel, so left minus right was no longer silence; the chain now dithers in mono and duplicates last. Loudness range is reported only for a minute or more of material, as measurement already required.
- Apple Silicon builds of FFmpeg 8.0 through 9.0.2 read surround audio 16 to 33 LU too loud, which would have turned 5.1 films down by about 30 dB and called them verified. Apple Silicon is held at 7.1.1, which measures correctly, and every build is self-tested at startup.
- FFmpeg 7.1 aborted on the metering graphs with an internal assertion when a resampled branch ended in
anullsink; those branches are now mapped to the null output on every build. - Choosing Download in setup still used the FFmpeg found on PATH. The downloaded build is adopted, and a PATH build is offered rather than used unasked.
- Links stopped playing when a browser's cookies had been exported: yt-dlp then returned session-bound URLs that answer 403 to any player. Links resolve without cookies first and ask for them only on a sign-in error.
- Two-pass statistics failed from deep folders on Windows; they move to a short temporary folder past 240 characters.
- A file another program held open was reported as a drive without a recycle bin; the engine now checks the lock first and waits on it. The work-folder journal could also be written after a sweep had resolved.
Changed
- The palette is ice blue on neutral graphite, the type is the platform face with nothing bundled, and the app icon, tray icons, and logos are redrawn to match. The old batch UI and pipeline are removed.
- "Night listening" is now "Clear dialogue (movies and shows)", an app preset built on EBU R 128 s2 that compresses above the program loudness; home playback and media servers are sent to Streaming.
- The package carries only the built output and resources.
- Electron 44 (Chromium 152). Copied files paste in full on every platform through the file list Electron now reads natively; Windows no longer needs a PowerShell query that the old clipboard API forced.
Full changelog: v4.7.1...v5.0.0
v4.7.1
[4.7.1] - 2026-08-25
🐛 Bug Fixes
- compress: Budget target size across every audio stream (85f73db)
- editor: Chain atempo above 2x instead of using one stage (9240a5c)
- gpu: Set the B-frame quantiser for AMF and cover the encoder mappings (dd91887)
- compress: Use each encoder's real lossless switch (af1e443)
- ci: Drop automation commits from generated release notes (ff0f4a5)
📝 Documentation
- Correct the README and document the audited pipelines (14157dd)
v4.7.0
[4.7.0] - 2026-08-25
🐛 Bug Fixes
- audio: Oversample the limiter so the dBTP ceiling holds (242a4b0)
- extract: Scale frame count to the range and refuse bitmap subtitles (590e869)
- compress: Map every audio stream instead of letting ffmpeg pick one (060bc63)
- convert: Map streams explicitly and match subtitles to the container (a966ba6)
- ci: Give git-cliff an explicit range for release notes (5883c52)
📝 Documentation
- changelog: Document 4.7.0 and backfill 4.5.2 through 4.5.7 (0f84f8d)
🧪 Testing
- Cover container mapping, stream plans, and extraction timing (b36102d)
v4.6.0
[4.6.0] - 2026-08-25
🐛 Bug Fixes
- batch: Apply current panel settings to queued files (f7b4c7b)
- audio: Correct boost, loudness, and compressor filter chains (1851e47)
- compress: Isolate two-pass stats files per task (431f0c5)
- security: Replace extract-zip with hardened yauzl extractor (3e8e55f)
- security: Resolve CodeQL findings across app, workflows and website (0bb4d2e)
- ci: Build workflow manual-trigger only, remove push trigger (038d042)
- ci: Remove duplicate badge refresh from build workflow (ce65b88)
📝 Documentation
- changelog: Document the 4.6.0 audio pipeline audit (0ef6eca)
🧪 Testing
- audio: Cover filter chains, command lines, and settings resolution (0f52ff8)
📦 Dependencies
- deps: Bump framer-motion from 13.1.0 to 13.1.1 (#147) (4b7df45)
- deps: Bump vitest from 4.1.10 to 4.1.11 (#149) (edffd29)
- deps: Bump lucide-react from 1.31.0 to 1.33.0 (#150) (e18d927)
- deps: Bump react-dropzone from 20.1.0 to 20.1.1 (#148) (28a38b9)
- deps: Bump @vitest/coverage-v8 from 4.1.10 to 4.1.11 (#146) (1e54128)
- deps: Bump electron from 43.4.0 to 43.4.1 in the electron group (#145) (f3c08f7)
- deps: Bump @types/node from 26.1.2 to 26.2.0 (#144) (0436eeb)
- deps: Bump lucide-react from 1.30.0 to 1.31.0 (#143) (2610ab2)
- deps: Bump @testing-library/jest-dom from 7.0.0 to 7.0.1 (#142) (e147d8e)
- deps: Bump react-dropzone from 20.0.0 to 20.1.0 (#141) (7b6ee9c)
- deps: Bump zustand from 5.0.14 to 5.0.15 (#140) (d67b813)
- deps: Bump framer-motion from 13.0.0 to 13.1.0 (#139) (e962dba)
- deps: Bump electron from 43.3.0 to 43.4.0 in the electron group (#138) (0ac51fb)
- deps: Bump lucide-react from 1.28.0 to 1.30.0 (#135) (2cf9ce6)
- deps: Bump react-dropzone from 19.1.1 to 20.0.0 (#134) (8a0d137)
- deps: Bump youtube-dl-exec from 3.1.9 to 3.1.12 (#137) (7c779c8)
- deps: Bump framer-motion from 12.43.0 to 13.0.0 (#136) (9fc8564)
- deps: Bump postcss from 8.5.25 to 8.5.26 in the dev-tooling group (#133) (2564e08)
- deps: Bump electron from 43.2.0 to 43.3.0 in the electron group (#132) (8558a16)
- deps: Resolve audit advisories and fix dependabot auto-merge (e74291e)
- deps: Bump the react group across 1 directory with 2 updates (#126) (6182c16)
- deps: Bump tar from 7.5.20 to 7.5.22 (#123) (ed4b58a)
- deps: Bump lucide-react from 1.27.0 to 1.28.0 (#131) (8a20590)
- deps: Bump jsdom from 30.0.0 to 30.0.1 (#129) (d42c1e7)
- deps: Bump @types/node from 26.1.1 to 26.1.2 (#130) (5f28e2c)
- deps: Bump framer-motion from 12.42.2 to 12.43.0 (#128) (b25e59e)
- deps: Bump postcss from 8.5.23 to 8.5.25 in the dev-tooling group (#127) (6bc5964)
- deps: Bump jsdom from 29.1.1 to 30.0.0 (#124) (c5229e4)
- deps: Bump postcss in the dev-tooling group across 1 directory (#121) (667458d)
- deps: Bump @testing-library/jest-dom from 6.9.1 to 7.0.0 (#125) (463fe48)
- deps: Bump lucide-react from 1.25.0 to 1.27.0 (#122) (0f4cdfa)
- deps: Bump the react group with 2 updates (#120) (b4831f7)
- deps: Bump electron from 43.1.1 to 43.2.0 in the electron group (#119) (6b62756)
- deps: Bump react-dropzone from 17.0.0 to 19.1.1 (#116) (6703ebe)
- deps: Bump the dev-tooling group across 1 directory with 2 updates (#118) (82e936e)
- deps: Bump lucide-react from 1.24.0 to 1.25.0 (#117) (dbe7ccd)
- deps: Bump @tailwindcss/postcss from 4.3.2 to 4.3.3 (#115) (bb92586)
- deps: Bump electron from 43.1.0 to 43.1.1 in the electron group (#113) (3d7ff4c)
- deps: Bump zero-query from 1.3.0 to 1.3.1 (#111) (9a2137b)
- deps: Bump tar from 7.5.19 to 7.5.20 (#108) (52e45bc)
- deps: Bump lucide-react from 1.23.0 to 1.24.0 (#106) (9426676)
- deps: Bump @types/node from 26.1.0 to 26.1.1 (#110) (4d7c549)
- deps: Bump react-dropzone from 15.0.0 to 17.0.0 (#109) (d8e7b58)
- deps: Bump youtube-dl-exec from 3.1.7 to 3.1.9 (#107) (5131136)
- deps: Bump the dev-tooling group with 2 updates (#105) (57db146)
- deps: Bump electron from 43.0.0 to 43.1.0 in the electron group (#104) (9bc2516)
- deps: Bump @tailwindcss/postcss from 4.3.0 to 4.3.2 (#97) (452d5c2)
- deps: Bump lucide-react from 1.22.0 to 1.23.0 (#102) (53b0dc8)
-...
v4.5.7
[4.5.7] - 2026-06-03
🐛 Bug Fixes
- ci: Switch macOS installer from .pkg to .dmg (4107441)
- ci: Retry stapler to handle Apple ticket propagation delay (5d305f9)
- ci: Submit signed .pkg to notarytool in CI step, drop afterSign hook (6d4a328)
- ci: Disable built-in notarize to prevent blocking poll alongside afterSign hook (46fe97f)
- ci: Move afterSign to top-level in electron-builder config (1da2320)
- ci: Submit macOS notarization async, poll in dedicated job (2fc02fb)
- updater: Handle Linux deb/rpm with manual update status (06d0631)
- cross-platform: Arch-aware binaries and POSIX-safe file URLs (31040c1)
Build
- release: Ship clean per-platform installers only (2bfd9ed)