#!/usr/bin/env python3 """Muse โ€” landing page generator. Produces artifacts/index.html: a single entry point that presents both the Tour de Force demo and the Domain Registry to visitors. Stand-alone usage ----------------- python tools/render_index.py python tools/render_index.py --out artifacts/index.html """ from __future__ import annotations import pathlib _ROOT = pathlib.Path(__file__).resolve().parent.parent _DEFAULT = _ROOT / "artifacts" / "index.html" _HTML = """\ Muse โ€” Version Anything
Domain-agnostic version control

muse

Version control for any multidimensional state. The same DAG, branching, merging, and conflict resolution that powers music โ€” applied to genomics, 3D spatial fields, scientific simulation, or whatever you build next.

๐ŸŽต
Interactive Demo
Tour de Force
Watch Muse version a real music project โ€” five acts covering commits, branches, merges, conflict resolution, cherry-pick, stash, revert, and tags. Every operation is live, every commit real.
Animated DAG 5 Acts 41 Operations Dimension Matrix
Open Tour de Force โ†’
๐ŸŒ
Plugin Ecosystem
Domain Registry
Build your own domain plugin. The six-method MuseDomainPlugin protocol gives you the full VCS for free โ€” typed deltas, OT merge, CRDT primitives, domain schema. One command to scaffold.
6-Method Protocol OT Merge CRDT Primitives MuseHub Roadmap
Open Domain Registry โ†’
Content-addressed object store
Commit DAG with full history
Typed delta algebra
Per-dimension merge & conflict
OT merge (StructuredMergePlugin)
CRDT primitives (CRDTPlugin)
14 CLI commands ยท zero dependencies
""" def render(output_path: pathlib.Path) -> None: """Write the landing page.""" output_path.write_text(_HTML, encoding="utf-8") size_kb = output_path.stat().st_size // 1024 print(f" Landing page written ({size_kb}KB) โ†’ {output_path}") if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Generate Muse landing index.html") parser.add_argument("--out", default=str(_DEFAULT), help="Output path") args = parser.parse_args() out = pathlib.Path(args.out) out.parent.mkdir(parents=True, exist_ok=True) print("Generating index.html...") render(out) print(f"Open: file://{out.resolve()}")