Hades Remote

A Windows client for explicitly enrolled Hades animation playback.
Requires Python 3.9 or later, Windows PowerShell 5.1, an interactive Windows
desktop session, internet access, and an invitation from a relay controller.

Install once on each Windows PC:
    python -m pip install hadesremote

Then:
    import hadesremote as hades
    hades.enroll()

On a new PC, enroll() asks for the one-time code from the controller's
"Create Hades Enrollment Code" desktop shortcut. It installs the visible
tray client and its sign-in startup shortcut. Already enrolled PCs are left
unchanged. Importing the module alone does not install or start anything.

On your configured controller PC:
    hades.play()

No Tailscale connection is required. Internet access is required.
The tray menu allows pause/exit, and a desktop shortcut uninstalls the client.
Use "as hades" for the short name, or import hadesremote and call
hadesremote.enroll().

Enrollment options:
    hades.enroll(code="ONE_TIME_CODE", name="My PC")
    hades.enroll(relay_url="https://your-compatible-relay.example")

Prefer the interactive prompt to putting enrollment codes in saved scripts.
The default relay is operated by this project's controller; installing the
package does not grant access to it or give you controller credentials.

Installation behavior:
- Copies the bundled player and animation to %LOCALAPPDATA%\HadesRemote.
- Creates a visible tray client and a current-user sign-in startup shortcut.
- Stores the device credential encrypted for the current Windows account.
- Adds desktop start and uninstall shortcuts; requires no administrator rights.
- Accepts only the fixed playback action, not arbitrary scripts or downloads.

Importing is inert. enroll() explicitly installs; it leaves an already enrolled
PC unchanged. play() needs separately configured controller credentials on
the invoking PC. Those credentials are not included in this package.
Playback covers connected monitors once; Esc exits. Sleeping or offline PCs
cannot display the animation, and cross-PC playback is not frame-synchronized.
