Repository navigation
Mixing stems
In mix[flow], a separated song opens as a stack of lanes — one per stem — over a shared timeline. This page is about that stack: which lanes you get, and how to look closer at them.
For continuous bass pitch, synchronized MIDI audition and the Ableton virtual MIDI port, see Bass pitch analysis.
Along the bottom of the window, level with the library's own footer, there is a thin strip that explains whatever the mouse is over — a button in the header, a knob on a stem, an icon you have not met before — in a sentence. Move the pointer around and read it; it is the fastest way to learn what the window can do without leaving it.
It follows the keyboard as well as the mouse, so tabbing between controls explains them too. When the pointer is over nothing in particular it says Point at anything to read what it does.
Both layouts carry it. The four-deck Play layout is where it earns its keep, since a wall of knobs and faders has the least room for words on it.
Choose a library folder first. Import opens a picker for one or more audio files, and you can also drag audio files anywhere onto the mix[flow] window. The dashed target tells you when the drop will be accepted. Either way, mix[flow] copies the files into the library; moving or deleting the originals later does not break it.
FLAC is supported, including uppercase .FLAC filenames, along with WAV, AIFF, MP3,
M4A, AAC, Ogg, Opus and WebM. You can drop an album folder or a mixture of files and
folders. mix[flow] imports supported audio from nested folders too, in filename order,
and skips artwork, notes and other unsupported contents. An unreadable file does not
stop the other tracks from importing.
Files are copied into the library's audio folder; equal filenames get numeric suffixes so nothing is overwritten. Overlapping folders and file aliases import each source once per drop, and folder traversal skips the destination library itself.
For a YouTube video, drag its link from your browser onto the library or anywhere in the mix[flow] window. mix[flow] uses its own pinned copy of yt-dlp to fetch the best available audio-only stream, then imports that file exactly like a local one. You do not need to install yt-dlp, Python or Homebrew, and a YouTube import does not wait for the separation engine to be installed.
A dropped link imports one video, not a playlist, and refuses live streams. Use it only for audio you have permission to download. Playlist, radio, timestamp and tracking parameters on a video link are ignored; only its video id is handed to the downloader.
Drag the library’s right edge, or focus the handle and use the arrow keys, to widen it. It can expand beyond 560px while leaving one deck’s width visible. The DJ controls keep their usable size; scroll horizontally within the DJ area to reach the other decks. Your chosen library width is remembered and temporarily fitted to the available space.
The library shows one song per row, with a small cover beside every song title and separate Artist, Album, Song, BPM, Key, Analysis, and Stems columns. Artwork repeats when songs share an album. Missing artist or album information appears as a dash. Subtle alternating shading runs across each whole row to help you follow a song across columns. It follows the displayed order when sorting or filtering; hover and selection remain distinct.
Use the Artists, Albums, and Keys lists below the text filter for quick browsing. Choose an artist to narrow albums and songs; choose an album and key to narrow the songs further. The lists use full stored credits, including collaborations. Unknown artist and No album let you find songs with missing metadata. Each list scrolls independently.
All artists clears the artist, album and key choices; All albums keeps the artist and clears only the album. Text search works within these choices. The lists stay available while typing, even if nothing matches. ↻ Reset filters, the arrow button immediately after the text filter and before Recent and Import in the top row, clears all list choices and text search. Keyboard arrows and type-to-select work in each list. List choices reset when changing libraries or reloading.
Click a column name to sort it alphabetically; click again to reverse the order. An arrow shows the current direction. Artist is the default: matching artist credits sort by Album, then Song. Album order breaks ties by Artist, then Song. Full artist credits stay intact, including collaborators. Missing information stays at the bottom.
Recent above the table puts the newest imports first; click again for oldest first. The chosen sort column and direction survive a reload.
Drag a column heading onto another heading to rearrange the fields. Thin separators between headings make their boundaries clear. Each move saves immediately and survives reloads and app reopen. New columns keep your existing order; duplicate or obsolete fields do not reset it. Windows on the same origin share the latest saved arrangement; the desktop app and dev browser keep separate preferences. Artwork always stays beside Song. Clicking a heading still sorts that field. For keyboard reordering, focus a heading and press Alt+Left/Right. Analysis and Stems are display columns that can move but do not sort. Drag the right edge of an Artist, Album, Song, BPM or Key heading to adjust its width. Stems and Analysis keep fixed widths, with no resize handles; you can still reorder them. Previously saved widths for those two columns are ignored. The pointer changes to a resize cursor at the edge; dragging the heading text still reorders it. Widths stay with their columns when moved and survive reloads and app reopening. Minimum widths keep headings, artwork and analysis controls usable. To resize with the keyboard, focus the edge handle and press Left/Right (8 pixels per step). Double-click the edge or press Home on its handle to restore that column’s default width. The hover hint reminds you of these controls. New columns get default widths without changing yours.
Only the song rows scroll vertically, so the scrollbar starts below the full-width column header. The header stays aligned when scrolling horizontally, resizing or reordering columns. The table scrolls horizontally when the sidebar is too narrow for all seven columns. The library's existing right-edge handle still changes its width. Long titles and credits show their full text on hover.
The filter searches title, full artist credit, and album. Every word must match somewhere,
in any order: skrillex rumble finds Rumble, and flowdan quest finds matching
collaborations on Quest For Fire. Filtering keeps your current sort. Clear with × or
Escape to restore all songs. The footer shows how many songs match.
Key shows one preferred saved estimate with a provisional ?, or your manual key. It shows Unknown when evidence is insufficient. Competing estimates are diagnostic alternatives, not key changes, and do not appear in the Keys filter. The current bass analysis cannot reliably verify modulation, so it never displays multiple automatic keys. Click its heading to sort; Unknown stays last. Drag the heading or use Alt+Left/Right to move it. Existing layouts gain Key after BPM without changing the relative order of other columns. The Keys quick filter remains available, and Song contains only the title and artwork.
BPM shows a consistent musical tempo for steady songs. Only supported sustained tempo regions produce a range; a displaced kick or clap does not. A dash means no usable reading, including a half/double beat-count ambiguity needing grid review. Analysis shows a representative whole-song envelope, colored with your waveform palette, when a saved original-audio scan exists. The envelope emphasizes sustained activity while keeping a smaller contribution from isolated peaks, so a single loud instant does not fill an entire region. Quiet regions stay quiet; it is not a sample-accurate peak meter or a per-song normalization. The waveform box matches the 22px album art. Row contents are vertically centered; Analysis and Stems are horizontally centered too, while text stays left-aligned. Song, BPM, Key and headings share the same 11px table typography. A missing waveform shows a dash. Browsing reads saved analysis only and never starts audio processing. When first-time deck analysis saves a waveform, the library row updates automatically. Offscreen rows pick up the saved result when scrolled into view; no reload or manual refresh is needed. A failed save does not display a completed waveform. Pending and failed cache reads keep the dash, with their state available on hover.
Stems has its own column beside Analysis. Four available stems make a tiny 2×2 square of colored tiles; six make a 3×2 grid. Partial sets show only the stems actually present, and no stems shows a small branching-line Generate stems icon button. Click it, or focus it and press Enter/Space, to select that track and open its Prep separation screen. The icon is muted at rest and turns bright on hover or keyboard focus, matching the quiet buttons. Only the icon lights up; there is no background highlight. Separation starts only when you explicitly press Generate stems; an existing job keeps its normal progress/busy behavior. Colored tiles still show available sources on hover. The waveform and tiles stay in separate cells, so each belongs clearly to its song. Drag the Stems heading to move it just like any other field.
Hover a song to read its available stems and beat-grid status. These details also appear in the bottom hint strip. Click a row to select its Prep track, or use the song button from the keyboard. Drag a row onto a Play deck's strip or waveform to load it. Loading does not start playback. Sorting and filtering never rewrite your music files or their stored credits.
mix[flow] separates and transcribes on your own machine, through a Python engine the app installs the first time you press Generate stems or Transcribe. You don't install anything and there's nothing to configure. The first job's progress spends its first few minutes saying downloading the engine before it starts on the song.
The app also carries its own audio decoder. M4A, AAC and MP3 imports do not depend on an FFmpeg or Homebrew installation, and the copy of FFmpeg in a Terminal is not the one mix[flow] uses. A song that imports successfully has everything it needs to reach the separation engine from a normal Finder launch.
It happens once. After that every separation goes straight to work, and a new version of the app reuses what's already there. The first time you use a particular model there's a further short download for the model itself — that's the loading the model stage.
It all lives in one folder, ~/Library/Application Support/mix[flow]/runtime. If it ever
ends up in a bad state, delete that folder and the next separation rebuilds it.
The lanes show the stems the model actually made. Separate with a four-source model and you get Vocals, Drums, Bass and Other — four lanes, and nothing claiming there should have been six. Separate with the six-source model and Guitar and Piano appear as lanes of their own.
A four-source model has not lost the guitar; it has folded it into Other, along with the piano and everything else that is not a voice, a drum or a bass. If you want it on its own lane, separate the song again with a six-source model — the ↻ button beside Reset in the band above the lanes.
The band also names the model the song was separated with, so what you are looking at is always answered on the same screen as the question.
The library shows available stems as colored tiles in Stems. Hover to read their names. Only available stems get tiles.
The lanes share the height of the window between them, so four stems fill the same space six would. Opening a track lays the lanes out straight away and each waveform appears as its stem is read.
Enable Link Audio — the two-rings button at the right-hand end of the playback controls — to share the loaded stems over the local network, including between apps on the same computer. In Live 12.4 or later, enable both Link and Link Audio, create an audio track, choose mix[flow] as its Link peer input, and choose the stem in the input channel chooser. Repeat on separate tracks for Vocals, Drums, Bass and Other; six-stem songs also offer Guitar and Piano.
These are separate stereo feeds after mix[flow]'s EQ, faders, mute and solo controls. Warped playback is shared as you hear it. Arm Live's receiving tracks to record, or set monitoring to In to hear them through Live. Enabling Link Audio automatically turns Local audio — the speaker button beside it — off in mix[flow], so you hear Live without a second copy from the app. You can turn Local audio back on at any time; this controls only the computer's speaker output and leaves the Link feeds unchanged. Disabling Link Audio, or a sharing failure, restores local audio. If you choose to listen locally while recording in Live, leave monitoring Off on Live's receiving tracks to avoid hearing both paths.
The text beside the switch reports connected peers. 0 peers means sharing is on but no other Link peers have been discovered. gaps means the sender could not keep up; its tooltip shows the dropped block count. unavailable has an error in its tooltip; toggle sharing again after resolving it. Sharing starts off after a reload.
Changing to another song with the same stem layout preserves the channel identities. Changing between four and six stems recreates the inputs, so check Live's routing. The four-deck Play view publishes loaded deck outputs, Master and Phones through the same Link Audio connection. Switching Prep/Play releases the outgoing view’s publisher. Deck Sync is explicit; only synced decks follow shared tempo and beat phase.
With Link Audio enabled, mix[flow]'s playback BPM follows the Link session. Changing the BPM in either mix[flow] or Live changes the shared tempo; the stems actually stretch to that tempo. Warp stays on while linked. Loading another song does not change the session tempo, and disconnecting keeps the last shared tempo.
Link pins beside Link Audio defaults to 4 bars. Choose 8 bars, 16 bars, or Sections for looser timing while linked. Section boundaries always align, and the original push and pull stays intact between pins. This is about following Live while linked; what you export is chosen on the export dialog and is separate. The choice lasts for this window session.
Play waits for the next matching bar position, using a four-beat quantum. The header says waiting for bar while it is queued. Pickups before the first downbeat retain their timing, so alignment depends on the song's beat grid being correct. Use Edit beat grid to correct it when needed. A failed time stretcher reports an error instead of starting at the wrong speed.
Pause and Stop act immediately and cancel any queued start. Enable Start Stop Sync in Live as well to exchange play/stop commands in both directions. Joining a session that is already playing leaves mix[flow] stopped until you press Play or a peer sends a new start command. Changing songs or opening analysis stops only mix[flow].
Each lane carries its stem's colour as a stripe down the left of its head, and the same colour faintly behind the waveform, so you find the bass lane by its colour rather than by counting rows. A lane you can't hear — muted, or lost to somebody else's solo — loses both and its name goes grey, so what am I hearing is answered by the shape of the stack.
Each lane has a mute (M), a solo (S) and a fader. Unity is where the fader rests,
and the number to its right reads as trim either side of it — 0, +2, -4.
Solo follows Live's rule: any soloed stem plays, and when nothing is soloed everything unmuted does. The summary on the left of the band — 3/4 audible — counts what you would hear, and says solo when a solo is the reason.
Reset returns every stem to unity, unmuted and unsoloed. It is greyed out when there is nothing to put back.
Clicking anywhere in a lane moves the playhead there. Space starts and stops.
Click the Bass name to unfold its Tablature lane. Click it again and the lane disappears completely, leaving Bass looking and behaving like every other stem. The lane also folds away when you change songs.
Inside it, Transcribe listens to the separated bass stem, lays the detected MIDI performance across the lane, and also writes pitched MIDI and text tablature files.
The instrument is a standard four-string bass in EADG:
E1 A1 D2 G2
There is no tuning setup. Press Transcribe and the notes are placed directly onto those four strings.
If the tracker follows a bass harmonic instead of its fundamental, use the −8va / 0 / +8va control to correct the entire result by one octave. The tablature moves immediately, and the saved MIDI and text tab are rebuilt to match. This reuses the detected notes; it does not run transcription again, and the choice survives reopening the result.
The lane shows which stage is running and gives you Cancel. Separation and transcription use the same local engine, so only one of them runs at a time. When it is done, the summary distinguishes pitched notes from muted or uncertain attacks:
- a fret number is a detected pitch placed on one of the EADG strings;
-
xis an attack the tracker heard but could not defend as a pitch; -
?is a detected pitch outside the playable range of a standard four-string bass.
Every event sits at its exact time on one of the string lines. Fret numbers are large, plain monospaced figures with no badge or filled block around them. Their colors identify pitch classes consistently across octaves: every C is red, for example. Duration remains as a quiet one-pixel underline, and only bar lines cross the strings vertically.
The tablature shares the waveform's playhead, bar grid, zoom, paging and click-to-seek. At whole-song width the duration of every note remains visible but fret numbers that would print on top of each other thin out; zoom in and the numbers appear as there is room for them.
Reveal opens the result folder containing bass.mid, bass.tab.txt, and the detailed
transcription record. MIDI contains pitched notes at their measured times. Tab includes
the x and ? marks as well, so uncertainty is visible instead of silently guessed.
If the song has a trustworthy automatic grid, the text tab is written in four-bar blocks at the nearest sixteenth. Otherwise it uses exact onset times rather than drawing tidy tab against a grid it does not trust.
Slides, hammer-ons and pull-offs without a new attack can remain one note. Treat the result as a fast working transcription to listen through, not as a score recovered from ground truth.
The lanes open showing the whole song. That is the right view for finding a breakdown and the wrong one for finding a downbeat — four minutes across a laptop screen is about a quarter of a second per pixel, so a kick and the snare after it are the same column.
| scroll over the lanes | zoom in and out |
| ⇧-scroll up/down | pan along the song: down goes back, up goes on |
| ⇧-scroll sideways | pan in that direction |
| hold the middle mouse button and drag | up zooms in, down zooms out; left/right pulls the audio with your hand |
the 3:52 button in the band |
how much of the song is on screen; press it to go back to all of it |
Middle-drag can zoom and pan at the same time and continues outside the lanes until you release the button. ⌘-scroll, Ctrl-scroll and trackpad pinch also zoom. In a short window, use the lane list's scrollbar to reach lower rows.
Whatever is under the pointer stays under the pointer, so you zoom in on a fill by pointing at the fill.
It goes all the way to the samples. Keep scrolling and the lanes stop drawing an
envelope and start drawing the audio itself, and then — a fraction of a millisecond
across the screen — the individual sample points, spaced a hand's width apart with the
line running between them and each channel drawn separately. That is the bottom, because
there is nothing under a sample.
The button tells you where you are on the way down: 3:52, 12s, 140ms, 4.4ms.
It also goes out further than the whole song. Keep zooming out past the point where the song fills the lane and it keeps shrinking, down to about a quarter of the width — useful when you want the shape of the whole thing with room around it. The time either side isn't part of the song, so it's shaded, and the ruler counts backwards through it: bar 1, then 0, then −7. Same idea as scrolling left of the start in an arrangement.
The slice ruler, the warp lane and every stem move together, because there is one timeline under all of them. While the song is playing the view follows the playhead, paging on when the head reaches the edge rather than sliding continuously under it. It only does this while something is playing; a view you have just set by hand stays where you put it.
Zoom is a view, not a setting. It is not kept when you switch songs or reload the window — unlike the mix itself and where you left the playhead, which are.
The grid follows you in. At the width of a song you get a line every four bars; as you zoom the lines subdivide — bars, then beats, then eighths and sixteenths, down to sixty-fourths when you're looking at a single drum hit. Every line is a real division, so whatever you can see is something you could play to, and bar lines stay brighter than beats so you always know which is which.
Zooming in is what makes the transient strip worth reading. Editable beat markers appear only while Grid is open. The bar lines are the grid's claim and the ticks under them are what the audio actually did; a tempo a fraction out is invisible at bar 2 and unmistakable by bar 60. At whole-song width the ticks either side of a bar line are the same pixel — zoomed in, you can see which side of the line they fall on, and the beat lines come back as there is room for them.
A song arrives gridded. As soon as the stems are read, mix[flow] fits a tempo and a downbeat to the song, and fits a musical clock through the detected beats. The header shows one BPM beside Grid for a steady song and a range only for supported sustained tempo changes. Raw beat observations remain available for diagnosis. A half/double counting ambiguity says Check beat count and needs review before Play Sync. Manual grids stay as prepared; older analyses with no recorded algorithm need explicit review or reanalysis to adopt the new fitting. Whether the grid is right is a thing you hear and see rather than a number: open Grid, press Space, and watch whether the ticks in the warp lane sit on the bar lines all the way to the end of the song. Open Grid and the reading beside it says how much of the kit the grid holds — see below.
It listens to the kick, not to the whole kit. Separating the song is what makes that possible: the drums arrive on their own track, and filtering everything above 120 Hz off them leaves the one event in a mix that is short, loud and dead regular. The rest of the kit is still listened to for one question — whether a kick on beats 1 and 3 is a slow song or a fast one, which the snare between them answers.
Fitting the downbeat matters as much as fitting the tempo. If a song starts a quarter of a second into the file, every bar line is a quarter second late for the whole of it, and no tempo in the world fixes that.
Press Grid to check the song before mixing. The grid opens as a mode over the lanes you mix on — an amber toolbar above the stems, grouped find, bar 1, tempo and check, and the beat markers become handles. Nothing changes until you press Done or Enter; Cancel or Escape puts the saved grid back.
- Press Worst bar. The strip under the ruler shades every bar by how much further its beats sit from the kicks and snares than the rest of the song's do — the redder, the further off; a bar with a kick between the beats is not marked — and the button seeks and zooms to the worst of them; press it again for the next-worst, and round again after the last. Home goes to bar 1: check that it sits on the beat you expect to start counting from.
- Press Space. The drums play at the recording's original speed from the playhead, with a click on every beat and a higher one on each bar, and keep going to the end of the stem; the playhead follows. Space again stops it, and so does any correction.
- Let it run through the middle and near the end, or click ahead in the waveform and press Space again. A good start alone doesn't tell you whether the grid stays with the song.
- Drag a marker to its hit. A bar marker — one on a downbeat, the numbered ones when zoomed out — stretches the grid: the beats between the last point you set (bar 1, until you have set a nearer one) and the bar you are dragging spread evenly onto the new span, and every beat after it comes along by the same distance. So a steady song whose tempo is a fraction off is fixed by dragging its last bar onto its hit. A beat marker inside a bar moves that one beat only. Hold Command while dragging either to move every beat together, for when the whole grid is off by a constant. Option bypasses snapping to nearby hits. A focused marker also moves with the arrow keys: 10 ms, or 1 ms with Shift.
- Here, under bar 1, makes the beat nearest the playhead bar 1, and lands it on the kick or snare it is nearest first, when one is within a quarter of a beat; the other beats stay where they are. Hold Option to renumber without moving it. ‹ and › beside it renumber one beat at a time.
- Find beats finds the beats again on the drums and draws them over the saved grid. If you preferred what you had, Undo. The ▾ beside it lists the algorithms — the first is what an import uses — with Advanced… at the end, which opens the full beat analysis, every algorithm side by side, the transients and the sweeps.
- To type a steady tempo, click the tempo under tempo in the toolbar. It becomes a field; type a BPM and press Enter, and every beat is laid evenly at it from bar 1, deliberately replacing whatever tempo variation was detected. Escape or clicking away brings the reading back. The header tempo remains playback speed.
- If the tempo reads an octave out, or a 4:3 off — 91 for a record at 121, 122 for one at 97.6 — press ×2, ÷2, ×3⁄2 or ×2⁄3 beside it. The beats are re-counted at that rate, keeping the variation that was detected and bar 1 on its hit, and the share of beats on a hit tells you straight away whether the new count is the right one. Undo steps back.
The reading under tempo says whether it is right. It is the grid you are editing, not
the saved one: its tempo — 97.61, or 126–131 where it bends — and how many of its beats
have a kick or a snare within 25 ms, 82% on a hit, counted over the part of the
song that has drums. A kick between the beats costs nothing; that is the music, not the
grid. Drag a marker, renumber or find the beats again and both numbers move. A whole
song's ticks drifting off the bar lines is a tempo that is wrong; ticks sitting beside
them evenly is a downbeat that is.
Undo or Command/Ctrl-Z restores the previous action; a complete drag is one action. Done or Enter saves the timing edits. Cancel or Escape restores the original map. Unfinished edits stay temporary, including across autosave; switching tracks or reloading abandons them. Export is unavailable until Done or Cancel.
While the grid is open, dashed marks on the ruler are section changes the stems suggest: vocals entering or receding, an instrument arriving, the energy rising or dropping, the tempo moving. Hover one to read why. A section starts on whatever beat the change is on — nothing is rounded to a four- or eight-bar grid, so a vocal that comes in on the third beat of bar 33 is offered at 33.3, and a record that changes speed is offered a section where it does. Click a mark to cut there; leave it and it is nothing. Your existing cuts stay as they are.
Cutting, dragging and naming sections work exactly as they do outside the mode: double-click the ruler to cut, drag a cut to move it, double-click a name to rename it. The suggestions ignore very quiet activity and short fills; some musical changes will need your judgment.
Clicking the title or artist in the header opens the track's name, artist, album and cover, with the model that made its stems and Separate again. Fields save as you leave them. Starting a separation closes the dialog and shows the job's progress.
The bug button, joined to the Settings gear at the right of the header, opens Debug & experiments.
- Key detection inspects saved key estimates, uncertainty, coverage, source/version, competing scales and timed regions. These are diagnostic hypotheses, not confirmed key changes. Analyze missing keys previews and processes eligible songs one at a time; saved Unknown counts as analyzed. Enable Reanalyze already analyzed tracks to include them. Missing bass stems are skipped, and manual keys are preserved. Progress and errors remain visible; Stop after current track keeps the current result and stops the queue. Closing or switching tabs uses the same stop policy. Opening the panel or selecting a track never starts analysis or changes audio. See Bass pitch analysis for cache and evidence details.
- Beat analysis contains the existing grid inspection, listening, correction and export tools. Its Grid evidence workbench adds an RGB mix overview, stem levels and beat-to-hit offsets on the same timeline. Compare the candidate with the app's grid; Save comparison holds a copy while you try another run. Choose an onset tolerance and click a weak ten-second passage to inspect it. Agreement with detected hits is useful evidence, not proof of musical accuracy. Coverage and timing-distance columns expose problems that a single percentage can hide. Expand Reference accuracy to load an existing harness truth JSON for this track. It reports F1, continuity, missed/extra beats and timing/tempo/phase errors within the reference region, distinguishing manual annotations from known-tempo references. Download evidence saves the grids, detections and scores as JSON without audio. Comparisons and imported references last while this track's tab stays open; these diagnostics do not apply a grid or change any audio.
- Musical alignment is an audio proof of concept using the app's kept beat map. Choose a source bar range (end bar is exclusive), then Original timing, Recurring alignment every 4, 8 or another whole number of bars, or a Named section with a declared output bar count. Existing sections supply boundaries and a name; you still declare their output length. To use a revised analysis, press Take in Beat analysis first. Destination bar 1 starts at the selected source downbeat. Recurrences count from that start; a shorter final span keeps its musical length. Only required boundaries align, while timing between them keeps its proportions. Source audio outside the range is excluded. Render all stems creates real audio for original/fitted comparison, stem isolation, a destination click and repeat playback. Download each stem as a float32 WAV, or save the timing evidence as JSON. A fitted loop-restart counter helps watch repeated passes; manual seeks from the end to the beginning also count, so it does not prove gapless sound. WAVs never include the audition click. Configuration lasts for the open tab and does not change the app's grid, sections or main warp policy. This uses the existing varispeed export resampler: pitch changes with speed. The preview supports 4/4, ranges up to 120 seconds and speeds from 0.95 to 1.05; unsupported requests show an error. It does not smooth rate changes, correct unknown separation latency, or guarantee artifact-free audio or clean loop joins. Original timing copies samples unchanged. All stems share the same map and output length.
- Waveform lab compares three designs using the track’s actual decoded stems: a frequency-colored waveform, a stem-colored waveform, and a structure view showing the current sections and signal level.
Use Compare all to see the designs together, or select one for a larger view. Blue / RGB / 3Band changes the frequency view’s colors. Choose a section focuses all views on the same passage. The range buttons and Shift-scroll zoom; ordinary scrolling over the waveforms pans. Whole track returns to the overview. The stem activity strips below use the same colors as the stems.
Waveform lab's visual experiments show original audio before mixer settings and warp. They do not edit your track or export anything. Section names may still be analysis guesses, and the gold contour shows signal level rather than a judgment of musical energy. The track selector opens that track in the app too.
Switching tabs stops the previous experiment. Reset tab restarts the current one; closing and reopening remembers which tab you chose.
Choose the combined designs from Waveform lab’s View dropdown:
- Prism combines a frequency-colored upper waveform, a neutral lower waveform, and small source threads through the center.
- Threads traces the sources as fine colored paths inside the waveform. Three quiet strips show low, mid and high frequency activity.
- Emblems uses a thin spectral rim and sparse symbols for sustained source entrances and exits.
Prism, Threads and Emblems include the current sections, grid ticks, and a smooth signal-level curve. Use Read or a layer button to dim the other information; press the same layer button again to restore the full picture. Compare structured directions in the View menu stacks the three on the same time range. The original designs are still available there too.
Symbols identify the separated sources: ◇ drums, ● bass, ○ vocals, + other, △ guitar, □ piano. They mark measured activity, which can include separation bleed. Dashed section brackets indicate automatic sections; solid brackets indicate a section set that includes edits.
G · Aurora takes a more psychedelic direction: broad rainbow ribbons swell with the stems, fold into fine contours, and catch glints from the higher frequencies. It opens by default. Source names sit inside the ribbons and sections sit quietly above them. Ribbon thickness follows softened stem level; the shifting dyes, glow and wandering center are artistic choices. Time still runs left to right, with the same zoom and section controls. The composition is static, with no independent animation.
Three more artwork views explore different ways to organize the same track:
- H · Disco Lasagna al Dente gives every stem a clean horizontal stratum. Its color identifies the source, its thickness follows level, and the mix spectrum changes the light. Saturated bodies and bright centers emphasize energy. The Layers menu offers Stems, Collapsed RGB, Compare both, or Pocket studies (the default). Collapsed RGB draws the combined audio as one peak silhouette with a luminous RMS center: red for lows, green for mids, blue for highs, with upper frequencies emphasized for color contrast. Both views share zoom, pan and section focus. Stem thickness is scaled per source; the collapsed shape uses the combined track's peak scale. Pocket studies compares slim 48- and 24-pixel-high waveforms and tiny library previews at 160, 96 and 64 pixels wide by 32 pixels tall. Each preview has a colored V/D/B/G/P/O strip for available decoded stems; dashes mark absent stems. The tiny previews always show the whole song, while the slim strips follow zoom and pan. These are library design studies within the lab, not replacements for the current library display.
- I · The Listening Garden grows one cluster per musical bar. Each source is a different plant: level controls height, lows grow roots, mids grow leaves and branches, and highs flower.
- J · Electric Delta draws stems as stable electrical rivers. Level changes their current, downbeats travel as pulses, and section boundaries connect them through buses.
They all keep time moving left to right and work with the same whole-track, zoom, pan and section controls. Their ornament is expressive; the dimensions described above come from the decoded stems and current sections. None changes the track.
Debug & experiments → Waveform rendering opens the Design browser. Use the workspace switch beside the track selector to move between designs and the bench. Choose Collapsed RGB in the Preset menu, or browse ten vector adaptations of the waveform experiments. The Design browser opens with one large waveform. Preset, Paint, Ribbons (where applicable), and the range controls stay in the compact top strip. Controls reveals all the detailed rendering settings, Evidence shows or hides the aligned section metrics, and Notes opens the technical explanations. Fill view is the new default height; fixed 24, 48, 160 and 320px sizes remain under Controls. Changing these panels does not reset your rendering choices or the current time range.
Under Controls, combine Geometry, Color and Paint, change curve detail and height, or enable Compare presets to see all ten together on one timeline. Sizes include slim 24- and 48-pixel versions. Sections and source entrances can be shown independently. RGB shows frequency balance; source colors identify stem layers; rainbow is decorative. The measured RMS core in the collapsed mix is distinct from the peak outline. Stem layers use per-source scaling. These are design adaptations; the garden artwork remains in Waveform lab, and the browser does not replace the main app's waveforms.
Melt · source pigment is a softer flowing stack: two passes of eight-second smoothing reveal larger phrases, with fewer curve points keeping the ribbon fluid. Colors stay solid within each layer; tight color blends follow the same vector curves at their boundaries, inside a crisp outline without blur. Separate stem lanes keep solid fills. Pink follows vocals, violet bass, gold drums and mint other. A shared scale retains relative stem levels, so louder sources occupy more space. The original detailed stack remains available through the other paints.
Silk · woven light turns the song into a folded sheet of fine colored lines. Stem energy controls its breadth and the proportion of each source color. Folds and lighting add decorative depth, rather than showing audio phase. Paint offers Filaments or Solid silk; the three color palettes and compact sizes still apply. A fold can appear narrow even during a loud passage, so use the other views to inspect amplitude precisely.
Arrangement fullness in the ribbon Shape menu balances spectral coverage and sustained stem participation, making dense arrangements larger even when compression keeps loudness nearly constant. Quieter stems receive gentler visual scaling so loud drums do not dominate as strongly. Loudness restores the previous sizing. The evidence strip puts spectrum coverage and stem participation directly below each section on the waveform’s timeline, and follows its zoom and pan. Open Section measurements · full table for exact section values and measured RMS. These are experimental proxies: broadband drums and separation leakage can affect them, so they are useful comparisons rather than objective intensity scores.
Silk · stem ribbons keeps each source in its own consistent color. Ribbons switches between Overlaid and Separated, retaining the same folds and musical timing. The overlaid silhouette grows with combined stem energy, with exaggerated contrast between sparse and full passages while retaining source proportions. All overlaid ribbons share one centerline, including through their turns. Each ribbon turns fully over at a section transition. Turning points stay aligned when section labels are hidden; a narrow fold marks a boundary, not silence. Tracks without section transitions have no automatic turns. Source energy also affects opacity. In the overlaid view, try Normal, Screen, or Additive blending. Energy forward puts louder sources in front with Normal blending; Source order keeps a fixed layering order. Screen and Additive brighten intersections regardless of order. The separated view labels each source when there is room. The preset starts with Pearlescent and Normal blending: shaded source-colored surfaces with narrow highlights along the folds. Solid silk and Filaments are also available in Paint. Highlights are part of the surface, without a blur filter.
Under Performance bench, Track stems shows the song's actual stems in mixer order. Names and colors follow the source audio. 6-lane stress test may repeat stems to measure drawing cost; these rows explicitly say (copy).
A silent, interactive preview of a future play view lives in widget bench → Play →
Four-deck mixer. In the separate Widgets repository, run
npm ci then npm run dev and open the widget bench.
It uses fictional tracks and waveforms and is not yet a view in mix[flow].
Four waveforms span the width above decks A, B, Master, C and D. They share a 32-bar ruler and smooth animated playheads. The wider center strip centers its global controls, with wider button groups, effect selectors and crossfader using the available space; its trim/EQ and output controls align with the decks. Collapse the bench sidebar with the top-left button to use the full browser width. The choice is remembered. Narrow panes scroll horizontally; the compact launcher uses 24-pixel rows.
Press a section name to jump all four stems to a hot cue, or a stem cell to loop that section. For example, keep drop drums while switching to a verse vocal. Lit cells show selected sections. The deck Stop stops all its stems; individual stop buttons affect one stem. There are no mute/solo buttons: stop the other stems to play one alone.
The master controls provide:
- Run/Pause and Stop. Pause holds position and pending choices; Stop clears selections, queued changes and deck loops, and resets the clock.
- BPM and 1 bar / Now together. While running, 1 bar queues launches and deck stops for the next four-beat boundary. Now applies them immediately. Pending changes show a clock symbol. Switching to Now applies any pending choices.
- FX A / FX B selectors, defaulting to Delay and Reverb. Echo, Chorus and Flanger are also available. These select UI settings only; no audio effects are processed.
Each deck has In / Out below its launcher to capture a preview loop for that deck. Exit loop resumes progression; Reloop returns to the retained region.
Playheads and output meters update on animation frames, while the master clock displays whole beats and measures. Meters have smooth attack and release. This is simulated motion and output, with no audio playback.
Each strip has FX A / Filter / FX B knobs. Below them, each deck places stem volumes on the left, a wide fader and output meter in the middle, and Trim/High/Mid/Low on the right. Master output sits beside the matching trim/EQ controls. Trim spans −12 to +12dB. Levels, trim and crossfading affect the illustrative meters; sends, EQ, filter and Cue retain settings for exploring the layout.
The routing row groups Phones (headphone monitoring), A/Thru/B assignment and Full. A and B assign the deck to a side of the center crossfader; Thru bypasses it. Full selects the original unseparated track and disables and dims stem launchers, stops and volumes. Use section-name buttons to select its section and deck Stop to stop it. Enabling Full takes the first selected stem section, or remains stopped if none is selected. Turning it off restores the saved stem selections and levels. Source changes are immediate; section launches retain the chosen timing. Reset tab restores the whole example.
The master FX selectors include their A/B labels inside the dropdown face (A · Delay, B · Reverb), so both controls span the same width as the other master control groups.
Use Theme beside the experiment tab to open the live theme editor. Choose Current favorite, Soft studio, Night stage or Porcelain, or press Randomize to reroll the entire palette, assigning fresh hue families to stems and deck pairs while reserving green for signal. Select a role and drag or type its Hue, Saturation and Lightness values. Edited palettes appear as Custom. Theme changes preserve the mixer settings; Reset tab restores the initial theme and mixer.
The roles are Primary, Signal, Drums, Bass, Other, Vocals, Guitar, Piano, Left decks and Right decks. Primary remains nearly neutral and supplies selection, fader, trim, EQ and FX colors. Signal stays green. Stem colors belong exclusively to launcher buttons and level knobs. Labels above stem knobs and launcher columns use a muted tint (45% stem ink blended with the caption gray), preserving identity without the brightness of the control fill. Manual edits that put a stem hue close to another role show a warning; randomization spaces the base hue families apart. Saved presets preserve the chosen colors, even where a warning flags a close pair. Check the visual result as well: the warning measures hue proximity, not every possible perceptual clash.
Each deck pair shares lightness and saturation, with B/D shifting gently warmer than A/C. Current favorite preserves the manually chosen role colors exactly. Waveforms use quiet tints; deck letters and narrow identifying edges carry the stronger color. These identities follow physical positions rather than crossfader assignment. FX uses subdued labels and the primary accent for changes, with no separate identity colors.
EQ rings are unfilled at 0dB and show cuts/boosts from zero, like trim and filter. Stem levels and faders always show their level. Output meters are green. Faders and meters have accessible names without visible captions. Theme settings are temporary and reset when leaving the Play room or resetting the tab; other apps are unaffected.
The theme editor also has Roll hue, Roll sat, and Roll light for the selected role. Each changes only that component. Hue rolls seek a separated hue family; primary stays nearly neutral and signal stays green. Saturation and lightness rolls use restrained ranges; manual fields remain available for wider experimentation.
Four live sliders control deck variation: B/D warmth offset (negative cooler, positive warmer), B/D saturation offset, B/D lightness offset, and Waveform color strength. The first three change B/D relative to the A/C base colors, together for both pairs. Strength controls how much deck color appears in all waveform fills. Reset variation restores warmth 8, saturation/lightness offsets 0, and strength 65%. Presets now include variation: selecting one restores its saved offsets and strength. Rolling role colors preserves variation; Reset tab resets everything in the bench.
The bench now renders a reusable, controlled mixer face through a separate preview adapter. The layout and interactions are unchanged: it still uses fictional audio data and produces no sound. Playback simulation stays in the bench; this also runs inside mix as the Play view described below, driven there by real audio.
Open Settings in the header and choose Theme for the same role editor used by the widgets bench. The wider Theme section puts palette/color editing on the left and waveform/deck variation on the right, fitting desktop windows without scrolling. Theme edits apply and save immediately; no audio restart is needed. Color-conflict callouts use a distinct info color. The initial Current favorite palette is shared with that mixer example. Selecting a preset or editing a role updates library badges, stem controls, waveforms and app selection states together, including paused waveforms.
Mix remembers the complete theme, including deck variation, across reloads. Theme changes preserve the loaded track and playback settings. The bench remains a separate, temporary preview: its edits do not overwrite mix's saved theme. Choosing Current favorite in mix restores the original palette and its variation.
Guitar and Piano remain editable even when the loaded track has only four stems. Deck variation controls the paired colors in Play; it does not change the stem lanes in Prep.
Use the Prep / Play buttons immediately to the right of the mix[flow] logo: Prep opens stem separation and the single-song editor; Play opens the four-deck DJ mixer. The app starts in Play, with its button selected. The selected button is highlighted. The logo no longer switches views or changes highlight. Press Tab to switch views from the keyboard. The library sidebar stays in place. Switching pauses the outgoing view locally and releases its Link connection; it never automatically starts the incoming view. Returning retains loaded decks and settings until the window reloads or the library folder changes. Tab in editable controls/dialogs keeps normal navigation.
Drag library tracks onto deck strips or waveform rows. These internal drags do not show the separate file-import overlay. Loading and replacement are drag-and-drop only, and never start playback. Each deck loads independently. Errors appear below its launcher; another drop retries. Reload a deck after changing saved sections or its beat grid in Prep. Unseparated tracks start in Full mode. Six-source tracks include guitar and piano; unavailable stems stay disabled.
Full switches between the original recording and separated stems. It is disabled on empty decks and when no usable stems were loaded. Original-only tracks still play normally; a stale library listing cannot switch them into an empty stem group.
The header’s 1× (Normal speed) button clears an explicit speed adjustment and returns the current leader to native playback at its current musical tempo. It is disabled without a playing gridded leader or while Link owns tempo. A sole playing deck is the leader regardless of how many other decks are loaded; at normal speed its original audio plays unchanged, even if Sync is armed. Starting a follower with Sync on matches tempo and beat phase. Stopping the former leader leaves the remaining deck at native speed unless you explicitly adjusted that deck's tempo. Q controls marker snapping and 2 bars is a quick-loop size; neither controls Sync correction or stretching.
Without Link, the transport stops advancing when the last deck pauses, stops, or reaches the end. A playing deck at zero volume still counts, and held Cue auditions keep the clock running until release. Starting a deck again resumes it; finished sources restart at their first beat. With Link enabled, stopping the decks leaves the shared transport running. The explicit top Pause and Stop controls keep their usual behavior.
To bring a second track into an ongoing mix:
- Start a prepared deck. Without Link, it becomes the timing leader at its own tempo.
- Load another deck and use Phones to preview it without changing the audience mix.
- Enable Sync on that deck and start it; it follows the leader rather than retiming it.
- Launch sections or loops on synced decks at the next bar. Stems can keep different section positions while their beats align.
- Use Fit to inspect the whole source, or scrub while playing to reposition it. When the leader stops, the next playing deck takes over timing.
The header places two groups beside the logo: Prep/Play on its own, then Link Audio, Local audio, and Play's Preserve pitch together. Both stay left-aligned, separated by the same 8px gap as Transport and Timing. Preserve pitch uses a compact note-and-lock icon, with its name and explanation in the tooltip; all three audio toggles have the same icon-sized footprint. Prep/Play selects one view; the three audio switches remain independent toggles. Link status and Prep's linked-only Link pins follow in the same group. Transport contains play/stop, tempo and position (plus the track loop in Prep); Timing contains launch timing, marker quantization and quick-loop length in Play. Transport and Timing sit together with a small, consistent gap. All retain their existing shortcuts and availability. Settings stays on the right. On narrower windows, Transport and Timing move to a second row to keep the controls readable.
Buttons, header groups and album artwork share the same small corner rounding. Joined button groups keep square internal edges and one rounded outer outline; header buttons use the same surfaces and active styling as other controls.
Play/Pause and Cue retain their colored labels while inactive. When Play is running or Cue is held, their filled buttons use contrasting labels so the icon and CUE remain readable.
- Each deck has Play/Pause, Cue and Sync at the bottom. Play resumes from the current position. Cue during playback returns to the stored cue and pauses. While paused elsewhere, Cue sets that position; at the cue point, hold to audition, release to return. Audition starts immediately even against another running deck. Press Play while holding Cue to continue: with Sync on, the latch aligns to the running beat reference; with Sync off, it preserves the audition’s timing. Releasing Cue after latching keeps playback running.
- Sync matches the timing leader’s musical tempo and beat phase. Preserve pitch defaults on and keeps the original pitch while changing speed. Turn it off for vinyl-like speed/pitch coupling; it does not match another song’s key. Ongoing correction gently changes speed instead of pulling each drum hit onto a grid. Cue, launch and deliberate scrub alignment still happen as separate actions. Without Link, the first playing deck with a saved beat grid leads; loading or syncing another deck never changes its tempo. The header shows the current playback tempo and retains it while stopped. A LEADER label identifies the deck. When it stops, the next playing deck leads, returning to native speed unless it has an explicit tempo override. Unsynced decks play at recorded speed, and phrase positions remain yours to choose. Link supplies external tempo/phase when enabled.
- The header Play/Pause (or Space) controls all loaded decks. Stop stops them, returns them to the beginning and clears section selections and captured loops.
- A section name acts as a hot cue for all sources and continues playing. A stem cell loops only that stem to the next section boundary. Without sections, Track plays the whole source once. Launch timing explicitly chooses Now, Next beat or Next bar, with Sync off, and shows a queued indication. With Sync on, launches wait for the next leader bar (four beats). Stop cells are immediate; the first-column Stop stops the deck.
- Full switches between the original track and separated stems at the current source group. It pauses playback and preserves each group’s independent positions, loops and Cue checkpoints; the original starts from focus only on its first use.
- Stem volumes and channel faders default to 100% = unity gain. Zero is silence. Use Trim for boost. EQ rests at 0 dB; Filter is neutral at center, low-pass to the left and high-pass to the right.
- Crossfader assignments A / Thru / B choose left side, bypass, or right side. Both sides are audible at center. The meters show actual output; manage headroom with trim when summing tracks. There is no automatic gain matching or limiter.
Phones is separate from transport Cue. It monitors before the channel fader and crossfader. A multichannel output uses channels 1/2 for master and 3/4 for headphones; Link Audio also exposes Phones as a named feed. Stereo-only hardware reports that separate headphone routing is unavailable. Settings → Audio selects the shared interface; headphones use that same interface rather than a second device.
Each FX slot has an HP knob beside its other two knobs, at the same size as the send knobs below. It sets the high-pass cutoff for the signal entering that effect: Off, then 20Hz–2kHz in small logarithmic steps, at 12dB per octave. The readout shows the frequency. Double-click resets to Off; keyboard arrows adjust one step. Dry bass and existing tails stay unchanged; Tone still darkens the wet sound. Cutoff changes and transitions to/from Off are smoothed to avoid abrupt jumps. Each slot remembers its frequency across effect changes and app reopening. Existing High pass On settings become 200Hz; Off stays bypassed. Adjusting A does not change B.
FX A and B are shared wet returns. Each selector and its three knobs form a lightly shaded group: Delay/Echo use Feedback and Tone; Reverb uses Decay and Tone; Chorus uses Rate and Depth; Flanger uses Rate and Feedback. The channel FX A/B knobs send post-fader sound to those returns. The master sends use the dry combined deck signal. Delay is one beat and Echo a dotted eighth. Settings are retained per slot/effect for this window; changing effect lets its previous tail decay. Group and individual FX switches stop new send input while retaining settings and existing tails. The group indicates remaining tails; Clear tails explicitly cuts them while the group is off. The group FX button sits at the bottom beside Phones. Click to bypass/enable; right-click, Shift-click or Shift+F10 on FX opens tail controls.
At narrow widths, the loop controls below each launcher use two rows: In, Out and Exit/Reloop above the paired halve/double, move back/ahead and quick-loop/settings controls. Wider layouts keep one row. All buttons keep their normal height. Quick loop and its ··· settings button are joined, with separate actions and keyboard focus. Play, Cue and Sync below are square buttons; stacked beat jumps sit beside them. The master has a matching separator between FX/Phones and the crossfader. The loop ··· button opens loop target and Slip settings. Choose Loop target: Active stems / Focus only to address the combination or one source. In works paused or playing, sets Cue and marks a new loop start. Out marks the end and repeats. Q snaps Cue and manual markers to a chosen saved-grid division; it is separate from launch timing. Quick loop uses the chosen beat length: 16 beats = four bars in 4/4. Half/double retain In; move shifts the region by one beat; In/Out ± edit the boundaries. Invalid regions are rejected together. Loop edits leave Cue unchanged. Exit loop continues from each audible position and keeps the region for Reloop. Reloop returns to In and stays paused if paused. With Sync on, loop entry, Reloop and region edits wait for the next leader bar; the deck reports the queued loop. Regions snap to whole beats, at least one beat long. Sub-beat quick loops are available with Sync off. Exit remains immediate. With Slip loops, each source’s hidden position keeps advancing during looping and Exit rejoins it. Pause, Cue, Stop or Full switching ends that background history. Slip applies only to loops.
A section-name hot cue clears old loop regions and launches all sources. Stem pads remain independent: drums can loop one section while vocals and bass play other sections.
The source-name chip on a loaded waveform opens focus, group movement and zoom settings. Its Focus selector chooses the displayed source and focused Play/Cue controls. It defaults to drums and stays where you put it. Drag relatively while playing or paused; pointer-down does not jump. Move active stems explicitly moves the combination by the same beat distance, retaining offsets. Playing stems keep playing; paused stems stay paused. Escape or a cancelled drag restores starting positions, loops and playback states. Arrow keys move 1/8 beat; Shift+Arrow moves one beat. Zoom changes the visible span. Dragging exits addressed loops and Slip backgrounds but preserves saved regions and Cue. The always-visible Fit button shows the entire focused source, including audio before its first downbeat. The waveform stays fixed while its playhead moves. Press Fit again, or use zoom controls, to return to a scrolling view.
Each deck has stacked ↑ / ↓ buttons beside Sync. Up advances participating stems one saved-grid beat; down rewinds one beat, preserving their beat offsets and each source’s playing/paused state. Before first Play all sources participate; later, stopped stems stay untouched. Full mode moves the original. Cue stays unchanged. Jumps exit addressed loops but retain them for Reloop, discard their Slip backgrounds, and cancel queued launches for those sources. They jump from audible positions. If any participant would cross the audio start or reach within 1ms of its end, the whole jump is rejected with a deck message. A saved grid is required; held Cue and waveform moves block jumps.
Deck Cue remembers the combination’s separate positions, playing participants and loops, without storing mixer levels. Focused Cue remembers only that source. Play resumes exact positions with Sync off; with Sync on, playing followers align to the leader’s beat phase while keeping stem offsets. After a scrub, Sync remains on and reacquires phase automatically; you do not need to toggle it. Switching between native playback and Sync overlaps the two audio paths briefly to avoid cutting the old sound off before the new path is ready. Hold Space on Cue to audition and press Enter while holding to continue playback. Releasing outside Cue also ends the audition.
Waveforms show measured focused-source audio, source/deck Cue markers, loop bounds and other source positions. Slip adds the advancing background marker. The saved beat map includes audio before the first downbeat and tempo changes. Spectral shading measures low/mid/high energy before mixer controls; deck identity remains on labels and edges.
Phones at the bottom of the master opens its level and blend panel. Phones level is independent of master. Cue / Master blends selected pre-fader decks (0%) with master output (100%), sharing the same clock and output interface.
Link Audio in Play shares loaded deck outputs, Master and Phones and follows shared tempo/transport. Enable Sync on decks that should follow the beat. Local audio remains independent and is muted when sharing is enabled to avoid doubling the monitored sound. Changing the set of published decks recreates the feeds, so check the receiver routing. Live peer routing, four-channel headphone hardware and physical iPad dragging still need end-to-end device validation.
Cue behavior follows AlphaTheta's player conventions. The stem/section launcher remains mix[flow]'s own workflow.
Click Settings in the header in either Prep or Play. Its Audio section chooses the output interface, processing sample rate, and latency preference. The sample-rate menu lists the rates reported by the selected interface, including higher rates where available; a device reporting a continuous range offers an editable Hz value. Device default remains an option. If the interface cannot be identified, Settings says so rather than inventing its rates. A rate supported by the interface can still be rejected by the app’s audio engine at Apply.
Low favors performance; Balanced and Stable favor more buffering. The dropdowns show active sample rate, output channels and reported latency alongside their choices. Hover over Output interface or Latency for routing and the processing/output latency split.
Apply & restart audio saves the settings for this machine, pauses both views and disconnects Link Audio. Loaded tracks, positions and mixer controls are kept. Press Play and reconnect Link Audio when ready. Wait for a Prep track to finish loading before applying; a deck still loading during restart needs to be dropped again. Closing the dialog without Apply leaves audio settings alone. Switching to Theme preserves draft audio choices; theme edits save immediately. Use defaults, at the right of the bottom action row, changes the choices in the dialog; Apply commits them.
The refresh icon beside Output interface checks for connected interfaces. Some browser hosts expose only the system output; where available, Choose device… opens the browser's output permission chooser. An unavailable device reports an error before current playback is changed. Master uses output channels 1/2; separate headphones use 3/4 on a multichannel interface.
These controls configure the app's processing, not every Core Audio driver option. Exact hardware buffer sizes, hardware clock source and aggregate devices remain in macOS Audio MIDI Setup or your interface's driver.
Open Theme to choose Waveform style: Spectral or Deck color. Spectral mode has RGB, Prism, Aurora, Ember, Warm and Ice palettes. Prism uses the captured Clean waveform treatment: an opaque frequency-colored fill and a white edge. Select Low, Mid or High to edit that frequency band's hue, saturation and lightness, or roll each value individually. Spectral color strength makes the colors gentler without changing waveform height. Deck color mode uses the existing deck tint and its Waveform color strength control.
Changes apply immediately to loaded waveforms, even while paused, and are saved with the app theme. Existing saved themes retain their palette and default to RGB. Spectral colors describe frequencies, not stem identities; the identity Randomize button leaves the spectral settings alone. These settings affect Play's full-track waveforms and saved library waveform previews. Library previews update immediately without reloading the track or rereading analysis. Their brightness is gently reduced to sit alongside the library text; this does not dim deck waveforms or change the chosen palette. In Deck color mode they use a neutral color because library rows have no assigned deck. Choosing a palette preserves the selected waveform mode.
Prism in V2 and the production Theme selector share the captured Custom settings: smoothness .35, detail 2, height .86, strength 100, RGB hue, saturation 100, lightness 50/46/46, opaque fill, curve 2.114115, white edge .8788055, and low/mid/high balance .85/1/1.8. V2 shows both representations; Play retains its blended waveform. This preset update does not reset your saved Custom settings or change audio crossovers.
Play retains finer peaks from the existing saved scan, so zooming reveals short attacks, decays and gaps instead of stretching coarse lobes. The drawing follows the visible zoom without changing playback timing. Tracks already loaded before this update gain the finer reading on their next normal load; the current session is not reset automatically.
Aurora and Ember are available in production Theme settings too, with their reviewed Vivid treatment: violet/green/cyan for Aurora and orange/magenta/blue for Ember, translucent frequency fill, colored edge and dark backing. Library miniatures use the chosen colors, frequency balance, contrast, opacity and backing immediately; their compact column shape remains suited to browsing. Selecting a style does not reload cached analysis or change playback.
Click the title or artist in the header to open Track Details; the same control works with Tab and Enter/Space. The header uses compact icons with tooltips: the magnet marks Snap, the grid opens Edit beat grid, horizontal stretch arrows toggle Warp, the arrow leaving a tray opens Export, and the gear opens Settings. Controls share one height and even spacing above and below. Track names, tempos and positions stay readable as text. In Play, transport, timing and audio groups spread evenly through the center space between branding and settings. Joined controls stay together; narrow center regions can scroll. Debug and Settings share a joined button group on the right.
Native-speed loops smooth their wrap with a short crossfade while retaining the loop length. The blend uses up to 4 ms of neighboring audio on each side of the boundary; it does not move your loop markers.
In the waveform source menu, Full track (original) displays the original mix even while stems are playing. It does not switch the audio to Full mode. Positioning and Play/Cue still follow the focused stem named in the menu. Choose a stem to return to its waveform; Fit independently shows the entire duration. Secondary stem markers appear only when their positions differ and are visible, with separate labels.
Move active stems together is on by default for newly loaded decks. Launching an individual stem cell unlocks the waveform menu option to move only the focused stem. A whole-track Hot Cue restores grouped movement and locks the option again. Grouped moves preserve relative offsets and leave stopped stems stopped.
The launcher separates Hot cue from the individual stem cells. Hot cues jump the whole track and play through; stem cells loop independently. The top playback tempo always shows a value: 120 BPM initially, then the last engine tempo after pause, stop, natural end or unloading. Link supplies this value even while stopped or without peers. Loading a track does not retime it; starting a native leader establishes that track’s mapped tempo. Once a leader is playing, the header tempo is editable. Adjusting a native-speed leader enables pitch-preserving Sync and changes its tempo; synced followers follow it.
New decks show Full track (original) by default, with a neutral source selector. Choose a stem in that menu when you want its waveform. Fit still controls whether the entire duration is visible.
Empty-deck drop guidance appears in the header and waveform label. The area above the loop controls is reserved for loading, operational messages and errors.
The Hot Cue column is separated from stem cells by a padded vertical divider.
The master strip shows separate L and R output meters instead of an additional level fader. Use master Trim for overall level adjustment.
Trim and the EQ knobs use one uninterrupted stack with no divider between them.
The first stem label and Trim label align across the channel controls.
Play, Cue and Sync are larger squares matching the full height of the paired beat-jump arrows. The channel columns share a top alignment.
Channel and routing sections retain balanced spacing above and below their controls.
The deck routing buttons sit between dedicated separator elements, outside the row’s equal top and bottom padding. The separators are not borders on the controls.
Routing and transport share footer columns: headphones align with Play, A/Thru/B spans Cue and Sync, and Full aligns with the beat arrows. A and B remain square; Thru flexes into the remaining width.
At full height, each deck’s mixer and FX/filter sections share the centered width of the routing and transport controls below. Extra window width stays outside those controls. Compact Play keeps the full deck width for its staggered knob columns.
Faders and meters fill the channel height, sharing a flexible track row above their readings. Fader drag distance follows the current track size.
Six-stem controls use two staggered columns across the full channel height. Drums anchors the top left and Piano the bottom right; the opposite ends use flex spacers equal to one fifth of the height remaining after a knob row, so all six knob centers advance in equal vertical steps as the channel height changes.
A small, muted waveform icon occupies the empty corner beneath the left stem column. A faint right-angle zigzag connects Drums through Piano behind the controls and readings. Both decorations ignore input.
FX A and B divide their section into equal-height halves. Their headers retain equal side spacing. Bypass and dropdown join inside one shared outline, with a single internal divider and no extra rule across the effects panel.
A dedicated separator divides the equal FX halves. Each header and its three-knob row are vertically centered together, with balanced space above and below. The master monitoring row uses the same separate dividers and balanced padding as deck routing. Its crossfader fills the bottom row to match the transport buttons’ height.
Mixer separators are dedicated elements in both orientations. Each owns a one-pixel stroke and six pixels of non-shrinking margin on either side, governed by one shared spacing token. Section wrappers keep that clearance outside the controls; the Hot Cue grid reserves the corresponding gutter. Compact mode changes that shared margin to five pixels; it never collapses. Each Play deck keeps at least 260px of width and grows to fit its controls when needed. The fader ranges from 88px down to 66px (75%), while L/R meters retain their width. The gaps between fader and meters match the adjacent separators’ side clearance. When the mixer cannot fit beside the library, scroll it horizontally to reach the remaining decks; the library stays visible.
Compact Play layouts stagger both the stem and Trim/EQ controls into two columns, keeping normal-size knobs and their readouts. The shared knob stack distributes controls evenly between opposite spacers. Six-stem decks retain their connector and waveform icon. Effects controls also retain their normal size and readouts.
The FX/filter row takes its height from its knobs; it has no fixed-height track or additional vertical padding beyond the shared separators.
Display text cannot be selected accidentally while clicking or dragging around the app. Search, numeric text editors and other editable fields still allow normal text selection. Knobs show the standard rounded control focus frame for keyboard use, without an oval or a persistent ring after pointer selection.
Library Reset, Recent and Import use the same shared control faces and height as the header. Disabled actions remain visible with a single dimming treatment. Table headings have a slightly lighter background and clearer text. Empty decks and tracks without a known BPM omit their deck BPM label; the top playback tempo remains visible.
The four-track waveform overview meets the surrounding section boundaries without empty bands above or below. Its border and the dividers between tracks remain visible.
The opt-in Launchkey controller prototype connects a selected MK4 DAW pair to deck gains, FX controls, beat jumps and loops through Debug → Controllers.
In Debug & experiments, Waveform V2 lets you tune the shared production waveform renderer on the decoded stem sum. Three-band shows low/mid/high frequency layers; Peak spectrum blends the same frequencies inside the same peak shape. Neither has a bright RMS center. These colors describe frequencies, not separated stems.
Low / mid crossover and Mid / high crossover set the frequency boundaries for both previews. They remeasure the decoded audio, so changing them changes actual band energy rather than recoloring the old bands. The broad filters overlap near each cutoff. Controls stay ordered and below the audio's Nyquist limit. Reset crossovers returns to 250 / 2500 Hz for ordinary sample rates and leaves your visual settings alone.
Analysis starts after a brief pause in editing. The last completed image stays visible; Preview crossovers shows the values it currently represents while the measuring message is shown. Longer recordings take longer to remeasure. These settings are saved separately and affect only V2, without changing audio playback or production waveforms.
Vivid peaks is the starting look: the earlier experiment's saturated colors, translucent fill and bright matching outline, applied only to the ordinary peak shape. It has no inner energy contour. Under Palette & layer balance, Fill opacity and Color contrast tune that finish; color contrast does not change peak height. The earlier experiment stays available below for comparison. Existing production waveforms remain unchanged while you tune this preview.
Start with Vivid peaks, Topology A, Rekordbox inspired, Denon inspired, Traktor inspired or RGB, then adjust Smoothness, Detail, Height ratio, and Color strength. The reference presets suggest familiar information layouts using our styling; they do not reproduce the other products' proprietary analysis. Palette & layer balance opens per-band hue, saturation and lightness, low/mid and high/mid proportions, and edge brightness. Reset style restores Vivid peaks. Your visual settings survive reloads and track changes; production defaults and audio playback are unaffected.
Three additional opt-in palettes are available: Prism for the captured Clean RGB waveform, Aurora for violet/green/cyan, and Ember for orange/magenta/blue. They change only when explicitly selected. Prism is the suggested starting point for more rainbow variation; bass-heavy material still naturally favors its low-frequency color. These are frequency-driven color choices, not decorative rainbow patterns. They do not change crossovers or production defaults.
The compact previews use the current Play deck lane height (72px fallback), shown below the rows. Larger view adds 220px versions. All rows share source time and a fixed whole-track peak scale. Scroll to pan, Shift-scroll to zoom, or use Whole track. Smoothing changes the curve between measured points; it does not create new audio detail.
Stem activity adds separately labeled strips in the app's stem colors, with RMS brightness from −60 to 0 dBFS. The earlier bright-center experiment remains under Legacy RMS experiment. Original Waveform lab and rendering experiments are unchanged. This comparison does not start playback.
Deck panels A–D share the master strip’s background color. Deck accents, keyboard focus and highlighted drop targets remain distinct.
Each Play stem knob reads −∞ dB at mute, 0.0 dB at unity and up to +6.0 dB. Reset returns to 0 dB. Existing saved gain values keep the same volume. Deck and Master Trim both span −24 to +12 dB, with 0 dB as their reset.
The complete master mix, including FX returns, passes through a stereo-linked limiter before the main hardware output, published Master and recording taps. The final headphone cue/master blend has a separate limiter before headphone outputs and Phones publication. Both use a −1 dBFS sample-peak ceiling, preserving normal below-threshold dynamics without makeup gain. Sustained overload still reduces dynamics.
The master limiter adds about 5 ms. Cue is delayed to match master before blending, and the headphone limiter adds another 5 ms: about 10 ms total for headphones. Individual published decks remain separate and unlimited; keep those feeds below clipping at the receiving boundary. These are sample-peak limiters, not true-peak protection or a guarantee against distortion inside an effect.
Every deck groups the loop move-left/right buttons together, and halve/double in a separate group. The bottom beat-jump arrows form their own group. Their actions and availability are unchanged.
The header shows one position display, defaulting to beats. Click it or focus it and press Enter/Space to switch between bar.beat.sixteenth and elapsed minutes:seconds. The display keeps its width, remembers the choice, and never starts, stops or seeks playback. Its tooltip and accessible label name the current and next display.