Repository navigation
Releases
Atomik Rack nightly 20261114 (79b8989)
Automatic build of main at 79b8989 (20261114), version 0.4.0-nightly.20261114+79b8989. This is a rolling pre-release: it is replaced every night that main changes. Use a tagged release for anything that matters.
Signing: Windows not signed, macOS ad-hoc signed only, SHA256SUMS is not signed.
Unsigned or not notarised builds make the system warn on first launch; see the README for the first-run steps.
Verify the downloads against SHA256SUMS.
Commits since the previous nightly (5f00443):
1b96602Register hand-cabled FX loops as console returnsb95714cTurn the send on when a hand-cabled loop registers a return54834fdExpect Relink Missing Audio to stay available in the MCP session tests3d677baMerge remote-tracking branch 'origin/main' into fix/hand-cabled-fx-return79b8989Merge pull request #371 from atomikfactory/fix/hand-cabled-fx-return
Atomik Rack v0.4.0-rc.2
Added
- Themes, with a built-in Synthwave theme. The colours of the interface are now data: one JSON file per theme with
a version, a name, the built-in theme it is based on (a colour it leaves out comes from there) and about sixty colour
tokens. Light and Dark are files compiled into the program that give back the old palettes exactly, so nothing looks
different; Synthwave is new, a neon night with an indigo background, magenta and cyan accents, a magenta grid in
the arrangement and meters that run cyan, magenta and orange, with its body text kept above a 4.5 to 1 contrast
(a test checks it for every built-in theme). Settings > Themes lists the themes with a sample of each and uses
one at once; Duplicate, Rename, Delete (after a question), Import, Export and Open Themes Folder manage your own,
which are files in athemesfolder next tosettings.json. A theme editor opens on a theme of your own: the colours
in groups (Backgrounds, Text, Accents, Meters, Arrangement, Rack, Console), each with a swatch that opens the colour
picker and a hex text field, a live preview in the whole program, RESET to the base theme, and an undo for the
session (Ctrl+Z); it writes the file when it closes. A file that is not a theme is skipped with one message that
names it. View > Theme gains Next Theme (view.next_theme) and Theme Manager (view.theme_manager), neither with a
key. The grid lines and level meters are theme colours now (grid_bar,grid_beat,grid_sub,meter_low,
meter_mid,meter_high). A glow on the meters and the playhead is not done. The theme is a preference
(theme_idinworkflow.json, an old"theme": "dark"still gives Dark); the project format is unchanged (45). - A French interface and a way to add languages. Settings > Video has a Language row, System (default), English
or Français, and a change applies at once with no restart. System reads the language of the operating system once
at start (thesys-localecrate, decision W) and falls back to English. The menus and every command of the
registry, the Settings tabs, the start screen, the export panel, the rack, arrangement, console, launcher and
palette labels, the status messages and the tooltips are in French (Piste, Clip, Boucle, Calque, Table de mixage,
Envois, Retours, Réglages, Annuler, Rétablir; the glossary headscrates/ui/locales/fr.txt), the shortcuts use
the French key names (Maj, Entrée, Échap, Suppr, Espace, Retour arrière), and dB, Hz, BPM, LUFS, MIDI and CC stay
as they are. A text with no French line shows in English, and the names of songs, tracks, clips and files that
the views draw are left as typed. Another language is one file ofEnglish text => textlines (docs/EXTENDING.md, "Adding a
language"); a line may name values (Added {name}) and then matches any message of that shape. The manual, the
texts of Help Mode and the parameter names of most device panels are still English. The language is saved in
workflow.json; the project format is unchanged. - A built-in manual. Help > Manual (
help.manual, Ctrl+F1, Cmd+Alt+F1 on macOS) opens the user documentation in a
large panel that works offline: a table of contents built from the headings on the left, the page on the right with
headings, paragraphs, bold and italic text, code, lists, tables and links between sections (a picture shows its
description), a search field with ranked results (a heading match above a body match) and a line around each match
with the matched words in bold, and Back and Forward buttons (Alt+Left and Alt+Right). The text isdocs/README.md
anddocs/KEYBOARD.mdcompiled in, so the manual and the documentation are one source; a new Manual section and a
Devices section inREADME.mddescribe it. The More link of Help Mode now opens the manual at its section instead of
the browser, the command palette lists "Manual: " for every section, and a link to a page the manual does not
hold (the device reference, the other documents) opens that page on the project site, one request to a fixed address.
Help > Documentation still opens the project page. The Markdown reader is written in the project (decision V).
The project format is unchanged. - Backup copies in a second folder. Settings > Backup has a Backup folder (None by default, with Choose... and
None), Keep (the copies of each project that stay, 1 to 50, default 10) and Include audio (default on). Every
successful save also copies the project to<backup folder>/<name>/<name> <YYYY-MM-DD HHMMSS>.atomik(UTC) and, with
audio, the audio files it uses to<backup folder>/<name>/Audio/, once each by content hash. The copy runs on its own
worker after the save is confirmed, never delays or fails a save, and a failure showsBackup failed: <reason>once
per session (later ones go to the log). Autosave snapshots make no backup. Only the newest Keep copies stay; an audio
file goes only when no kept copy names it (every project file of the folder is read first, and an unreadable one keeps
all the audio), and files that are not copies are never touched. File > Restore from Backup lists the copies of the
open project with their date and size and opens the chosen one as a new unsaved song, after the question about
unsaved changes. The command isfile.restore_backup(no default key); the settings arebackup_folder,
backup_keepandbackup_audioinworkflow.json. The project format is unchanged. - Share a project as one file. File > Share Project opens a small panel with the title, the author and a note (they
go into the song information as one undo step when you changed them) and three check boxes: Include a preview (an
MP3 of the whole song at -14 LUFS, or a 16-bit WAV file when FFmpeg is not set up), Include stems (one 24-bit WAV
file per mixer strip) and Include plugin list. A line says what the share will weigh and turns to the warning
colour over 500 MB. SHARE asks for a file name (<title>.atomikz, the project archive extension) and writes, on a
worker with progress and cancel, one file with the project, every audio file it uses,credits.txt(title, author,
note, the date, the version of the program and the plugins with vendor and format), the preview and the stems.
A cancel or a failure leaves no file. File > Open and a drop on the window take an.atomikzfile: a folder
dialog asks where to unpack it (it starts inSharedbeside the library folder), the project opens and the Song
Information shows what the sender wrote. The archive reader accepts only the project, its audio, the credits, one
preview and the stems, and still refuses entries that leave the folder, duplicates and anything over its limits
before it writes a byte. The command isfile.share_project(no default key). The project format is unchanged. - A plugin manager. Options > Plugin Manager opens a table of every plugin the scan found: its name, vendor,
format (VST3 or CLAP), category (instrument, effect or note effect), status (OK, Failed with the reason,
Quarantined, Disabled, Unsupported), file and when it was last scanned, with the files that failed to scan as rows
of their own. Click a column head to sort (again to reverse it); the search field matches the name, vendor, path and
tags, and four buttons filter by format, status, category and tag. The star of a row marks a favourite: the device
browser lists favourites first, in a Favourites group of their own and at the top of their kind. Tag the chosen
plugins from the small field (the same tags as the file browser: no#, no comma, 32 characters at most) and find
them in the browser by typing#and the tag in its search field. Disable hides the chosen plugins from the
browser and the menus; a project that uses one still loads it. A plugin whose process ends, or that fails to
load, three times in a row is quarantined (hidden like a disabled one, with a message once); a working instance, or
a load that works after a failed one, starts the count again, and Try Again clears the quarantine. Rescan All and
Rescan Selected run on the scan worker with a progress line and a Cancel button, and Show in Folder opens the file
manager at the file. Favourites, tags, disabled plugins and the quarantine are kept by the plugin's id (so a plugin
that moved keeps them) inplugins_user.jsonin the settings folder; a missing or damaged file reads as empty.
The scan cache now also keeps when each file was scanned. The command isoptions.plugin_manager(no default key). - Soft takeover and knob pages for controllers. An absolute knob or fader of a controller set up with the wizard
no longer makes a parameter jump: when it is not where its parameter is (after another device is selected, a page
or bank change, or an edit with the mouse), moving it does nothing until it comes within 2 percent of the value or
sweeps through it, using the same rule as MIDI learn, and the status line says which way to turn it ("Turn knob 3
up to pick up Cutoff"). Relative encoders, stepped parameters and faders that receive their value as feedback do
not wait. The eight knobs now have pages: Page Down and Page Up (two optional keys the wizard asks for last), or
the commands Controller Knobs: Next Page and Previous Page (controller.knob_page_nextand
controller.knob_page_prev, no default keys), move over the parameters of the followed device eight at a time and
wrap round; the status line names the page ("Knobs: Filter 9-16") and motorised or LED controls receive the new
values. The page goes back to 1 when another device is followed, unless the profile keeps the page for each device.
Pick up values (on by default) and Keep the knob page for each device (off by default) are check boxes on the last
page of the wizard and chips in Settings > Controllers; they are saved in the profile file...
Atomik Rack v0.4.0-rc.1
Added
- The film's own sound. File > Video > Import Video Audio takes an audio track out of the song's film through
FFmpeg, on a worker with progress in the status line and a cancel that leaves no file and no asset, and imports
it like any audio file (converted to the song's rate, stored in the project's audio folder by its hash, with its
waveform). The sound goes on a new audio track named after the film, in one undo step, and its first sample sits
exactly on the film's first frame: the song frame of the film's start plus the offset the file states between its
sound and its picture, to the sample whatever the tempo (the clip starts on the first tick at or after it and
skips into the sound by the rest), showing only the part inside the film's trim. A film with several audio tracks
asks which one in a pop-up (number, channels, codec, language, title); a surround track is mixed down to stereo.
A film with no sound, or a machine without FFmpeg, says so and changes nothing. Keep Audio with Video (on after an
import, saved with the film) makes moving, trimming and relinking the film move and trim that clip in the same
undo step, a drag included; turned off, the clip is an ordinary one, and turned on again it is lined up with the
film again. Import Audio with Video makes Import Video do both. Project format stays 44 (the link is an optional
part of the ignorablevideofield). - A video row in the arrangement. A song with a film shows it in a row above the track lanes: a clip bar with a
frame thumbnail every picture-width, the frame that plays at the start of each slot, so the pictures follow the
zoom. Only the slots in view are decoded, on a worker, with a placeholder until they arrive, and they are kept
while you scroll and zoom. The header cell shows the film's timecode at the playhead and the bar the timecode of
its first and last frame. Drag the bar to move the film and either end to trim it: a move snaps to the grid and
then to a whole frame, a trim snaps its edge to the grid and the cut to a whole frame of the film (the no-snap
key switches both off); a drag is one undo step and Escape puts the film back. Click the bar and press Delete to
remove the video. A missing file or a film with no preview yet is a labelled bar that still moves. The chevron
collapses the row to a thin bar and View > Lanes and Markers > Video Row hides it (both are remembered). - The Video window. View > Video opens a window with the picture of the song's film at the song position:
frame-accurate while stopped (locate, scrub, ruler clicks), following the transport while it plays (frames are
dropped, never lag), jumping back with the loop, and locked to time when the tempo changes. Before the film starts
and after it ends it is black. The timecode (from the film's start timecode, drop frame included) and the frame
number show over the picture (File > Video > Video Overlay, or the TC and # buttons); Fit, 50%, 100% and 200%
set the size with the aspect kept. The window says why when it has no picture (no film, missing file, no FFmpeg)
and shows the progress while the preview builds, which now starts by itself when a project with a film opens.
Frames are decoded off the UI thread by a pure-Rust JPEG decoder (zune-jpeg), with a decode-ahead cache. - A video in the song. A song can hold one film, linked by its path (never copied: films are huge) with what the
probe found (length, frame rate, picture size, start timecode, whether it has sound) saved in the project, so the
project opens and shows its film without FFmpeg. The film's start and trim are kept in microseconds, not in
ticks, so it stays locked to time when the tempo changes. File > Video has Import Video... (probes the film, puts
it at the start of the song and builds its preview in the background; without FFmpeg it says how to set it up),
Remove Video, Relink Video..., Move Video to Playhead and Trim Video Start / End to Playhead, each one undo step.
A song whose film file is gone opens with the video marked missing and a toast; Relink Video points it at the file
again and warns when its length or frame rate differs from the original. The MCP project inspect lists the film.
Project format 44 (an optional field that older readers skip); the viewer and the thumbnails come later. - Video foundation (FFmpeg). Video tracks will be decoded by an FFmpeg you install: nothing is bundled. A new
crateatomik-videofinds FFmpeg (the folder set in Settings > Video, else yourPATH, else the usual package
folders on macOS), checks that it is release 4 or later and says clearly when it is missing, too old or broken:
video is then off and nothing else changes. It reads a film withffprobe(length, frame rate with variable rate
handled, size, rotation, start time and timecode, and the audio tracks) and builds a small proxy of the picture:
every frame as a low-resolution JPEG in one indexed file, so any frame is one seek. The proxy is built on a worker
with progress in the status line and a cancel that leaves no partial file, and cached per user (LOCALAPPDATAon
Windows,Library/Cacheson macOS,XDG_CACHE_HOMEelsewhere) keyed by the film's path, size, time and its first
and last mebibyte, pruned to 2 GiB, oldest first. File > Video has Prepare Video..., Check FFmpeg and Cancel Video
Job; Settings has a Video tab with the FFmpeg folder and what was found (the tab strip is a little tighter for the
seventh tab). No project format change; no film appears in the arrangement yet. - Stretch cursor. A clip edge that stretches the clip (Alt held over the edge, before and during the drag) shows a
drawn cursor, a double arrow with a bar across its middle, in place of the plain column-resize icon. It is crisp at
1x and 2x, and pressing or releasing Alt over an edge swaps it with the resize cursor at once, without a pointer move. - Mix channel panel. A console channel or output bus is a compact one-unit panel in the rack, in place of the
generated panel of its descriptor. Its front carries MUTE and SOLO, a horizontal fader (a drag along the track, a
double-click resets it, a readout in dB), a PAN knob, an L and R peak meter, BYPASS INSERT FX, SHOW INSERT FX and the
AUDIO OUTPUT display (Master Section, the bus name or the Audio I/O pair). The controls drive the same params as the
console strip, so the rack and the mixer stay in step; BYPASS INSERT FX bypasses every insert effect (and the
dynamics and EQ sections in use) in one undo step, as the B-all button of the strip does. The plate shows the name of
the source instrument and a rename changes it. SHOW INSERT FX is view state for now (it starts on and is not saved
with the project); it folds the insert stack under the panel (see below). The back carries four pairs of jacks and
nothing else: INPUT, INSERT FX TO DEVICE, INSERT FX FROM DEVICE and OUTPUT. The sends, the parallel output, the key,
the CV inputs and the gain reduction output have no jack in the rack; they keep working and their cables stay.
The meters of the panels are fed while the rack shows them, with or without the console. - Insert stack in the rack. The insert effects of a channel or an output bus are stacked right under its panel, in
chain order, inside a frame in the strip's colour that ends with a drop row ("drop or create an effect here"). With
SHOW INSERT FX off the frame shrinks to one header line that names the effects; a click on it shows them again.
Creating an effect with an insert selected puts it after that insert, and with the strip selected at the end of the
chain; dropping a device or a browser row in the frame adds it at the place under the pointer; dragging an insert up
or down moves it in the chain; dragging it out to the plain rack takes it out of the chain, which closes behind it,
and leaves the effect uncabled in the rack; deleting an insert reconnects its neighbours. Each gesture is one undo
step, and a refusal (a device that is no stereo effect, a full chain) says why in the status line. Moving a
channel or a bus moves its inserts along, and a move never lands between the effects of another strip. In the
mixer the insert rows of a strip reorder by drag and each has an E that shows the effect in the rack, with the
insert area unfolded and the effect selected. New commandsAddInsertandExtractInsert. The fold state is view
state for now and is not saved with the project. - Master section panel. The console master is a compact four-unit panel in the rack. The front carries the master
fader (the same horizontal fader, readout and meter as a mix channel panel), BYPASS INSERT FX, SHOW INSERT FX, the
AUDIO OUTPUT display and eight send rows: the number, the name of the effect on the send (or "free"), its return
level as a slider (a drag, a double-click resets it) and an EDIT button that selects that effect and scrolls the rack
to it. The back carries FX SEND 1-8 and FX RETURN 1-8 (left and right jacks), INSERT FX TO DEVICE and FROM
DEVICE, MASTER OUT and CONTROL ROOM OUT; the summing inputs, the key and the CV sockets keep working but have no
jack in the rack, and the bus compressor and the control room stay on the mixer. The master has the same insert
area as a channel (still after its compressor): effects stacked under it, the same gestures, one undo step each,SetInsert,
AddInsert,MoveInsertandExtractInsertwith the master as the strip, and in the mixer its insert rows
reorder by drag and have an E. The effects of the 8 shared sends sit under the master's insert area, each send in
a framed group labelled "Send N" (a send with several effects in series shows them all), and they move with the
master; they stay ordinary devices shared by all channels. Creating an effect with the master selected still makes
the next free send (with all 8 in use the e...
Atomik Rack v0.3.0-rc.2
Added
- Recording and editing follow-ups: dimmed masked notes and tails, a Piano Keys window, a Save question in its
own words, fades in ticks and sparse edits of large clips. The piano roll dims what the open clip does not
play: the notes (or parts of notes) under a later clip of the same lane, and the tail of a note that runs past
the end of the clip, which is still drawn so it can be seen and trimmed; a clip with a loop, a muted clip and a
take are not dimmed for the lane's overlap rule. View > Piano Keys (F4) now opens a floating window of its own
(it moves, resizes and can sit on another monitor), the window's geometry and whether it was open are remembered
with the other windows, and so are the strip's octave and velocity (ui-state.jsonpiano_keys_octave,
piano_keys_velocity); the main window's lower panes no longer give up room to a strip. The window is named
piano-keysfor the MCP session tools and--detach-style options. The question about unsaved changes has
the buttons Save, Don't Save and Cancel on every platform: a task dialog with those words on Windows (which
needs a manifest asking for Common Controls version 6, now embedded in the app and the MCP server), the native
alert on macOS and the zenity question on Linux. The clip inspector's FADE IN and FADE OUT show a small unit
tag, MS or TICKS: a click on it switches both fades between milliseconds and ticks of the clip's own span (a
wheel notch or a typed value is then a 16th note or a number of ticks; the file keeps frames). A change of
the note list of a large clip that keeps its length and touches at most an eighth of the notes (an inspector
step on a selection, a transpose, a velocity or length change) is stored in the undo history as the changed
notes only, so a long run of inspector steps on a clip of tens of thousands of notes no longer fills the history
with copies of the whole list. No saved field changes (the project format stays 43). Deferred: the dimming of
the masked parts of a looped clip, and remembering the fade unit between sessions. - Automation lane and gesture follow-ups: a static value handle, a time range on a lane, Extend to Next and Previous
Clip, no note audition, trimming several audio clips and remembered snap. An automation lane that holds a static
value draws it as a line across the lane with a square handle at the left edge of the timeline; dragging the handle
sets the value from the pointer height (on the scale of the lane's points) and one drag is one undo step, Esc puts
the value back. Dragging on a lane with the new Lane range select role (Alt+Shift, Opt+Shift on macOS; remappable in
Settings, Keyboard) shades a time range, snapped to the grid: Copy takes the parts of the lane's clips inside it, Cut
and Delete remove them (the clips are cut at the range edges, one undo step) and Paste puts the copy at the
playhead on the range's lane; any other press or Esc forgets the range. Extend to Next Clip and Extend to Previous
Clip (sequencer.extend_to_next_clip,sequencer.extend_to_previous_clip, in the clip menu) grow the selected note
and automation clips to the start of the next clip on their lane or back to the end of the previous one, the content
staying where it is in song time, in one undo step; audio clips are left alone. Audition Notes in the notes menu of
the piano roll (editor.audition_toggle) stops notes from sounding while they are drawn, moved or stepped to (the key
strip still plays) and is remembered. Dragging the start edge of a selected audio clip trims every selected audio
clip by the same distance, each as far as its own file allows. The snap resolution of the arrangement and of the
piano roll and the snap mode (grid lines or whole steps) are saved in the window state file and restored at start.
SetLaneStaticgained an optional merge id. The project format stays 43. - Looped clip and note lane follow-ups: looped audio takes, an audio loop converted into one clip, and a solo and a
colour for each note lane. A take of a group can loop now, audio included: the take menu offers Loop Take x2, x4
and x8 and Play Take Once (SetTakeLoop), the take runs that many repetitions of its extent and the comp segments
that ended at its end run on with it. A looped note take stays a looped clip; a looped audio take compiles to one
clip per repetition, each restarting the source with its own fades and warp, so the lane plays what the looped
take played, and a comp cut inside a repetition fades like a cut in any audio take. Convert Loop > To a Single Clip
now works on audio: the looped clip is rendered on the freeze worker as the track plays it (gain, fades, envelope
and warp, before the insert effects and the channel strip) and the clip becomes one plain clip of that render with
the same place, name and colour, in one undo step (the status line shows the render's progress; looped note and
automation clips among the selected ones convert at once as before). A note lane has an S button beside M on its
header (the first lane's chip has no room: use Solo Lane in the track header menu,sequencer.toggle_lane_solo):
while a lane is soloed only the soloed lanes of the track play, in the engine, the bounce, a freeze and the lane
merge alike, a mute still silences a soloed lane, and the clips of the other lanes are drawn like a muted lane's.
A Lane Colour submenu (sequencer.lane_color, a palette name ortrack) colours a lane's clips and header bar; a
clip's own colour still wins. Both are saved as the optional"solo"and"color"fields of a notes lane, written
only when set and ignorable by an older reader, andproject_inspectlists them. Bouncing chosen clips in place
ignores a solo on another lane. Recording to several lanes at once is not done yet (a take still goes to the one
selected lane). The project format stays 43. - Rack editing follow-ups: "+" handles, a Create submenu, unfolding under a cable and replacing a device by
dropping a library item. Resting the pointer on the seam between two devices of a rack column, or at the top or
foot of a column, shows a small "+": pressing it opens the device browser (titled INSERT DEVICE) and the row
chosen, with Enter or a double click, is added at that slot, wired as a device dropped there is; Esc cancels. The
rack and device context menus keep Create Instrument, Create Effect and Create Player in one Create submenu.
A cable dragged over a folded device unfolds it after 0.7 seconds of rest, so a jack on its back can be reached
(an ordinary fold edit, and the cable drag goes on over the new layout). A device row or a one-device patch from
the library dropped on the middle of a device of the same kind, or on a track header, replaces that device in
place as one undo step, routed like the browser's replace: the track, clips, channel and the cables that fit
stay, the device keeps its key. A patch of another device type loads its sound inside the same step; a patch of
the device's own type only changes its sound, and what the model refuses (another kind, a console device, a
frozen track) is told in the status line. The project format stays 43. - Restructuring follow-ups: a percent panel for Scale Tempo, a Reverse Clips preference, joining audio clips and
draggable crossfade zones. Edit > Scale Tempo > Other opens a panel with one text field for any percentage
from 10 to 1000 (a comma or a percent sign is understood): the selected clips show the result while you type,
Enter or APPLY makes it one undo step, and Esc or CLOSE puts the clips back. The panel opens on the last
percentage. Reverse Clips follows a new "Reverse clips" row of Settings > Interface (notes mirror as bars, the
default, or only their starts, saved inworkflow.json); the explicit Reverse Note Starts item and thebarsand
startsarguments ofsequencer.reverse_clipsdo not follow it. Join Clips now works on audio: consecutive
pieces of one file that touch or overlap, continue each other in the file and agree on gain, warp and mute become
one clip that sounds exactly as the pieces did (the gain envelope is merged); pieces of different files, a gap, a
jump in the file, a fade at the join, a reversed or looped clip and warp markers are refused with a message that
names the clips and the files. Pressing in the crossfade zone at the start of an audio clip and dragging moves
the cut and the crossfade together: the later clip starts later or earlier and the earlier one ends later or
earlier by the same distance, with a live preview, snapping to the grid, one undo step, and Esc to cancel
(MoveCrossfadein the model). Dragging a clip edge with Alt, which scales each clip about its own fixed edge,
already covered edge-drag scaling. The project format stays 43. - Six CV utilities: CV math, quantizer, sample and hold, slew limiter, gate processor and envelope follower.
CV Math adds, subtracts, multiplies, takes the minimum or maximum, or the absolute value of two CVs (the second
is a knob until a cable is attached), then scales and offsets the result. The CV Quantizer snaps a pitch CV
(the one of the sequencers: 24 semitones per unit, 0 at middle C) to the nearest note of any of the piano
roll's 16 scales on a root, with a transpose and a trigger at every change of note. Sample and Hold keeps the
CV (or seeded noise, so a bounce repeats) it saw at each trigger, free-running tick or note value of the
tempo, the last locked to the song position while playing. The Slew Limiter has its own rise and fall time,
linear or exponential, from 0.1 ms to 10 s. The Gate Processor combines two gates with and, or, xor, nand or
nor, divides, delays by up to two seconds and sets the length, with a trigger output at every rise. The
Envelope Follower turns the level of an audio signal (peak or RMS, attack and rele...
Atomik Rack v0.3.0-rc.1
Added
- Release and dependency hygiene. A freeze or an unfreeze that finishes while the transport runs no longer
rebuilds the engine under it: the sound goes on, the message says the freeze plays when playback stops, and the
engine is rebuilt at the stop. Where plugins run is shown, not assumed: Settings > Plugins says "Running now:
separate process" or "in-process", the status line showsplugins: sandboxorplugins: in-processwhile plugins
are on, and a sandbox that is switched on but cannot start says so once instead of falling back silently. Waiting
for plugins to load is bounded by time.docs/DEPENDENCIES.mdlists the deliberate pins and why, the duplicate
versions thatdeny.tomlskips by root cause (so only a new duplicate warns), and the quarterly bump of the
0.x GUI stack, which a scheduled workflow opens as an issue; the same workflow printscargo update --dry-runevery
Monday. Every advisory ignore has a review date and the Security workflow fails once it has passed. The nightly
release uploads its new files before it deletes the old ones, so it is never empty, and a manual run can be a dry
run (dry_run); every build writes a Sigstore provenance attestation for the files inSHA256SUMS. The MCP server
skips a message over 16 MiB with a protocol error and stays usable, anddocs/MCP.mdstates the headless, no audio,
no plugins contract.SECURITY.mdsays how far the plugin cache is trusted and why the macOS app has the
library-validation entitlement. The sandbox child is an accessory process on macOS (no Dock icon) and a utility
window on X11; the sandbox end-to-end tests have a CI job on Linux and macOS. - Modulation matrix framework. A device can declare modulation sources and targets and sum up to eight
slots (a source routed to a target with an amount, and optionally a second source that scales it) at its
control rate, with no allocation and only+ - * /, so the result is bit-identical for every block size and
worker count. The document stores the slots per device with one undoable command, the amount of a slot is an
ordinary automatable param, and a project without slots saves, loads and bounces as before (project format
41). The poly synth and the mono bass use it first: the three envelopes, both LFOs, velocity, key, mod wheel
and pressure (channel and poly pressure finally have a destination) can move cutoff, pitch and level. A device's
right-click menu opens its matrix (see below). - Modulation matrix panel. Right-click a device that has a matrix (the poly synth, the mono bass) and choose
Modulation Matrix: eight rows of source, target and via pickers (a menu of the device's own entries, the current
one checked) and an amount bar, with the amount from -100 to +100 %. A slot needs a source and a target; until
both are chosen the row stays a draft, and clearing either side of a slot in use clears it. Picks and the
amount bar are ordinary undoable edits (a drag is one undo step) and the engine hears them like any other
parameter change; editing a slot while a note sounds does not click. Esc closes the menu, then the panel. - Text fields with a caret, a selection, the clipboard and input methods. One text field now serves the Song
Information panel: click to place the caret, drag or Shift+arrows to select, double-click a word, Ctrl+A,
Ctrl+arrows by word, copy, cut and paste with the system clipboard (thearboardlibrary, MIT or Apache-2.0,
text only), and input-method composition (Japanese, Chinese, Korean, dead keys) with the pre-edit text
underlined in the field. A character typed with AltGr is text and never runs a shortcut in a text field. The
in-place name edits of the rack, mixer and arrangement keep their end-of-text editing for now. - The piano roll keeps the same notes selected through edits that reorder them. A quantize that moves a note
past another, an undo, or a note added before the selection used to leave the selection on whatever sat at the
old positions; it now follows the notes (by key and order within the key, else by start and key) and goes back
to the original notes when an edit it could not follow, such as a transpose, is undone. - Saved-file corpus and sound pins.
crates/model/tests/fixtures/corpus/now holds one real saved project for
every released format version with a surviving writer (1, 6 to 41), each checked to load without a warning, resave
canonically and hold the same tracks, clips and notes as pinned; every file that has no audio bundle is also
bounced and its per-second level (all platforms) and exact hash (Windows x86-64) pinned. The release workflow fails
when the current format has no corpus file. A list of which sound is claimed bit-identical on every platform
(claims.toml) is checked against the pinned stage blocks, every example project is checked to bounce to the same
bits at several block sizes and worker counts, and the CI runs the release profile on Windows too. - CLAP presets, knobs that follow a preset, and a browser info pane. A CLAP plugin's presets (those inside the
plugin and the files in the folders it declares) are listed and loaded in PARAMS like VST3 presets, also from a
sandboxed plugin. After a preset is loaded, or a patch is changed inside the plugin's window, the rack's knobs show
the values the plugin now holds, and undo puts them back together with the sound. With Browse aimed at a plugin
device the file browser lists the plugin's presets as rows (Enter or a double-click loads one). Selecting one audio
file in the browser shows an info pane under the list: format, channels, rate, length, size, the tempo the file
states, tags, author and categories, and a loudness picture read on a worker thread. VST3 program lists and a
background index of the browser are not built yet. No project format change. - SFZ and SoundFont import into the sampler. Drop an
.sfzor.sf2file on a sampler (or load it from the
sample editor) and it becomes the sampler's zones in one undo step. An SFZ keeps its regions, key and velocity
ranges, root keys, loops, tuning, volume and pan, amplitude envelope, filter, round-robin, velocity crossfades
and<group>headers; a SoundFont brings its own samples, and its first preset is read (ranges, root, tuning,
attenuation, pan, loops, volume envelope, low-pass filter). Samples are converted to the project rate and
stored in the project. Whatever is not read (unknown opcodes, release-triggered regions, modulators, other
presets) is named once in a message and never stops the import. The readers cap file, region and sample
counts, never panic on damaged files and have a fuzz target. The loop slicer's eight slots and the sampler's
eight outputs are not built yet. No project format change. - Space reverb, convolution reverb and vocoder. Three new effects. The Space Reverb adds arena, cathedral,
spring and echoverb algorithms to the reverb engine, with a wet high cut and a gated tail (hold time and level).
The Convolution Reverb plays an impulse response from an audio file of the project (drop a.wavon the device;
no impulse files ship): a mono or stereo response of up to 5 seconds, level-normalised, with pre-delay, low and
high cut, width and mix. It adds no latency, equals direct convolution to float rounding, allocates only when
the device is prepared, and swapping the response crossfades instead of clicking. The Vocoder is a 4 to 32 band
channel vocoder with a carrier input (an internal noise carrier when none is cabled) and a hiss path for
consonants. A gated three-band filter, a bass amp voicing, echo loop jacks and a spectral vocoder mode are not
built yet. No project format change. - Pattern lanes. The
patternlane of a step sequencer, CV sequencer or drum generator is now a pattern
lane: it reads "Pattern", draws its held numbers as labelled blocks, and a right click on a clip lists the
device's patterns to pick from (a clip drawn on it starts with one stepped point). A take now catches pattern
changes without AUTO LANES: the first one adds the lane and each change is written on the next downbeat as a
held number, so the clip switches on a bar line. Track > Add Pattern Lane adds the lane, and Track > Pattern
Lane to Notes renders what the patterns play, in the order the lane chose them, into a clip on a new note
lane. No project format change: a pattern clip is an ordinary automation clip. A pattern offset is not built. - Bent automation segments. Shift-drag on an automation segment bends it so the curve passes through the
pointer at the middle of the segment (one undo step); a click without a drag, or a Shift-click on a point,
straightens it again. The bend is a power curve evaluated with plain arithmetic only, so a bounce is
bit-identical for every block size, worker count and platform, and the value a control shows is the value the
engine applies. Points added on a choice, a switch or another whole-valued parameter now hold their value
instead of ramping. - Parameter lanes in note clips. A note clip can carry device-parameter lanes (a cutoff sweep, a send
level) that move, duplicate, split and loop with the clip; a track's own automation lane of the same
parameter overrides them. Edit > Move Automation into Note Clip turns a selected automation clip into a
lane of the selected note clip, and Edit > Clear Clip Parameter Lanes removes them. Recording into a note
clip and drawing a lane inside the piano roll are not there yet. Both additions are written to the project
only when used (format 41), and the MCPproject_inspectlists the lanes. - Containers fold and unfold in the rack. A container no longer has to be opened in a view of
its own to be worked on: the arrow on the title strip of its panel, or a double-click on the
panel, draws its devices straight under it i...
Atomik Rack v0.2.0-rc.2
Release candidate 2 of Atomik Rack 0.2.0.
Signing: Windows not signed, macOS ad-hoc signed only, SHA256SUMS is not signed. A build that is not signed makes the system warn on first launch; see the README for the first-run steps. Verify the downloads against SHA256SUMS.
Added
- Automate a mixer channel, the master or an effect. Any parameter that can have a lane now can: right-click a knob or fader of a console strip, the master, an insert or send effect or any effect in the rack, in the mixer or in the rack, choose Edit Automation, and the lane is added on an automation track, in one undo step, and shown in the arrangement (the old "automate it through a macro" workaround is not needed; the macro route still works). An automation track is the usual DAW track of a device that plays no notes: it belongs to the channel or effect, shows its name and colour, and holds automation lanes alone (no note lane, no audio lane). The first lane shares the track's header row, which carries the name, the expand chevron, a mute button and that lane's write-mode and arm buttons; the other lanes fold and collapse as on any track. It can be renamed, coloured, moved, put in a folder, copied with its device and deleted like any track. Mute stops its automation (the param keeps its own value); solo has no meaning for it: it has no solo or arm button, a folder's solo and arm leave it alone, and soloing another track does not silence it. It cannot be frozen. Automation recording (the
Wbutton, Touch, Latch, Overwrite) writes into these lanes like any lane, the strips, the master and the rack controls follow them while the song plays, and a bounce plays them exactly as it plays an instrument's lanes (bit-identical across block sizes). The master section now draws the automation mark on its controls, as the channel strips do. A device inside a container, an audio track and the internal parameters still have no lane. Project format 34: a track may sit on a device without a Notes input and then holds"automation"lanes only; every older file loads unchanged, and a project without such a track differs from its version 33 file in the version line alone. - The loop is between a left and a right locator flag. The loop bar in the arrangement ruler is gone: an L flag marks where the loop starts and an R flag where it ends, drawn like the song's E flag, with a tint between them in the ruler (faint while the loop is off, clearly stronger while it is on; the lanes keep their loop shading). Drag a flag to move it (it snaps, the disable-snap keys free it, Escape cancels, and one drag is one undo step; the left flag cannot pass the right one), choose Transport > Set Left Locator at Playhead or Set Right Locator at Playhead, or right-click the ruler and choose Set Left Locator Here or Set Right Locator Here. The commands have no default key and can be mapped in Settings > Keyboard. Flags that meet stay readable: R hangs to the left of its line, L and E to the right, and a flag that would cover another moves down one row; where R and E share a tick, a press on the shared line takes R. A press in the lower band of the ruler now locates the playhead like the bar numbers (it no longer toggles the loop or draws a new loop; the loop button, Loop to Selection, a click on a range marker and the flags set it).
Alt+clickandCtrl+click(Cmd) in the ruler still set the left and right locator. - Edit Automation on a control. A right click on a knob, fader or switch of an instrument in the rack (or of the console or the parameter pane) now offers Edit Automation at the top of its menu: it adds the automation lane of that parameter to the device's track (the track too, when the device has none), unfolds the track's lanes and the folders that hide it, brings the arrangement into view and outlines the lane, ready to draw in. When the lane is already there it only shows it. Adding is one undo step, and an empty lane holds no automation until you draw. A parameter a macro drives opens the macro's lane on the bank's track. Channel strips, the master and effects get an automation track of their own (see the entry above). View > Show Automation Lane now also brings the arrangement into view. New command
automation.edit_control(menu only, no default key). - A dragged note ends where you let go. Drawing a note in the piano roll (the Pencil, or a double-click with Select) and dragging now ends the note at the pointer, snapped to the current snap (the disable-snap key frees it), and the note follows the pointer while you drag; before, the drag was added to the default length. Dragging left of the start keeps the minimum length (one snap step), and a click without a drag still draws a note of the default length. A chord stamp is stretched the same way.
- Stepping through notes plays them. In the piano roll, Left and Right (and Shift+Left and Shift+Right) now sound the note they select, on the track's instrument, for a quarter of a second; the next step, a click, closing the roll or opening another clip ends it at once, so nothing hangs. Shift+Right and Shift+Left now move the end of the selection like a text selection: with the selection extended to the right, Shift+Left gives the last note back (and once only the starting note is left, extends to the left past it), and the other way round. A selection made another way (a rubber band) starts from its earliest note, so Shift+Left first drops its latest one. A shrink sounds the note the selection now ends on.
- Guitar Amp. A new effect,
atomik.guitar-amp("Guitar Amp" in the browser): a guitar amplifier with a cabinet, chorus, delay and reverb, and five setups. The signal runs through a noise gate (gate), a tight high-pass and a mid boost (tight,boost), a three-stage preamp (gain) with a passive-style tone stack (bass,mid,treble, which affect each other) and a power amp (master,sag,presence,depth), then a cabinet synthesised from designed filters (1x12 open, 2x12, 4x12 closed or none, with amicposition from the centre of the cone to its edge; no recorded impulse response), a chorus, a ping-pong delay (in ms or as a note value at the project tempo) and a reverb, each with an on switch and a mix, and alevel. The preamp and the power amp run at four times the sample rate and every clip is antiderivative anti-aliased, so a high note at full gain keeps everything that is not a harmonic below -53 dB; the 35 samples of latency are reported, so plugin delay compensation and the bypass switch keep the amp in time with the rest of a project. The amp plays the mono sum of its two inputs (the cabled one when only one is) and makes the stereo image with its effects. The setup selector loads Clean, Crunch, Industrial Rhythm (very high gain, tight and percussive for drop-tuned guitars: a pre-gain high-pass and mid boost, a scooped but present mid, strong presence, a closed 4x12 and a noise gate), 80s Lead (hot, singing sustain, mid-forward and compressed, with a 380 ms ping-pong delay and a plate-like reverb) or Synthwave (clean to light crunch, bright, a wide chorus, a dotted-eighth delay and a big reverb): it sets every control in one undo step, and you tweak from there. The rack panel shows the speakers of the chosen cabinet with the microphone, in and out meters, a gate meter, and a one-line tooltip on every control. The five setups are level-matched. The amp is an original design and the setups are named for the sound, not for any product or player. See docs/DEVICES.md. - Export the song or the loop as an audio file. File > Export Song as Audio File... renders from the start of the song to the End marker and keeps the tail that is still audible (reverb and delay ring out, up to 10 s, cut where the output stays below -90 dBFS; never shorter than the End); File > Export Loop as Audio File... writes exactly the audio between the left and the right locator with no tail, so the file loops on the grid. Both ask for a WAV file, then for the options: 16-bit with dither (triangular, the default for 16-bit; none; or triangular with the noise shaped towards the high frequencies), 24-bit or 32-bit float, the sample rate (the project's, or 44.1, 48, 88.2 or 96 kHz: the render is converted before it is quantised), and whether a song keeps its tail. The render runs faster than real time on a worker thread through the same path as a bounce (mute and solo, the master section, automation, tempo ramps and plugins, the latter needing the plugin sandbox as a freeze does), on a copy of the project, so playback and editing go on; a progress bar with Cancel replaces the options, and a cancelled or failed export leaves no file (it is written under a temporary name and renamed when complete, and an existing file is replaced only by a complete one). The dither is seeded, so the same project exports the same bytes; 24-bit and float are not dithered. The choices are remembered in
export.jsonnext tosettings.json. Both are commands (file.export_song_audio,file.export_loop_audio, no default keys) that can be remapped in Settings, Keyboard. The renderer gains 16-bit PCM output (atomik-render --format pcm16, dithered) and the QA server gainssession_export. A bounce (atomik-render,session_bounce) still ends two beats after the End. No project format change. See docs/ARCHITECTURE.md. - A song End marker. The arrangement ruler shows an E flag where the song ends: drag it (it snaps like the loop locators, and one drag is one undo step), choose Transport > Set End Marker at Playhead, or right-click the ruler and choose Set End Marker Here. The lanes past it are shaded and the scroll bar covers it. The End is the length of the song ...
Atomik Rack v0.2.0-rc.1
Fixed
- Bounce in Place and Unfreeze and Keep Audio make an audible track. The new audio track was
silent while playing: its devices reached the engine after the routing that connects them, so the
track and its channel were never cabled to the master. The changes of a compound edit inside
another one are now reported with every device first, then one routing. The new track also sits
right after its source track, in the same folder and colour, instead of at the end of the list. - Piano roll tools. Only the pencil creates notes now: with Select a press on the empty grid
starts a rubber band (a click clears the selection, Shift or Ctrl adds to it) instead of drawing
one. A note can be resized from its left edge as well as its right one, and with several notes
selected every one of them changes by the same delta (snapped, with a minimum length), in one undo
step like a group move. The mouse cursor shows what a press will do: a horizontal resize cursor
over a note edge and during the drag, a move cursor over a note body, a crosshair for the pencil. - Sandboxed plugin editors on Wayland. The plugin process now uses the X11 backend (XWayland)
wheneverDISPLAYis set, so a sandboxed CLAP or VST3 editor opens as an X11 window it can embed
into instead of failing with "Wayland sessions cannot embed a plugin editor". The rack window
stays native Wayland. In-process editors and sessions withoutDISPLAYstill fall back to the
parameter pane.
Added
- Installers, a nightly build and signing in the release pipeline. A release now publishes a
Windows installer (atomik-rack-<version>-windows-x86_64-setup.exe, built with Inno Setup:
Program Files or per-user, Start menu shortcut, optional desktop icon, uninstaller,.atomikfile
association), a macOS disk image (atomik-rack-<version>-macos-universal.dmg) and a Debian
package (atomik-rack_<version>_amd64.deb, with the programs in/opt/atomik-rackand links in
/usr/bin), next to the zip and tar.gz archives, with a.sha256for each and oneSHA256SUMS.
The smoke test installs and uninstalls each of them. A daily nightly pre-release (tag
nightly, replaced each night thatmainchanges) is built by the same reusable workflow.
Signing is wired and waits for certificates: Authenticode for the Windows programs and installer
(a certificate file, or Azure Trusted Signing), Developer ID signing with the hardened runtime and
notarisation for the macOS app and disk image, and a GPG signature ofSHA256SUMS. Each step is
skipped with a notice until its secrets exist in therelease-signingenvironment, so builds are
unsigned today. Seedocs/RELEASING.md. - Mixer snapshots and comparison. A snapshot is a named copy of the console: every param of
every channel, output bus and the master (fader, pan, width, mute, solo, input trim and polarity,
the sends, the dynamics, EQ and parallel compressor, the insert switches, whatever a strip gets
later), the bypass of the insert and return effects, and the VCA groups' level, mute, solo and
membership. A snapshot bar under the console toolbar shows a chip per snapshot (up to 16,
namedA,B,1,2... or by you), a + that stores the mix, and an A/B toggle. A
click on a chip recalls it, a double-click renames it in place, and a right-click offers Recall
(all, or only the levels, the mutes and solos, the sends or the insert bypass), Compare with this,
Update from current mix, Rename, Move and Delete. The chip of the current snapshot is lit, with a
dot once the mix has moved. Compare keeps the working mix in a hidden slot, recalls the
snapshot and flips between the two without losing an edit made on either side; END keeps whichever
is live. A recall is ordinary param changes (the strips' own 5 ms smoothers apply it, no clicks,
no rebuild) and one undo step, as are store, update, rename, move, delete and every compare step.
A snapshot does not hold the arrangement, the cables, the rack's structure or the effects' own
parameters; a recall skips channels, effects and groups that were deleted since (the bar says
which) and leaves the ones it never knew. The Mixer menu has Store Snapshot, Update Snapshot,
Recall Snapshot, Recall Next and Previous Snapshot, Compare A/B, End Compare and Delete Snapshot
(no default keys). Project format 27 saves them (a project without snapshots differs from its
version 26 file in the version line alone and bounces bit for bit as before); the MCP inspection
lists them andsession_commandstores, recalls (with a scope) and compares by id or name. - Channel strip upgrades. A parallel compressor on every channel and bus: a second
compressor (the one of the strip's dynamics section) after the inserts, the dynamics and the EQ,
blended with the dry signal by mix (1 is the compressor alone) and followed by a makeup; the
console has a PARALLEL section after DYNAMICS with an enable button and threshold, ratio and mix
knobs, and the rack's channel panel has the attack, release and makeup too. It has no lookahead,
so the dry and compressed paths stay aligned and it adds no latency; off, or at mix 0, the strip
is bit for bit what it was and costs nothing. The input trim (-24 to +24 dB) and polarity
were already on the strip; Mixer > Toggle Polarity now flips the selected strips. Insert
bypass keeps the delay compensation: a bypassed plugin effect plays its input delayed by the
latency it reports (as the built-in effects already did), so the channel does not move against the
others when you toggle it, with a phase-aligned 5 ms crossfade; each filled insert slot has a
B that bypasses its effect, and the strip's BYP ALL button (and Mixer > Bypass All
Inserts, on the selected strips) bypasses every effect of the chain in one undo step. No project
format change: older projects load unchanged and bounce bit for bit.session_statuslists the
strips that use any of it andsession_set_paramsets a device's param in a headless session. - Mixer groups and VCA faders. A VCA group is one fader, one mute and one solo over several
channels and buses, with no audio and no routing of its own. Mixer > Create VCA from Selection
(on the console's selection, the arrangement's selected tracks or a selected folder, or the rack's
selection) makes a group namedVCA n; its strip in the console, after the buses, has a plate in
the group's colour with the name and the member count, M and S, an offset fader from -60 dB (off)
to +12 dB and a readout. Members keep their own faders and play at their level plus the group's
offset (the sum in dB, smoothed like a fader, no zipper noise); a member's strip shows a marker
where it plays and its readout shows that level. The group's mute and solo count as the members'
own: solo beats mute, a soloed group silences the other strips as a solo does, and the members
stay individually controllable. A strip is in at most one group; drag its name plate onto a VCA
strip, use the right-click menu of a channel or bus (New VCA..., Add to VCA, Remove from VCA) or
Mixer > Add to VCA, Remove from VCA and Delete VCA; members show the group's colour as
a chip on their plate and as a bar on their track header in the arrangement. Every change is one
undo step, a removed channel leaves its group with it, and a drag of the fader is one step. A
project without groups sounds and bounces bit for bit as before. Project format 26 saves the
groups (omitted when there are none, so older projects load unchanged);session_statuslists
them andsession_commandtakes the id of a group. The rack's generated panels no longer show the
app-onlyinternal.*params (the channel's solo-silence toggle). Not yet: automation of the group
fader, linked faders, groups of groups and a folder the group follows (see the roadmap). - Spectrum and metering. Two new effects that pass the audio through untouched (bit for bit, no
latency, the bounce is identical with or without them) and show what they see; both are in the
device browser with the effects and have the usual bypass. Spectrum (atomik.spectrum) draws
an FFT of 1024 to 8192 points (Hann or Blackman-Harris) of the left, right, mid, side or sum, on a
log axis from 20 Hz to 20 kHz over a dB range you choose, averaged over a time you choose, with
peak hold and decay, an optional tilt of 3 or 4.5 dB per octave, a loudest-bin readout, or the 31
one-third-octave bands instead of the fine trace. Phase Meter (atomik.phase-meter) shows a
goniometer (mid/side or plain left/right) from the recent samples, the stereo correlation from -1
to +1 over an averaging time, the balance and a width figure, peak, RMS and hold bars for each
channel, the sample peak and the true peak, and the momentary, short-term and integrated loudness
in LUFS (BS.1770-4, the meter of the mastering device) with a reset. The audio thread only copies
each batch into a lock-free ring (ScopeTap, a new opt-in of the device SDK registered by the
engine); the FFT, the averaging and the drawing run on the UI side, so the audio path costs 128
atomic stores a batch. The headless QA server getssession_meters, which renders a project
offline up to a position and returns the readings (and fills the panels forsession_textsand
screenshots), so a generated -23 dBFS 1 kHz tone can be checked for -23 LUFS, correlation +1 and a
1 kHz line. Nothing new is saved in a project: the devices are ordinary devices, the project
format is unchanged and older projects bounce exactly as before. - Audio to notes. Audio > Audio to Notes... extracts the notes of the selected audio clip
into a note clip that starts and ends with it, in one undo step. Pitched follows one voice or
instrument (a YIN pitch tracker with a...