{"id":35731555,"url":"https://github.com/frudas24/deskslice","last_synced_at":"2026-01-13T20:46:17.563Z","repository":{"id":332369193,"uuid":"1128619482","full_name":"frudas24/deskslice","owner":"frudas24","description":"Remote control for the real Codex or  similars panels inside VS Code, designed for LAN use from a phone. The goal is low-latency streaming + input injection with manual calibration (no OCR, no UI re-implementation).","archived":false,"fork":false,"pushed_at":"2026-01-13T15:01:17.000Z","size":38060,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T17:18:09.125Z","etag":null,"topics":["agent","codex","devtools","ffmpeg","golang","llm","mjpeg","mobile","remote-desktop","vscode"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frudas24.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-05T23:03:00.000Z","updated_at":"2026-01-13T15:01:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/frudas24/deskslice","commit_stats":null,"previous_names":["frudas24/deskslice"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/frudas24/deskslice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frudas24%2Fdeskslice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frudas24%2Fdeskslice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frudas24%2Fdeskslice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frudas24%2Fdeskslice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frudas24","download_url":"https://codeload.github.com/frudas24/deskslice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frudas24%2Fdeskslice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","codex","devtools","ffmpeg","golang","llm","mjpeg","mobile","remote-desktop","vscode"],"created_at":"2026-01-06T11:17:42.054Z","updated_at":"2026-01-13T20:46:17.558Z","avatar_url":"https://github.com/frudas24.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DeskSlice\n\nRemote control for the real Codex panel inside VS Code, designed for LAN use\nfrom a phone. The goal is low-latency streaming + input injection with manual\ncalibration (no OCR, no UI re-implementation).\n\n## What It Solves\n\n- Control the **real Codex panel** on your Windows host from your phone over LAN (video + mouse/keyboard), without re-building the UI.\n- Quick manual calibration so clicks/typing land in the right places (plugin/chat/scroll rectangles).\n- A mobile-first fullscreen UX with safety toggles (input lock, scroll overlay, etc.).\n\n## Motivation\n\nThis started as a pragmatic solution to a personal problem: long hours at a desk were causing me persistent pain and discomfort. I wanted a way to keep working while changing posture and reducing strain, and I’m sharing it in the hope it helps others do the same.\n\n## What It Does Not Try To Do\n\n- Not a general-purpose remote desktop replacement (no multi-monitor “desktop manager”, file transfer, clipboard sync, etc.).\n- No OCR, no element detection, no UI automation “magic”: calibration is manual and expected.\n- Not hardened for hostile networks (the auth is intentionally simple; use only on trusted LAN/VPN).\n\n## Demo\n\n\u003cimg src=\"docs/demo.gif\" width=\"302\" height=\"665\" alt=\"DeskSlice demo\"\u003e\n\n- Walkthrough video: `docs/how_to_use.webm`\n- Screenshot (click to open the video): [![DeskSlice walkthrough](docs/how_to_folders.png)](docs/how_to_use.webm)\n\n## Status\n\nMVP scaffolding complete for Windows host. The full spec lives in `TODO/TODO_0001.md`.\n\n## Highlights\n\n- WebRTC video stream (H264) of the Codex panel (low-latency, primary mode).\n- MJPEG preview mode (fallback) with optional WebRTC switching.\n- Touch input mapping (tap, drag-scroll, typing).\n- Presetup mode to select monitor and trace plugin/chat/scroll rectangles.\n- Run mode with a cropped stream to the Codex panel only.\n- Simple password gate via `.env`.\n- Fullscreen mobile UX with side drawers, scaling controls, and input/scroll toggles.\n\n## Requirements\n\n- Windows 11 (host).\n- Go 1.25+.\n- `ffmpeg` available in PATH or configured via `FFMPEG_PATH` (absolute path recommended on Windows).\n\n## Quick Start\n\n1. Copy sample env: `cp data/.env.sample data/.env` and edit as needed.\n2. Set `UI_PASSWORD` in `data/.env`.\n   - For local dev, you can set `PASSWORD_MODE=false` to bypass the login screen.\n3. (Windows) Set `FFMPEG_PATH` to a full path like `C:\\tools\\ffmpeg\\bin\\ffmpeg.exe` if not in PATH.\n4. Build:\n   - Windows: `make build OS=windows ARCH=amd64` or `GOOS=windows GOARCH=amd64 go build -o dist/win64/codex_remote.exe ./cmd/codex_remote`\n   - Linux: `make build` (outputs to `dist/linux_x86-64/`)\n5. Run:\n   - Windows: `dist/win64/codex_remote.exe`\n   - Linux: `dist/linux_x86-64/codex_remote`\n6. Open `http://\u003chost\u003e:8787` on your phone and log in.\n\n## UI Tips\n\n- Fullscreen: tap the video to show/hide the overlay controls; use `Menu` and `Chat` drawers.\n- Mouse lock: in fullscreen, the mouse icon toggles whether touches send input; when locked, you can pinch-zoom and pan the video locally (no host input).\n- Run mode safety: when `Run` is active, the cursor is caged to the calibrated `plugin` rectangle to reduce accidental clicks outside the Codex panel; in `Stop`/presetup it is unrestricted.\n- Scroll mode: in fullscreen, the scroll icon enables a joystick-style scroll overlay (horizontal + vertical).\n- Post FX: adjust `Clarity` and `Denoise` sliders (client-side CSS filters). Set both to `0` to disable.\n- Debug overlays: enable `Debug overlays` to see the calibrated rectangles over the stream.\n- Scaling: `H+/H-/V+/V-` and `Reset` adjust the fullscreen fit and are remembered per-host in your browser.\n- Performance presets: `Battery/Balanced/Crisp` apply MJPEG interval/quality at runtime (see `/api/config`).\n\n## Notes\n\n- The server prefers `d3d11grab` and falls back to `gdigrab` if unavailable.\n- The web client is plain HTML/CSS/JS under `internal/web/static/` (no Node build).\n- Only one active viewer is supported; a new connection replaces the previous one.\n- CI/CD: GitHub Actions builds on PR/push and can publish release artifacts when you push a tag like `v0.1.0`.\n- The server runs **one** `ffmpeg` pipeline at a time:\n  - `WebRTC` runs `ffmpeg: start ... -f rtp rtp://127.0.0.1:\u003cport\u003e` (H264→RTP).\n  - `MJPEG` runs `ffmpeg: preview ... -f rawvideo -` and serves `/mjpeg/desktop`.\n  - Default is `MJPEG`; switch in the UI (Session → `WebRTC`) if you want lower latency.\n- WebRTC is fully functional; if you hit device-specific browser quirks, MJPEG remains a good fallback.\n- For MJPEG mode, the preview capture FPS is derived from `MJPEG_INTERVAL_MS` (smaller interval = higher FPS and more CPU).\n- Runtime tuning: `POST /api/config` (auth required) accepts `{ \"mjpegIntervalMs\": \u003cint\u003e, \"mjpegQuality\": \u003cint\u003e }` and applies it immediately when in MJPEG mode.\n- Reset: `POST /api/config` with `{ \"reset\": true }` restores MJPEG values loaded from `.env` at server startup.\n- Warning: the `Clear` button sends destructive keystrokes (Select All + Delete) to the host; only use it when the chat rectangle is correctly calibrated and the cursor focus is on the intended input.\n\n## License\n\nGPL-3.0-only. See `LICENSE`.\n\n## Roadmap\n\nPossible future streaming modes (to reduce CPU usage and/or improve reliability vs MJPEG):\n\n- HLS / LL-HLS (HTTP) for broad browser support (higher latency than WebRTC).\n- MPEG-TS over WebSocket (JSMpeg-style) for low-latency browser playback (CPU-heavy client decode).\n- RTSP for low-latency viewing via external apps (not browser-native).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrudas24%2Fdeskslice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrudas24%2Fdeskslice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrudas24%2Fdeskslice/lists"}