MultiMouseCanvas is a Windows-first tray application that turns global cursor movement into tiled artwork. Recording continues while the window is hidden; Pause, Finish, or Exit explicitly stops collection.
The recorder collects physical desktop cursor coordinates and monotonic sample times, session timing/statistics, and (when available) foreground executable identity/path or window class for stable application-specific colors. Color assignments remain editable. It does not collect clicks, keyboard input, screenshots, window contents, typed text, URLs, or window titles by default. No data is sent to a service by the application.
A stationary pointer becomes a live dwell after the configured activation delay. Hardware jitter inside the tolerance radius advances the same dwell without moving its center; movement beyond the radius finalizes it. Each later dwell is independent, even at the same coordinate, so translucent dwells alpha-compose rather than merge. Circle, triangle, and square shapes use the same fill/outline settings in preview and export and grow only to the configured maximum.
Every connected display is represented at its physical pixel proportions in the Windows virtual-desktop coordinate space. This supports negative X/Y origins, ultrawide displays, unequal resolutions, vertical offsets, touching edges, and physical gaps. A crossing is drawn only when consecutive coordinates belong to a continuous layout. Monitor add/remove, resolution/rotation, origin, and DPI/topology changes finalize live geometry first, preventing a diagonal across unrelated coordinate spaces.
Session bounds are the union of every observed topology. Adding a display left or above expands the bounds into negative coordinates; existing pixels keep their original desktop coordinates. Bounds never shrink during a session, and layout changes never rescale or crop existing artwork. Exports after several changes therefore include historical regions as empty or painted space at their original scale.
Finalized paths and dwells are immediately rasterized into sparse RGBA tiles. Only touched regions allocate tiles; previews upload allocated/visible dirty tiles, and the recorder retains only bounded in-progress geometry—not full raw samples, finalized paths, or finalized dwell lists.
Current recovery is a directory containing recovery-version, manifest.json, and tiles/<x>_<y>.png. Autosave is time-based and rewrites only recovery-dirty tiles, validates temporary output, then atomically publishes the manifest last. Interrupted .tmp-* files are harmless. Malformed, unsupported, incomplete, or legacy data is reported and preserved until the user explicitly imports or discards it. The former autosave.recovery.json is import-only compatibility data, not the primary format.
Settings are stored in the platform configuration directory (normally %APPDATA%\\MultiMouseCanvas\\MultiMouseCanvas\\config\\settings.json). Missing fields receive defaults, future fields are ignored, and numeric settings are validated/clamped. A parse failure uses in-memory defaults but never overwrites or deletes the original file. The deprecated close_window_behavior value is accepted and ignored when reading old settings and is omitted on the next save; closing and explicitly minimizing are no longer conflated.
The tiled compositor exports PNG while Recording, Paused, or Finished. The export is an immutable snapshot with exact historical desktop dimensions and can include the active movement/dwell and optional monitor overlays. Success reports the collision-safe output path (which can be opened in Explorer); failures remain visible and offer a manual Retry. Export activity is secondary to capture, so completion never changes or confirms the recording lifecycle.
Preview Fit All preserves the complete historical desktop union in the available viewport. 100% / Actual Size maps one canvas pixel to one screen pixel and permits navigation without rescaling the artwork.
UI, tray, IPC, and CLI all route the same Start, Pause, Resume, Finish, Export, Show, and Exit command model. A second instance forwards commands to the running instance.
The visible recording status is always the last state confirmed by the engine. A Start, Pause, Resume, Finish, or Clear request is displayed separately as pending. If no matching acknowledgment arrives within two seconds, the UI preserves the canvas, reports a persistent timeout, and requests a correlated full-state resynchronization; only that authoritative response clears reconciliation.
Pause stops sampling without finalizing or discarding the session. Resume starts a new discontinuous segment so time away cannot create a connecting line. Finish stops sampling and retains the canvas for export. Starting from Finished always asks whether to preserve/export, export then replace, clear then replace, or cancel; export must complete successfully before an export-and-replace workflow clears anything.
--show --start --pause --resume --finish --export --exit --help
Minimize to tray is an explicit action. The window X asks for confirmation when work may be lost; X and tray Exit stop capture and preserve an incomplete recovery checkpoint rather than silently finishing the session. Show, including a duplicate-instance --show, restores and focuses the existing window.
Display profiles match an exact complete layout. Stable display identity uses the OS display-config target identity first, then device path/name, then geometry as a last-resort fallback. A profile records which monitors are included; excluded monitors do not produce artwork or active dwell/movement statistics, although total session elapsed time continues. An unknown complete layout requires confirmation and selection rather than guessing. A changed complete layout is a separate profile and may include a monitor excluded by another layout.
Release builds use the GUI subsystem and do not open a console; debug builds retain a console for diagnostics. Logs live beside the executable and rotate through five files. Failure to create or rotate that directory is visible but non-fatal (notably when installed below a protected directory).
Neither artwork diagnostics nor logs contain clicks, keys, screenshots, window contents, typed text, URLs, window titles, or raw retained sample histories. The application does not transmit telemetry.
Sampling, simplification, tile rasterization, preview upload, and dirty-tile recovery are incremental. Storage and retained geometry scale with touched regions rather than session duration. Normal tests include deterministic accelerated 24-hour timestamps and synthetic continuous/curved movement, dwell/jitter, display crossing/change, pause/resume, application-switch boundaries, and sleep-sized gaps without sleeping. An ignored high-volume diagnostic is intended for Windows release runs and reports throughput while OS tooling records CPU, peak/steady memory, tile/recovery sizes, coalescing, dirty flush, and preview upload durations; resource values are diagnostics rather than brittle unit-test limits.
cargo fmt --check
cargo clippy --all-targets --all-features
cargo test --all-targets
cargo test --release windows_long_session_diagnostic -- --ignored --nocapture