Undo Is a Graph: Branches, A/B Compare and Never Losing a Take
Most editors keep one undo stack and drop the future when you edit. edytlab keeps a graph, so a take you stepped back from is still there to hear, compare and return to.
In a conventional editor, undo walks a stack, and the moment you make a new edit the steps ahead of you are gone. That is fine until the take you stepped back from was the better one. edytlab keeps your history as a graph instead, so stepping back and trying something else never costs you the thing you stepped back from.
One edit, one node
Every change the assistant makes, whether a fade, a filter or a time-stretch, adds a node to the session graph, parented on the version you were on. Your original files are never modified. A node records the state of the session, and an edit that changes audio writes new audio next to the originals. A node's id is a hash of its state, so it names that state and nothing else.
Undo and redo move a pointer
The version you are on is called the head. Undo (Ctrl+Z, or Cmd+Z on macOS) moves the head to the parent of the current node. Redo (Ctrl or Cmd+Shift+Z, or Ctrl or Cmd+Y) moves it forward again. Nothing is deleted either way; only the pointer moves.
The interesting part is what happens next. Make an edit after an undo and the new node hangs off the older one, which is a branch. The take you stepped back from is not discarded. It is a sibling, still in the graph.
See the graph and name the good takes
Open the Graph tab to see every node. Click a node to look at that version. Right-click for Set as head, Compare with… and Rename. Delete is listed but disabled for now, because nodes are content-addressed and there is no safe way to remove one yet. Names are worth the few seconds: “before reverb” and “tighter fade” are easier to find than a hash. You can also ask the assistant to label a version:
That is name_node. It changes the label and nothing about the audio.
Branch on purpose
Branching happens by accident after an undo, but you can also do it deliberately before a risky edit. fork_node branches the graph at a node you choose and makes it the head, so what you do next forms a new branch off it.
Two related tools are worth knowing. revert_to appends a new node whose state matches an earlier one, an “undo to checkpoint” that keeps the history in between. apply_diff writes several alternative takes as sibling nodes from one parent in a single step, when you want to hear a few variations side by side.
A/B compare
To choose between two versions, compare them. Right-click a node and pick Compare with…, or ask:
The compare bar appears with A, the version you are on, and B, the one you picked. edytlab renders both sides first, so switching is gapless. As of v0.3.0 switching crossfades from the same moment instead of cutting, and playback keeps its position, so you hear the same bar both ways. Accept B makes B the current version. Closing the bar keeps A.
If you want to know what changed between two versions rather than how they sound, ask for it. compare_nodes returns what was added, removed and modified between two nodes. For the narrower question of whether to keep one effect, audition_effect plays a few seconds with it added and creates no node at all.
What history costs, and the 2 GiB limit
Edits that change audio write a new file, so a long session would grow without bound if nothing cleaned up. edytlab keeps a project's derived audio under 2 GiB. Past that, audio that only older versions use is removed, oldest first, and only when the app can rebuild it by replaying the edits that made it. A removed version is rebuilt on demand when you undo to it, preview it or export it, which can take a moment. The code's own estimate is that the cap holds about 36 edits of five-minute stereo audio.
Audio the current version needs is never touched, and neither is audio nothing can rebuild. storage_report shows where the space goes, split three ways: what the current version needs, what only undo history holds, and what nothing refers to. compact_session is the blunt tool: it prunes old history and deletes the audio only that history used, which drops the undo steps permanently. Ask for the report first.
The 2 GiB limit is described in the v0.3.0 entry of the changelog. The user guide covers the graph, A/B compare and export.
Exporting from any version
Exports render a node, not just the latest state, so an earlier take is as exportable as the current one. Right-click it in the Graph tab and choose Set as head, then ask:
The session graph is not changed by an export, so you can export several versions from different nodes without redoing any work.
Four habits that pay off
- Name a version before you try something drastic.
- Branch rather than overwrite: step back and try again, and let both stay.
- Compare before you accept. The ear catches what the graph cannot.
- On very long sessions, ask for a storage report before you go looking for disk space.
The workflows in Beatmatch and blend two tracks and Make a mixable extended intro both lean on this: try the overlap at eight bars, then four, and keep whichever you prefer. To use it yourself, download edytlab for macOS, Windows or Linux.
edytlab is an open-source, local-first AI audio editor. Download the latest release or star it on GitHub.