What aoManager Solves
aoManager lets you copy or duplicate screens, slices, and masks between Advanced Output files while preserving the
changes you have already made.
Side-by-Side XML
Visual Geometry Preview
Safe Export
Quick Start Workflow
- Load source XML on one side and destination XML on the other.
- Compare tree status markers and preview geometry.
- Copy required Screen, Slice, or Mask elements.
- Use Input Mask copy/paste for slice-mask transfer.
- Export only the edited side as a new XML file.
Primary Interface Areas
Dual File Panes
Each side shows file path, object counts, dirty state, search, and grouped tree by Screen.
Geometry Preview
Split or single preview with input/output map modes, zoom/pan/fit, and selection sync.
Activity + Details
Operation feedback and selected node metadata are visible during each transfer step.
Per-Side History
Undo and redo are scoped per side, so edits can be rolled back without reloading files.
Copy Operations
- Copy buttons support Screen, Slice, and Mask transfer in either direction.
- For Slice and Mask transfer, choose destination Screen before copy.
- Name collisions are auto-resolved with copy suffixing.
- ID collisions are remapped to prevent structural conflicts.
- DMX items are visible for comparison but remain read-only in v1.
Input Mask Transfer
Input mask copy is a dedicated workflow: copy from a source Slice, then paste to a target Slice on the opposite side.
aoManager rebases mask geometry into the destination input coordinate space and blocks extreme aspect-ratio mismatch.
Bidirectional
Overwrite Guardrail
Aspect Safety Check
Geometry Preview Controls
- Layout mode: Split (both sides) or Single (one side).
- Map mode per side: Input or Output.
- Input scope: One Screen or All Selected Screens.
- Preview and tree selection are linked in both directions.
Developer Stack
- Frontend: React 18, TypeScript, Vite, Vitest, Testing Library.
- Desktop shell: Tauri v2.
- Core engine: Rust with xmltree, serde, thiserror.
- Bridge packages: @tauri-apps/api, @tauri-apps/plugin-dialog.
Core Command Surface
Parse + Validate
parse_xml and validate_side return document payload and warnings.
Merge Paths
copy_node for generic copy and copy_slice_input_mask for mask transfer.
History
undo and redo provide per-side mutation history control.
Save
save_as writes normalized XML while preserving semantic output fidelity.
Project Layout
- src/App.tsx orchestrates state, UI flow, and copy operations.
- src/components/PreviewPanel.tsx manages preview mode and side controls.
- src/components/PreviewCanvas.tsx handles SVG rendering and interactions.
- src/lib/diff.ts computes match and one-sided status maps.
- src-tauri/src/merge.rs applies copy logic and input-mask geometry rebasing.
- src-tauri/src/parser.rs builds summary, tree, preview geometry, and warnings.
Developer Commands
- Install dependencies: npm install
- Run desktop dev app: npm run tauri dev
- Run frontend tests: npm test
- Run Rust tests: cd src-tauri && cargo test
- Build frontend bundle: npm run build
Troubleshooting Checklist
- File will not load: confirm valid Resolume Advanced Output XML.
- Paste Input Mask missing: first copy a Slice mask on the opposite side.
- Mask paste blocked: choose a target Slice with closer input aspect ratio.
- Changes disappeared: export the modified side and verify activity log.
- Unexpected output state: reopen exported file and check warnings before production use.