{"id":24553989,"url":"https://github.com/luizbizzio/refreshrate","last_synced_at":"2026-01-03T11:43:01.446Z","repository":{"id":273031496,"uuid":"918516258","full_name":"luizbizzio/refreshrate","owner":"luizbizzio","description":"🖥️🔃 Refresh Rate Test: A real-time tool to monitor your screen's refresh rate and FPS. It visualizes performance with ghost count animations, helping you optimize display settings for the smoothest visual experience.","archived":false,"fork":false,"pushed_at":"2025-01-31T22:31:57.000Z","size":428,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-07T18:03:21.469Z","etag":null,"topics":["animation","app","check","color","display","fps","frame","hardware","info","monitor","monitoring","performance","pixel","refresh-rate","resolution","screen","settings","test","web","website"],"latest_commit_sha":null,"homepage":"https://refreshrate.app","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luizbizzio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"luizbizzio"}},"created_at":"2025-01-18T06:00:38.000Z","updated_at":"2025-02-25T22:02:39.000Z","dependencies_parsed_at":"2025-01-19T10:22:14.379Z","dependency_job_id":"4a6073f7-c4bd-47e1-8467-47df10bd9019","html_url":"https://github.com/luizbizzio/refreshrate","commit_stats":null,"previous_names":["luizbizzio/refreshrate.app","luizbizzio/refreshrate"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Frefreshrate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Frefreshrate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Frefreshrate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Frefreshrate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luizbizzio","download_url":"https://codeload.github.com/luizbizzio/refreshrate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243885891,"owners_count":20363644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["animation","app","check","color","display","fps","frame","hardware","info","monitor","monitoring","performance","pixel","refresh-rate","resolution","screen","settings","test","web","website"],"created_at":"2025-01-23T02:16:58.145Z","updated_at":"2026-01-03T11:43:01.440Z","avatar_url":"https://github.com/luizbizzio.png","language":"HTML","funding_links":["https://github.com/sponsors/luizbizzio"],"categories":[],"sub_categories":[],"readme":"# Refresh Rate Test 🖥️🔃\n\n[RefreshRate.app](https://refreshrate.app) is a browser-based tool to **measure how your display actually behaves in motion**, not just what the Windows panel says.\n\nIt focuses on three things:\n\n- How stable your **frame pacing** really is.\n- How many **distinct positions (“ghosts”)** you can see in different time windows.\n- How different **FPS targets** (30, 60, 120, 240, etc.) would look on your current panel.\n\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/refreshrate.png\" alt=\"Desktop Screenshot\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n---\n\n## Features\n\n- 🧵 **Motion Tracks (ms lanes)**  \n  Time-based tracks at 50 ms, 100 ms, 150 ms, 500 ms and 1000 ms. Each one shows a ball crossing the lane; the app estimates how many **ghost positions** you should see at your measured refresh rate.\n\n- 📊 **Live Metrics Panel**  \n  - FPS (frames per second)  \n  - Frame duration (ms)  \n  - Refresh rate (Hz) from measured frame spacing  \n  - Pixels per frame / pixels per second  \n  - Aspect ratio  \n  - Screen resolution  \n  - System scale (%)  \n  - Screen orientation  \n\n- 👻 **Ghost Counter per lane**  \n  Shows how many distinct “snapshots” of the moving ball your display should be able to show in that lane, based on your current measured Hz.\n\n- 🧪 **Frame Rate Preview (canonical FPS lines)**  \n  Animated rows for common FPS targets:\n  `30, 60, 120, 165, 240, 360, 480, 600`.  \n  Only FPS values **at or below your maximum measured refresh rate** this session are shown, plus a **custom line** for your exact panel Hz when it sits between presets.\n\n- 📱 **Responsive and PWA-ready**  \n  Works on desktop and mobile, supports installation as a **Progressive Web App** and can run offline once cached.\n\n- 🎛️ **Simple controls**  \n  Change:\n  - Background lane color  \n  - Number of decimals for the metrics  \n  - Metrics update interval\n\n---\n\n## How to Use\n\n1. **Open the app**  \n   Go to:  \n   [https://refreshrate.app](https://refreshrate.app)\n\n2. **Put the window where it matters**  \n   - Move the browser to the monitor you actually care about.\n   - Use the **Fullscreen** button for more consistent timing and motion.\n\n3. **Read the Motion Tracks (left panel)**  \n   - Each lane has a label: `50 ms`, `100 ms`, `150 ms`, `500 ms`, `1000 ms`.  \n   - The ball crosses the lane in exactly that time.  \n   - Under each lane you see **“Expected ghosts”**: this is  \n     `refreshRate(Hz) × laneDuration(seconds)` rounded.\n   - On a good high-refresh panel, you should see **many clean, distinct positions** even on the short lanes (50 ms, 100 ms).  \n   - If everything looks like a smeared streak or you barely see steps on the short lanes, your effective motion clarity is worse than the number on the box suggests.\n\n4. **Watch the Live Metrics (right panel)**  \n   - `FPS` and `Frame Duration` show how consistent the browser’s render loop is.  \n   - `Refresh Rate (Hz)` is computed from actual frame spacing, not from OS settings.  \n   - `Pixels per Frame` and `Pixels per Second` show how much work your panel is doing at that configuration.  \n   - Aspect ratio, resolution, scale and orientation are pulled from `screen` and `devicePixelRatio`.\n\n5. **Use the Frame Rate Preview (bottom-right)**  \n   - Rows like `30 fps`, `60 fps`, `120 fps` etc. are shown **only if they are ≤ your max measured Hz** this session.\n   - A **custom row** like `143 fps (your panel)` appears when your measured Hz sits between presets.\n   - All rows cover the same distance, but the **update cadence** is tied to the FPS number, so you can visually compare:\n     - How choppy 30 looks vs 60  \n     - How 60 compares to 120 / 144 / 165  \n     - Whether 240 on your panel actually looks meaningfully different from 165, etc.\n\n---\n\n## How the Ghosts Work (Short Version)\n\nThe Motion Tracks use a simple idea:\n\n- Your measured refresh rate is `Hz`.\n- A lane duration is `T` milliseconds.\n- Expected number of distinct positions is:\n\n```text\nghosts ≈ Hz × (T / 1000)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizbizzio%2Frefreshrate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluizbizzio%2Frefreshrate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizbizzio%2Frefreshrate/lists"}