Concat 0.2.8
What changed
- 🐛 No effect cards are drawn on a software adapter, which froze CI's API 30 emulator
- 🐛 On Windows the lock covers one far byte, so a refused process can read who holds the folder (#337)
- ✨ The Audio page's Concat shelf - CC0 sounds from the assets repository, fetched when asked (#60)
- ✨ Voices on the Audio page - saved clones, the models' speakers and styles (#60)
- 🖥️ A home page - create row, a poster grid with search and sort, and learn-and-community cards
- ✨ An Audio page with the user's own sounds, kept across projects (#60)
- 🐛 One process at a time on a project folder - the window, concat --mcp and the CLI lock what they open (#337)
- ✨ An Adjustments sheet beside Filters, and a layer's Adjust and Effects (#249)
- ✨ An Adjustments page - an adjustment layer, and the LUTs, imported there now and no longer on Filters (#249)
- 🐛 A layer laid without a lane goes over the picture, not under it (#249)
- ✨ Masks, stabilization, fit and fill, backgrounds and laying clips end to end as tools (#337)
- 🐛 Stabilization and backgrounds are in the schema, a job's status names the stabilize stage, and the CLI's server lists nothing (#337)
- ✨
concat --mcpserves agents from the shipped app, and Automation lists itself for it (#337) - ✨ Concat-mcp, the Concat API as typed tools for AI agents over MCP stdio (#337)
- 🤖 The window's server lists itself for local callers, and a blocking client for it (#337)
- 🤖 A JSON Schema for every request and edit command, generated from the types (#337)
- ⚙️ Automation waits for a strong token and stops without freezing (#337)
- 🤖 A caller holds nothing until it is in, weak tokens are refused, wrong ones wait, and a stop cancels first (#337)
- ✨ The transcribe switch sits under the script and says what it does
- 🖥️ Enhance's Size is a dropdown
- 🗣️ The voice picker shows who each voice is, and ends in Clone from a sample
- ✨ Mask is a tool of its own, a sheet of shape tiles and sliders (#239)
- ✨ A clip keeps a shape of its picture - line, mirror, circle, rectangle, heart or star - feathered, inverted and keyed (#239)
- ✂️ A dragged clip snaps by its end as well as its start, and never to itself
- ✂️ The tray's Captions, Text to speech and Voiceover buttons toggle their panels
- 🐛 Several selected cards go onto the timeline together, end to end on one lane
- 📱 Video decodes on MediaCodec, which it never did
- 📁 A packet the codec refuses while full is sent again, not dropped
- ⚙️ The Automation page in the settings' own style
- 🐛 The SRT export's notices name their keys where they are used (#281)
- 🐛 A stroke painted on a stabilized clip lands where the brush was (#253)
- 🖥️ A Stabilize section under Video, with Smoothness, Max zoom and Tripod (#253)
- 🤖 An export measures stabilized clips first, and says how far it has got (#253)
- ✨ The stabilization analysis, one media at a time, only over the source clips show (#253)
- ✨ A stabilized clip is drawn through its correction, on the monitor and in the export alike (#253)
- ✨ Measure a camera's shake and work out the steadying correction (#253)
- 🖥️ The background is a clip's Canvas with Apply to all, as in CapCut, not a Details group
- ✨ Captions and Text to speech float over the editor on a desk
- 🐛 SubRip on phones, a named and unique export, and the captions' lane (#281)
- 🐛 A batch volume sets each clip's level, not a key at the playhead (#219)
- 🖥️ Background and Fit and Fill on the desk and a Canvas sheet on the phone (#232, #255)
- ✨ A background behind the main picture, and Fit and Fill (#232, #255)
- ✂️ Delete left and Delete right are buttons on the timeline's toolbar, as in CapCut (#400)
- 🐛 Rational::parse refuses a value past i64 instead of panicking
- 🌍 The merge strings and the interface scale in Indonesian
- 🐛 Space and the playhead move a take and its picture together, and an iPhone records (#213)
- 🗣️ The tick turns Enhance on; a button runs it, and stops it
- 🌍 The Shortcuts page and Delete Left/Right in all 25 languages
- ✂️ Q and W delete left and right of the playhead, as in CapCut (#400)
- ⚙️ A Shortcuts tab that lists every keybind and lets you set one (#400)
- ✂️ Q and E cut the selected clip at the playhead
- 🌍 The level meters' button in all 25 languages
- ✨ A frame back and a frame on beside Play, held to repeat (#244)
- ✨ The lanes glide after a throw, pinch to zoom, and a tap selects without seeking (#350, #243, #221)
- 🖥️ A fresh window opens with the inspector down the whole right side
- ✂️ The VU meters sit at the timeline's right edge, with a tray button to show or hide them
- 🌍 Today's new lines in all 25 languages
- ✨ Record Voiceover opens a floating panel with pause, retake, a meter and a teleprompter (#213)
- 🖥️ Audio effects get their own page beside Audio's Basic
- ⚡ Transcription runs AVX2 kernels again on CPUs that have them, and still starts on a Sandy Bridge (#388)
- 📱 Import opens Photos or Files, and Files shows the app's Documents (#332)
- 🐛 Intel Macs open on macOS 12 again, and the AI features say what they need (#372, #333, #342)
- 🗣️ Size, Strength and a one-frame preview before the whole run
- ⚙️ Interface scale multiplies the display's scale, not replaces it (#320)
- 🖥️ A launch that dies while starting is followed by one that draws in software (#339, #378, #389, #242)
- 🐛 A project that cannot be saved asks to quit without saving, not traps the window (#375)
- ✂️ Ctrl+B splits the selected clip, not every track under the playhead
- 🐛 A wide caption aligned left or right is drawn whole, not cut at its far end
- 🐛 Background removal and Chatterbox no longer ask a CPU runtime for DirectML (#399)
- 🐛 A project the app closed in while removing a background opens again
- ✨ Effects and transitions draw on OpenGL ES, whose uniforms come in whole 16 bytes
- ✨ CONCAT_GPU=software draws the window on the software rasteriser (#389, #242)
- 📱 An import whose provider revokes access is skipped, not a crash
- 🐛 Cancel is a cancel, not a failure, and whisper leaves room for playback (#388)
- 📱 A phone without Vulkan opens the app on OpenGL ES instead of closing it
- ✨ Halation is red-orange again, and it and Corona are built-ins by name
- 🐛 Preserve short imported subtitle timings
- ✨ Adjust volume for selected sound clips together
- 🖥️ Remember the last successful project location between launches
- ✨ The captions sheet imports and exports SubRip files
- ✨ SubRip subtitles read into cues and written from a lane of titles
- 📁 A variable-rate average too heavy to keep exactly is rounded, not dropped for the timestamp grid
- 🐛 The window no longer crashes on its first frame of text
- 🐛 The xkbcommon core library ships beside the module that drives it, so X11 opens
- 🐛 Preserve project saves across concurrent writes and failed closes
- 🐛 A folder dialog opens on a folder that exists (#331)
- 🌍 Translate the 41 lines still in English
- ✨ Add Corona and Halation custom effects
- 📤 One bitrate field instead of three cards, and the resolution a fact, not a menu
- 📤 A bitrate, not a quality tier: Higher, Recommended, Lower or typed, and a size that is the size written
- 🖥️ New project asks a phone for no location
- 🖥️ New project's frame rate is a dropdown, not twelve buttons
- 🖥️ Escape closes the sheet on top
- 🖥️ The Export sheet stays inside a phone's bars, and New Project's sizes wrap (#353, #356)
- 📝 No "Apply to all" in the Text inspector
- ⚙️ The dropdowns first, the switches under them
- ⚙️ Language and Log level are a title with its dropdown at the far end
- 🐛 A window that opens larger than its screen is maximised, so it can be reached and moved (#347)
- 🖥️ Settings fits a phone: the whole screen, its pages as tabs, every model row whole (#354, #355)
- ⚙️ "Remote" is "Automation", and its section "Scripts and apps"
- ⚙️ Proxies are a switch, off by default, as in CapCut
- 🐛 Captions and titles in Thai, Arabic, Hindi, Bengali, Korean and the rest draw their words, not boxes
- 📱 The app no longer closes when dark mode, the font size or the language changes
- 🌍 Effects, filters and transitions read in English, and the locales hold only the interface (#364)
- 🐛 Centre overlap transitions on the cut
- ✨ Add Fade to Black and Fade to White transitions
- ✨ Apply caption style to all titles on its track
- ✨ Consolidate selected video clips through rendered media
- ✂️ A copy of a split clip shows the frames it was copied from (#335)
- 🐛 The window's text is drawn with ClearType when the desk has it on
- ⚙️ The scale row is the desk's, not the phone's
- ⚙️ An interface scale, for a larger screen
- ✨ A transcription's and a read's bar moves through each stage and says how long is left
- ✨ A native crash writes what it was and where to the log, and every log starts with the machine it ran on (#326)
Before you install
- Windows: this release is not code-signed yet. SmartScreen asks before it runs: More info › Run anyway. Where Smart App Control is on, Windows refuses unsigned programs; see the code signing policy.
- Android: no automated check has started this APK: CI's emulators run x86_64 and it is built for arm64. If it does not open on your phone, say so.
- Phones without Vulkan: the OpenGL ES path is new and has only run on an emulator, not on a real phone.
- Blurred backgrounds on Windows: tested on Windows' software renderer only, not yet on a real graphics card.
Download
A self-contained build for every platform Concat ships on.
| Apple silicon | Intel / x86_64 | arm64 | |
|---|---|---|---|
| macOS | macos-arm64.dmg
| macos-x86_64.dmg
| |
| Windows | windows-x86_64-setup.exe, .msi
| ||
| Linux | linux-x86_64.deb, .rpm, x86_64.AppImage
| linux-aarch64.deb, .rpm, aarch64.AppImage
| |
| Android | android-arm64.apk
| ||
| iOS / iPadOS | ios-arm64.ipa
|
SHA256SUMS lists each file's checksum.