{"id":49580257,"url":"https://github.com/itsloopyo/eternal-afternoon-headtracking","last_synced_at":"2026-05-03T19:02:25.793Z","repository":{"id":355440850,"uuid":"1220307412","full_name":"itsloopyo/eternal-afternoon-headtracking","owner":"itsloopyo","description":"An OpenTrack compatible head tracking mod for Eternal Afternoon","archived":false,"fork":false,"pushed_at":"2026-05-03T17:16:20.000Z","size":19813,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T17:34:34.542Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","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/itsloopyo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-24T19:04:52.000Z","updated_at":"2026-05-03T17:16:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/itsloopyo/eternal-afternoon-headtracking","commit_stats":null,"previous_names":["itsloopyo/eternal-afternoon-headtracking"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/itsloopyo/eternal-afternoon-headtracking","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsloopyo%2Feternal-afternoon-headtracking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsloopyo%2Feternal-afternoon-headtracking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsloopyo%2Feternal-afternoon-headtracking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsloopyo%2Feternal-afternoon-headtracking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itsloopyo","download_url":"https://codeload.github.com/itsloopyo/eternal-afternoon-headtracking/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itsloopyo%2Feternal-afternoon-headtracking/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32581021,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"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":[],"created_at":"2026-05-03T19:02:21.479Z","updated_at":"2026-05-03T19:02:25.785Z","avatar_url":"https://github.com/itsloopyo.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eternal Afternoon Head Tracking\n\n![Mod GIF](https://raw.githubusercontent.com/itsloopyo/eternal-afternoon-headtracking/main/assets/readme-clip.gif)\n\nAn unofficial, flatscreen head tracking mod for Eternal Afternoon - no VR headset required. Use a webcam, phone, or any OpenTrack-compatible tracker to look around the environment with your head while your aim stays on the mouse.\n\n## Features\n\n- **Decoupled look and aim** - head tracking moves the camera; aim stays on your mouse/controller\n- **6DOF positional tracking** - lean and peek with head position\n\n## Requirements\n\n- [Eternal Afternoon](https://store.steampowered.com/app/2263560/Eternal_Afternoon/) (Steam)\n- [OpenTrack](https://github.com/opentrack/opentrack) or a compatible head tracking app (smartphone, webcam, or dedicated hardware)\n- Windows 10/11 (64-bit)\n\n## Installation\n\n1. Download the latest release from the [Releases page](https://github.com/itsloopyo/eternal-afternoon-headtracking/releases)\n2. Extract the ZIP anywhere\n3. Double-click `install.cmd`\n4. Configure OpenTrack to output UDP to `127.0.0.1:4242`\n5. Launch the game\n\nThe installer automatically finds your game via Steam registry lookup and patches `Assembly-CSharp.dll`. No mod loader (BepInEx/MelonLoader) is required. If the installer can't find the game:\n\n- Set the `ETERNALAFTERNOON_PATH` environment variable to your game folder, or\n- Run from command prompt: `install.cmd \"D:\\Games\\Eternal Afternoon\"`\n\n### Manual Installation\n\nIf you prefer to place files by hand, or you grabbed the `-nexus` package:\n\n1. Run `install.cmd` at least once against any copy of the game so `Assembly-CSharp.dll` gets patched (the mod is loaded via IL injection into that assembly, not via a separate mod loader)\n2. Extract the Nexus ZIP into your game folder - the DLLs will land in `Eternal Afternoon_Data/Managed/`:\n   - `EternalAfternoonHeadTracking.dll`\n   - `CameraUnlock.Core.dll`\n   - `CameraUnlock.Core.Unity.dll`\n   - `Mono.Cecil.dll`\n3. Configure your tracker to output UDP to `127.0.0.1:4242`\n4. Launch the game\n\n## Setting Up OpenTrack\n\n1. Download and install [OpenTrack](https://github.com/opentrack/opentrack/releases)\n2. Configure your tracker as input\n3. Set output to **UDP over network**\n4. Host: `127.0.0.1`, Port: `4242`\n5. Start tracking before launching the game\n\n### Webcam Setup\n\nNo special hardware needed - OpenTrack's built-in **neuralnet tracker** uses any webcam for 6DOF face tracking.\n\n1. In OpenTrack, set the input to **neuralnet tracker**\n2. Select your webcam in the tracker settings\n3. Set output to **UDP over network** (`127.0.0.1:4242`)\n4. Start tracking before launching the game\n5. Recenter in OpenTrack via its hotkey, and press **Home** in-game to recenter the mod as needed\n\n### Phone App Setup\n\nThis mod includes built-in smoothing for network jitter, so you can send directly from your phone on port 4242 without needing OpenTrack on PC.\n\n1. Install an OpenTrack-compatible head tracking app from your phone's app store\n2. Set the output to your PC's IP address on port 4242 (run `ipconfig` to find it)\n3. Set the protocol to OpenTrack/UDP\n4. Start tracking\n\n**With OpenTrack (optional):** If you want curve mapping or visual preview, route through OpenTrack. Set OpenTrack's input to \"UDP over network\" on a different port (e.g. 5252), point your phone app at that port, and set OpenTrack's output to `127.0.0.1:4242`. Make sure your firewall allows incoming UDP on the input port.\n\n## Controls\n\nTwo equivalent binding sets - use whichever your keyboard has:\n\n| Action               | Nav-cluster | Chord          |\n|----------------------|-------------|----------------|\n| Recenter view        | `Home`      | `Ctrl+Shift+T` |\n| Toggle head tracking | `End`       | `Ctrl+Shift+Y` |\n| Cycle tracking mode  | `Page Up`   | `Ctrl+Shift+G` |\n| Toggle yaw mode      | `Page Down` | `Ctrl+Shift+H` |\n| Toggle aim reticle   | `Insert`    | `Ctrl+Shift+U` |\n\n`Page Up` / `Ctrl+Shift+G` cycles tracking mode:\n\n1. Normal head-tracked gameplay (rotation + position)\n2. Positional tracking disabled, rotational tracking enabled\n3. Rotational tracking disabled, positional tracking enabled\n4. Back to normal\n\nThe chord letters sit in a vertical strip in the center of the keyboard. `Ctrl+Shift+\u003cletter\u003e` is universally avoided by games, so the chord set works whether or not your keyboard has a nav cluster.\n\n## Configuration\n\nThe mod creates `HeadTracking.cfg` in the game's Managed folder (`Eternal Afternoon_Data/Managed/`) on first run. Edit it and restart the game to apply changes.\n\n```ini\n# --- Network ---\nUdpPort = 4242\n\n# --- Keybindings (see https://docs.unity3d.com/ScriptReference/KeyCode.html) ---\nRecenterKey = Home\nToggleKey = End\nPositionToggleKey = PageUp\nReticleToggleKey = Insert\nYawModeKey = PageDown\n\n# --- Yaw Mode ---\n# true = horizon-locked yaw (default), false = camera-local yaw.\nWorldSpaceYaw = true\n\n# --- Sensitivity ---\nYawSensitivity = 1.0\nPitchSensitivity = 1.0\nRollSensitivity = 1.0\n\n# --- Smoothing ---\n# 0.0 = no smoothing, 1.0 = maximum. Remote connections enforce a minimum of 0.15.\nSmoothing = 0.0\n\n# --- Position Tracking ---\nPositionSensitivityX = 1.0\nPositionSensitivityY = 1.0\nPositionSensitivityZ = 1.0\nInvertPositionX = true\nInvertPositionY = false\nInvertPositionZ = true\n\n# --- Reticle ---\nShowReticle = true\nReticleColor = 1.0,1.0,1.0,1.0\n```\n\nDelete the file to reset to defaults.\n\n## Troubleshooting\n\n**Mod not loading:**\n- Check `HeadTracking_BOOT.log` in `Eternal Afternoon_Data/Managed/` for bootstrap messages\n- Check `HeadTracking_BOOT_ERROR.log` in your temp folder (`%TEMP%`) for bootstrap errors\n- Check `HeadTracking.log` in the Managed folder for mod errors\n- Verify game files through Steam and re-run `install.cmd`\n\n**No tracking response:**\n- Verify OpenTrack is running and outputting data\n- Check UDP port matches (default 4242)\n- Press **End** to enable tracking, **Home** to recenter\n- Check firewall isn't blocking UDP port 4242\n\n**Jittery / unstable tracking:**\n- Increase `Smoothing` in `HeadTracking.cfg` (remote connections auto-use 0.15 minimum)\n- Reduce sensitivity values in the config\n- Improve lighting for webcam-based tracking\n\n**Wrong rotation axis:**\n- Flip the relevant `InvertPositionX/Y/Z` flag in `HeadTracking.cfg`\n- If rotation feels mirrored, check OpenTrack's output mapping (invert the offending axis at the source rather than in the mod)\n\n**Yaw feels wrong when looking up or down at extreme angles:**\n- Try toggling between world-locked and camera-local yaw with `Page Down`. World-locked (default) is horizon-stable; camera-local follows the camera's current up-axis.\n\n## Updating\n\nDownload the new release and run `install.cmd` again. Your config is preserved.\n\n## Uninstalling\n\nRun `uninstall.cmd` from the release folder. This removes the mod DLLs and restores `Assembly-CSharp.dll` from its `.original` backup. No mod loader to remove - this mod patches `Assembly-CSharp.dll` directly rather than shipping BepInEx or MelonLoader.\n\nIf something is stuck, use:\n\n```\nuninstall.cmd /force\n```\n\nto remove everything the installer touched regardless of the state file.\n\n## Building from Source\n\n### Prerequisites\n\n- Windows 10/11\n- [.NET SDK 8.0+](https://dotnet.microsoft.com/download)\n- [pixi](https://pixi.sh) task runner\n- Eternal Afternoon installed via Steam (for Unity reference DLLs)\n\n### Build\n\n```bash\ngit clone --recurse-submodules https://github.com/itsloopyo/eternal-afternoon-headtracking.git\ncd eternal-afternoon-headtracking\n\n# Build and install to game\npixi run install\n\n# Build only\npixi run build\n\n# Package for release\npixi run package\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Credits\n\n- [Alex Klexber](https://store.steampowered.com/app/3924170/Eternal_Afternoon/) - Eternal Afternoon\n- [OpenTrack](https://github.com/opentrack/opentrack) - Head tracking protocol and software\n- [Mono.Cecil](https://github.com/jbevain/cecil) - .NET assembly manipulation (used for install-time IL injection)\n\n## Disclaimer\n\nThis mod is not affiliated with, endorsed by, or supported by Klexber or the Eternal Afternoon development team. Use at your own risk.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitsloopyo%2Feternal-afternoon-headtracking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitsloopyo%2Feternal-afternoon-headtracking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitsloopyo%2Feternal-afternoon-headtracking/lists"}