v7.42.0 released

Oct 3, 2026

You can download it from GitHub.

The highlights of this version are a new placebo GPU module based on libplacebo, a 32-bit float default audio sample format, and Adjustment Clips (fx_cut) that filter only the tracks below them.

Framework

  • Added a list-based dispatch for image-conversion callbacks on mlt_frame. Use mlt_frame_append_convert_image() to register a converter instead of setting frame->convert_image directly. Multiple converters are tried in registration order; the first that succeeds wins. New public API:
    • mlt_frame_prepend_convert_image()
    • mlt_frame_append_convert_image()
    • mlt_frame_convert_image()
    • mlt_frame_next_convert_image()
    • mlt_frame_has_convert_image()
    • mlt_frame_copy_convert_image()
  • API behavior change: mlt_frame_s::convert_image is now read-only after init and is permanently set to the dispatcher mlt_frame_convert_image(). A custom function written directly to this field is no longer called. If you really need that (I have never heard of anyone who does), clear the frame’s _convert_image_callbacks property and use mlt_frame_append_convert_image() instead.
  • fx_cut (Adjustment Clip) now applies its filters only to tracks below it. Higher tracks composite on top of the filtered result. New image-stack helpers are used by tractor stacking and by fx_cut:
    • mlt_frame_prepend_image_from_service()
    • mlt_frame_push_image_with_fx_cut()
  • Fixed a crash when applying a Movit (OpenGL) filter to an fx_cut (Adjustment Clip). Cross-producer image sharing (including the reverse fx_cut share) finalizes an in-progress Movit chain as rgba64 and does not copy producer-keyed _movit chain state. Same-producer prepends keep the GPU chain. Playlist fx_cut frames now set _producer so Movit can key the chain.
  • meta. and set. properties are now copied from the producer onto fx_cut frames so producer annotations reach tractor output. New public API:
    • mlt_producer_pass_frame_properties()
    • Mlt::Producer::pass_frame_properties()
  • Changed the default audio sample format to float32 (mlt_audio_f32le). Added mlt_audio_format_id() and an mlt_audio_format property on the multi consumer. Conversion between integer and float is lossless and symmetric (s16 and u8 round-trip exactly).
  • Deprecated the sox filter, which only supports 32-bit integer samples.
  • Deprecated the volume filter’s normalize parameter because it forces 16-bit integer audio. Use dynamic_loudness instead. The volume filter itself still supports float samples.
  • Per-track audio-level metadata is now propagated to output frames (meta.audio.*).
  • Improved mlt_property_is_anim() so strings that merely contain = (for example URLs) are not treated as animation.
  • mlt_properties_get_data() no longer returns a data pointer for rect properties.
  • Fixed a signed integer overflow in mlt_luma_map_from_pgm.
  • Fixed fx_cut in-point handling in mlt_transition.
  • Fixed Android mlt++ builds by disabling ELF symbol versioning.
  • Fixed a macOS crash in numeric property conversion caused by setlocale. Parsing and formatting no longer change the process LC_NUMERIC.

Modules

  • Image converters (movit.convert, avcolor_space, imageconvert) are now attached from data in loader.ini, using the image_convert key.
  • Movit rgba64 is now a valid input as well as an output: FlatInput is created with GL_UNSIGNED_SHORT and set_pixel_data() uses the 16-bit overload. Previously, rgba64 was uploaded as 8-bit, which distorted the image when an OpenGL filter ran on an fx_cut.
  • Added placebo GPU module (placebo.render, placebo.shader) using libplacebo for scaling, debanding, dithering, tonemapping, and mpv-style .hook shaders (D3D11 / Vulkan / OpenGL).
  • Fixed a deadlock in the decklink consumer when pausing, seeking, and resuming playback.
  • Added ducking to the mix transition (duck_threshold, duck_attenuation, duck_level, duck_fade_in, duck_fade_out, and an optional prefix that records the level on the frame as <prefix>duck_level).
  • Added #frame+1# keyword in dynamictext (1-based frame number).
  • Added more audio formats to the audiolevel filter.
  • Added FFmpeg 9 support in avformat.
  • Fixed 10-bit hevc_vaapi encoding.
  • The avformat consumer now logs when it finishes.
  • Fixed rnnoise so it works at sample rates other than 48 kHz by resampling.
  • frei0r.kaleid0sc0pe and frei0r.squigglevision now report internal threading.
  • Fixed frei0r.camerashake (and its blur) with preview scaling.
  • The OpenFX module now skips duplicate plugins.
  • USE_LV2 and USE_VST2 require USE_LADSPA. The LADSPA blacklist.txt is installed even without JACK, and LV2_PATH is expanded correctly on Windows.
  • Fixed affine and qtblend inside mask_apply.
  • Fixed the qtblend transition so it does not apply pixel-aspect normalization twice.
  • Fixed alpha scaling in the luma transition, including when a luma file is used, and documented the invert property.
  • Fixed shape filter alpha subtraction for rgba.
  • Fixed motion-tracker shapes clipping outside the frame.
  • Fixed colorspace and range of cached images in qimage and pixbuf.
  • Fixed crop when hardware decode and scale are combined with preview scaling.
  • Fixed the subtitle filter rendering one frame past its end time, and fixed the subtitle_feed end-frame calculation.
  • Fixed filename buffer overflows in gpsgraphic and gpstext.
  • Fixed the sdl2 consumer so it no longer freezes on Windows after a few seconds.
  • Fixed sdl2_audio so it no longer hangs in consumer_stop() when stopped while paused.
  • Added s32, float, s32le, f32le, and u8 to the noise producer, and s16, s32, s32le, f32le, and u8 to tone. Fixed tone integer conversion to match audioconvert.
  • Fixed a double-free in the xml producer when a filter, transition, link, or producer fails to load.
  • Fixed movit.convert leaking a Movit input on every frame when an effect chain is reused.
  • Fixed the heart-rate keyword in gpstext (#gps_hr#).
  • gpsgraphic no longer sets time_offset when a GPS file is first loaded.

Other

  • melt prints its progress when it finishes and exits with a non-zero status when interrupted by a signal.
  • Fixed melt on Windows so it no longer ignores window resizing and keyboard transport.
  • Fixed melt -jack option not working with PipeWire.

Search

Subscribe

Subscribe to News via RSS.

Recent Posts

About

MLT enables you to author, manage, and run multitrack audio/video compositions. Copyright © 2008-2026 by Meltytech, LLC.

Social Links