Project Documentation

aoManager

Resolume Advanced Output XML Manager for side-by-side file comparison, structured copy operations, input-mask transfer, and safe export without manual XML editing.

Core Workflow Dual XML Compare + Copy
Copy Targets Screen, Slice, Mask, Input Mask
Runtime Stack React + TypeScript + Tauri + Rust
Safety Undo/Redo, Validation, Collision Remap

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

  1. Load source XML on one side and destination XML on the other.
  2. Compare tree status markers and preview geometry.
  3. Copy required Screen, Slice, or Mask elements.
  4. Use Input Mask copy/paste for slice-mask transfer.
  5. 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

  1. Install dependencies: npm install
  2. Run desktop dev app: npm run tauri dev
  3. Run frontend tests: npm test
  4. Run Rust tests: cd src-tauri && cargo test
  5. 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.