# Fork features (copilot/infinipaint) Upstream: [ErrorAtLine0/infinipaint](https://github.com/ErrorAtLine0/infinipaint) **Public forge:** https://forgejo.fsociety00.cc/copilot/infinipaint GitHub (`littlecodedragon/infinipaint`) is **private builder only** — not a public fork mirror. Source of truth stays on Forgejo. Save format: `INFPNT000008` / version `0.8.0-fork` (not network-compatible with stock 0.6.x peers). ## CI | Workflow | Trigger | Runner | Output | |----------|---------|--------|--------| | `.github/workflows/windows_release.yml` | push `main` to private GitHub mirror | GitHub-hosted **`windows-latest`** | uploads public Forgejo tag `windows-continuous` | | `.forgejo/workflows/windows_release.yml` | every push to `main` | Forgejo self-hosted `windows-release` (optional) | same tag on Forgejo | **Friends (Windows):** https://forgejo.fsociety00.cc/copilot/infinipaint/releases/tag/windows-continuous — zip entpacken, `infinipaint.exe` starten. Details: [docs/windows-runner.md](docs/windows-runner.md). ## Bring Everyone Here (host) In the player list, the lobby host gets **Bring Everyone Here**. Clients receive `CLIENT_FORCE_CAMERA_JUMP` and run the same `smooth_move_to` path as **Jump To**. ## Group / Ungroup (canvas objects) With a multi-selection (images, brush strokes, text boxes, shapes, …), use **Group** / **Ungroup** in the selection panel. Grouped objects auto-expand into the selection so they transform together. Not related to players. ## Image compression Settings → **Images**: compress on insert (WebP/PNG/Keep). **Compress all images on canvas** rewrites every already-placed raster (same format/quality; Keep uses WebP). Selection panel: **Compress Images** for a subset. ## Freistellen Not automatic on import. Choose **Paste Image + Freistellen** from the canvas right-click menu, or **Ctrl+Shift+V** then pick Freistellen vs as-is. Right-click an already placed image (or use the selection panel / image properties) to Freistellen later. Settings → **Images** only pick the method: white-key always; **Schnell (silueta)** / **Allgemein (bria)** when rembg CLI and that model exist (bundled `rembg/` + `rembg-home/models/`, Tower `~/.local/share/tower-rembg`, or PATH). Otherwise those radios stay greyed; white-key still works. Linux install runs `linuxinstall/bundle-rembg.sh`. ## Fog of War / layer lock (host) In the layer panel (host / local file only): mark a leaf layer as **Fog of War layer** (must sit **above** the content it covers), then paint fog with brush/shapes on that layer. Players receive a **stripped** world — only objects **fully** covered by opaque fog (not merely overlapping) are omitted from join sync and from their save. Partially covered images stay. Moving or reshaping fog (or content under it) live-updates clients: newly covered objects are unloaded, revealed ones are sent again with their resources. The host file stays complete. Fog draws at the layer’s real alpha (1.0 = fully opaque for host and players). **Lock for players** blocks client edits on a normal layer; fog layers are always locked for players (move/edit/erase rejected on the host). Players also **cannot hide or fade** a fog layer (eye / alpha); only the host can toggle fog visibility, and the host rejects client DisplayData that would strip FoW.