{"id":51557216,"url":"https://github.com/avalonreset/legends-obs-cursor","last_synced_at":"2026-07-10T06:30:41.751Z","repository":{"id":370323298,"uuid":"1293878301","full_name":"avalonreset/legends-obs-cursor","owner":"avalonreset","description":"OBS cursor overlay with rotating momentum ticks, distinct click art, and optional floaty follow smoothing.","archived":false,"fork":false,"pushed_at":"2026-07-08T21:02:00.000Z","size":16066,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-08T23:05:09.059Z","etag":null,"topics":["avalon-reset","cursor-overlay","lua","obs","obs-studio","overlay","powershell","shader","streaming","windows"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avalonreset.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-08T16:32:14.000Z","updated_at":"2026-07-08T21:02:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/avalonreset/legends-obs-cursor","commit_stats":null,"previous_names":["avalonreset/legends-obs-cursor"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/avalonreset/legends-obs-cursor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avalonreset%2Flegends-obs-cursor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avalonreset%2Flegends-obs-cursor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avalonreset%2Flegends-obs-cursor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avalonreset%2Flegends-obs-cursor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avalonreset","download_url":"https://codeload.github.com/avalonreset/legends-obs-cursor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avalonreset%2Flegends-obs-cursor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35323809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["avalon-reset","cursor-overlay","lua","obs","obs-studio","overlay","powershell","shader","streaming","windows"],"created_at":"2026-07-10T06:30:38.703Z","updated_at":"2026-07-10T06:30:41.733Z","avatar_url":"https://github.com/avalonreset.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/banner.webp\" alt=\"Legends OBS Cursor banner showing a neon cursor halo with rotating momentum ticks\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n# Legends OBS Cursor - OBS Cursor Overlay With Momentum Ticks\n\n[![Validate](https://github.com/avalonreset/legends-obs-cursor/actions/workflows/validate.yml/badge.svg)](https://github.com/avalonreset/legends-obs-cursor/actions/workflows/validate.yml)\n[![Release](https://img.shields.io/github/v/release/avalonreset/legends-obs-cursor)](https://github.com/avalonreset/legends-obs-cursor/releases)\n[![License: GPL v2](https://img.shields.io/badge/license-GPL--2.0--or--later-blue.svg)](LICENSE)\n[![OBS](https://img.shields.io/badge/OBS-Lua%20filter-302E31?logo=obsstudio)](https://obsproject.com/)\n[![Platform](https://img.shields.io/badge/platform-Windows-0078D4?logo=windows)](#requirements)\n\nLegends OBS Cursor is an OBS cursor overlay that draws a stylized animated cursor for streams and recordings. It preserves the original Avalon Reset cursor language, including rotating momentum dots, distinct left-click and right-click art, and optional floaty follow smoothing for a more intentional on-screen motion feel.\n\n## Table Of Contents\n\n- [What It Does](#what-it-does)\n- [Demo](#demo)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Safe Installer Behavior](#safe-installer-behavior)\n- [Project Layout](#project-layout)\n- [Development](#development)\n- [Credits](#credits)\n- [License](#license)\n\n## What It Does\n\n- Adds an OBS video filter named `Legends Cursor Filter`.\n- Polls the Windows cursor position through LuaJIT FFI and `user32.dll`.\n- Draws the cursor halo, orbiting ticks, click effects, trails, and glow in an OBS shader.\n- Keeps the original rotating momentum-tick look as the default.\n- Adds optional `Enable floaty follow` and `Floaty lag ms` controls.\n- Installs conservatively with PowerShell and backs up the OBS scene collection before editing.\n\n## Demo\n\nThe demo below is a deterministic simulation of the Lua filter defaults. It models\nfloaty follow, speed-driven spin, rotating momentum ticks, comet trail samples,\nleft-click ripples, and the magenta right-click diamond burst.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/demo/legends-cursor-showcase.webp\" alt=\"Looping animated showcase of Legends OBS Cursor switching through momentum ticks, left-click ripple, right-click diamond, comet trail, stretch wake, and finder modes\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nFor the real 4K scale version, watch the\n[4K60 WebM](assets/demo/legends-cursor-showcase-4k60.webm) or\n[4K60 MP4](assets/demo/legends-cursor-showcase-4k60.mp4). It switches through\nmomentum ticks, left-click, right-click, comet trail, stretch/wake, and finder\nmodes on a simulated `3840 x 2160` OBS canvas.\n\n## Requirements\n\n| Requirement | Notes |\n| --- | --- |\n| OBS Studio | Tested against the modern OBS 32.x Lua scripting path. |\n| Windows | Cursor polling uses `user32.dll`, so this release targets Windows. |\n| PowerShell | Used by the automatic installer. |\n| Pointer overlay source | The installer looks for `pointer overlay` by default. |\n\n## Installation\n\nClose OBS before running the installer. OBS can overwrite scene collection JSON on exit, so the installer refuses to edit scenes while OBS is running unless you explicitly force it.\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\install_into_obs.ps1\n```\n\nTo install and relaunch OBS from the standard Windows install path:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\install_into_obs.ps1 -LaunchObs\n```\n\nThe installer copies the Lua and compatibility shader files into the OBS scripts folder, registers the script in the active scene collection, and preserves or adds a `Legends Cursor Filter` on the target source.\n\n## Manual Installation\n\n1. Open OBS.\n2. Go to `Tools \u003e Scripts`.\n3. Add `legends_cursor_filter.lua`.\n4. Open filters for your cursor overlay source.\n5. Add `Legends Cursor Filter`.\n\nThe shader is embedded in the Lua file. `legends_cursor_filter.effect` is kept beside it as a compatibility and review artifact.\n\n## Configuration\n\nSuggested starting settings:\n\n| Setting | Value |\n| --- | --- |\n| Visual mode | `Momentum ticks` |\n| Shape | `Circle` |\n| Speed response | `Snappy` |\n| Canvas width / height | Match your OBS canvas, such as `3840` / `2160` |\n| Monitor origin X / Y | Usually `0` / `0` |\n| Enable floaty follow | `On` |\n| Floaty lag ms | `255` |\n\nThe important default is visual preservation: rotating dots and click effects stay available as first-class settings. New effects should be added as options, not silent replacements for the original art.\n\n## Safe Installer Behavior\n\nThe PowerShell installer:\n\n1. Resolves the OBS config root from `%APPDATA%\\obs-studio`.\n2. Refuses normal installs while OBS is running unless `-Force` is passed.\n3. Copies script files into `scripts\\legends-cursor-filter`.\n4. Creates a `.legends-cursor-backup-YYYYMMDD-HHMMSS` scene backup before editing.\n5. Preserves the filter name `Legends Cursor Filter`.\n6. Preserves the filter id `legends_cursor_filter`.\n\nUse `-TargetSourceName` if your overlay source is not named `pointer overlay`.\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\install_into_obs.ps1 -TargetSourceName \"cursor overlay\"\n```\n\n## Project Layout\n\n| Path | Purpose |\n| --- | --- |\n| `legends_cursor_filter.lua` | OBS Lua source and embedded shader. |\n| `legends_cursor_filter.effect` | Extracted shader review artifact. |\n| `install_into_obs.ps1` | Backup-first Windows installer. |\n| `install_into_obs.cmd` | Double-click wrapper for the installer. |\n| `install_and_launch_obs.cmd` | Double-click wrapper that installs and launches OBS. |\n| `assets/` | README banner, animated demo, social preview, and keyframes. |\n| `tools/render_assets.py` | Rebuilds generated README assets. |\n| `tools/render_showcase.py` | Renders the 4K60 showcase video. |\n| `tools/validate_package.ps1` | Local package validation gate. |\n\n## Development\n\nRun the validator before pushing changes:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\tools\\validate_package.ps1\n```\n\nRegenerate the README images after changing the visual language:\n\n```powershell\npython .\\tools\\render_assets.py\n```\n\nRegenerate the full 4K60 showcase video:\n\n```powershell\npython .\\tools\\render_showcase.py\n```\n\nFor OBS scene testing, use a duplicate scene collection first. Do not hot-edit a live recording scene unless you already made a backup and understand the risk.\n\nAdditional maintainer docs:\n\n- [Art direction](docs/ART_DIRECTION.md)\n- [Release checklist](docs/RELEASE_CHECKLIST.md)\n- [Contributing guide](CONTRIBUTING.md)\n\n## Credits\n\nLegends OBS Cursor is an Avalon Reset project. See [CREDITS.md](CREDITS.md) for attribution and platform notes.\n\n## License\n\nLicensed under GPL-2.0-or-later. See [LICENSE](LICENSE). Third-party notices\nand attribution context are preserved in [NOTICE](NOTICE) and [CREDITS.md](CREDITS.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favalonreset%2Flegends-obs-cursor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favalonreset%2Flegends-obs-cursor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favalonreset%2Flegends-obs-cursor/lists"}