πΏ New sprout. This tool is freshly built and still being tested against real ATEM exports β double-check anything that looks off before relying on it.
Reading ATEM macro exports in plain language #
ATEM Software Control can export a macro pool as XML, but the raw file is close to unreadable β a single macro can run 250+ lines, because the macro recorder dumps the whole state of a keyer or SuperSource box even when only one thing changed. This tool loads that export and turns each macro into something you can read.
Drag a macro-export (or full config) file onto the row above, click Code to paste XML directly, or pick up a config you loaded here recently. Once it's loaded the loader collapses to a single line, and the panel on the left offers four ways into the pool.
Load a full config, not just the macro pool
Everything below works better β and some of it only works at all β with a full config export rather than a macro-pool-only one. A full export carries the switcher's own naming tables and its captured state, which is what lets the tool say "fill from 5 - PCAM 5" instead of "fill from Camera5", and draw a macro in context instead of in a vacuum.
Finding a macro
- List β every macro by slot and name, filtered by name or description.
j/k(or the arrow keys) step through the list,/jumps to the filter,Escclears it. - Pool β the macro pool as a grid of slots. Macro indices are sparse in practice (0, 1, 2, 4, 5, 18, 19, 24β¦) because the pool is slot-addressed: that number is what a panel button or a Companion action fires. The grid shows which slots are taken and which are free.
- Usage β the pool read backwards. Pick a target (ME1 Key2, SuperSource 1 Box 3) or a source (a camera, a media player) and see every macro that touches it, and how many Ops each one spends on it. This is the "if I re-patch camera 25, what breaks?" view.
- Diff β compare this config's macro pool against another one you've loaded recently. It compares meaning rather than text, so it reports "SuperSource 1 Box 1 Β· source: 5 - Wide β 20 - Player PIP" instead of a wall of moved lines.
Whichever you use, the selected macro goes in the address bar (?macro=24), so a particular macro can be linked to or survive a reload.
Reading a macro
A macro is a sequence, so it's shown as one: a numbered list of steps in execution order, each naming the target it acts on and what it does there in plain language. A run of Ops on one target collapses into one step; a target the macro comes back to later gets its own step, which is exactly the detail a per-target summary loses.
Three reading levels:
- Summary β the steps that actually do something. If steps are left out, it says how many and why.
- All changes β every step, geometry and cosmetics included.
- Raw Ops β the complete list, exactly as ATEM exported it.
Clicking a step's target chip folds out the raw Ops behind that one step. With a full config loaded, Ops that set a value the switcher already had are dimmed, and the card says how many there were β that's measured against this switcher's own state, not guessed from what defaults usually look like.
Copy as Markdown turns a macro (or the whole pool) into a table you can paste into a wiki, a handover doc or a show binder. Printing gives the selected macro the page on its own.
Show Layout
A macro is a patch, not a picture. A macro whose only Op is DVEAndFlyKeyXPosition says nothing about that key's size, fill or on-air state β so drawing "the macro's layout" from its Ops alone is either empty or quietly misleading.
The layout is therefore always drawn as a base plus this macro, and you choose the base:
- Switcher state from this config β the state captured in the export, which is what makes a one-Op macro readable at all.
- After macro #N β the state once another macro has run, since that's how macros actually stack at showtime.
- No base β this macro's Ops alone.
Three kinds of fact are drawn differently rather than flattened together: what the macro set is solid and accented, what it inherited from the captured state is dimmed, and what nobody stated anywhere is dashed and never filled in with a guess. Hover any element to see which of its numbers came from where. Because a macro is a change, the drawing shows one β the element's position before the macro ran, as a ghost outline with an arrow to where it ends up.
The frame is drawn with a gutter around it, so something parked outside it (a "hide the PIP" macro moving a key to x=30) is pulled back to the edge and labelled off frame rather than clipped away. A keyer whose DVE geometry isn't live β not a DVE key, fly disabled β is marked as such instead of being drawn like an on-air PIP.
What the drawing does not claim
The coordinate system is inferred from mask boundary values in real exports (a 32 Γ 18 frame centred on the origin), not documented by Blackmagic, and has not been checked against a live multiviewer. Crop is listed per element but deliberately not applied to the drawing, because whether it scales with the box is unverified. The number of Ops that change things a layout can't show β key tuning, borders, transitions β is stated under the drawing, so the picture never implies it covers the whole macro.
A note on defaults and unknowns
There's no official documentation of this XML format from Blackmagic β only the separate Streaming XML format (for RTMP providers) is documented. Everything the tool knows about Op names, default values, source-id ranges and the shape of the captured state was built empirically from real export files, and deliberately conservatively: a value is only treated as a default when sample exports agreed on it almost unanimously. Anything unrecognised is shown as-is rather than guessed away, and a source name the tool can't place in the id space is printed exactly as the file wrote it.