{"id":28903456,"url":"https://github.com/barrettotte/fishtank-userscript","last_synced_at":"2026-04-22T23:36:07.880Z","repository":{"id":299307616,"uuid":"1002300575","full_name":"barrettotte/fishtank-userscript","owner":"barrettotte","description":"UserScript to tweak/add features to fishtank.live","archived":false,"fork":false,"pushed_at":"2026-03-15T09:15:45.000Z","size":835,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-15T20:50:17.470Z","etag":null,"topics":["fishtanklive","userscript"],"latest_commit_sha":null,"homepage":"https://www.fishtank.live/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barrettotte.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":"2025-06-15T06:50:15.000Z","updated_at":"2026-03-15T09:15:48.000Z","dependencies_parsed_at":"2026-03-15T11:03:45.836Z","dependency_job_id":null,"html_url":"https://github.com/barrettotte/fishtank-userscript","commit_stats":null,"previous_names":["barrettotte/fishtank-userscript"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/barrettotte/fishtank-userscript","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Ffishtank-userscript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Ffishtank-userscript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Ffishtank-userscript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Ffishtank-userscript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barrettotte","download_url":"https://codeload.github.com/barrettotte/fishtank-userscript/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Ffishtank-userscript/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32159959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"ssl_error","status_checked_at":"2026-04-22T17:06:19.037Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["fishtanklive","userscript"],"created_at":"2025-06-21T12:02:39.173Z","updated_at":"2026-04-22T23:36:07.872Z","avatar_url":"https://github.com/barrettotte.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fishtank-userscript\n\nUserScript to tweak/add features to [fishtank.live](https://www.fishtank.live/)\n\nUpdated to support the new website for season 5.\n\nFeel free to steal anything from this.\nI'm hoping to continue updating this repo as seasons continue.\n\nThis was first started during season 2 in a different repo - https://github.com/barrettotte/fishtank-s02-qol.\n\n## Setup\n\nInstall [Tampermonkey](https://github.com/Tampermonkey/tampermonkey) or equivalent userscript manager as a browser extension\n\nCopy/paste `dist/main.js` (readable) or `dist/main.min.js` (minified) into Tampermonkey\n\n## Season 5\n\n### Camera List\n\nAdds alternate cameras (Bar Alt, Dorm Alt, Market Alt) to the official camera widget.\nAlternate cameras work by switching to the parent camera normally then auto-clicking the transition polygon.\nAlternate cameras are automatically disabled when their parent camera is offline.\n\nRemoves audio clips played when hovering or switching cameras in the grid.\n\nI originally had my own cam grid/list, but the site nicely implemented the grid officially.\n\n![docs/s5-cams-grid.png](docs/s5-cams-grid.png)\n\n### Games Tab\n\nAdds games tab with Solitaire and Minesweeper for those downtimes where you have nothing else to do.\nWin/loss stats are tracked in localStorage and persist across sessions.\n\n![docs/s5-games-solitaire.png](docs/s5-games-solitaire.png)\n\n![docs/s5-games-minesweeper.png](docs/s5-games-minesweeper.png)\n\n### Misc\n\nAdds tab to open the [Classic Fishtank site](https://classic.fishtank.live/)\n\n## Classic\n\nThis userscript also supports [https://classic.fishtank.live/](https://classic.fishtank.live/) since I think it was never changed after season 4.\n\n### Camera List Widget\n\nAdds camera widget to left panel above the ads widget.\n\nActive camera highlight uses an observer to react when live stream name is changed.\nSo, it should work on any camera transition (camera widget, arrow buttons, arrow keys, clickable stream areas)\n\nOn small screens (\u003c 1100px) this widget will be hidden.\n\n![docs/s4-cams-classic.png](docs/s5-cams-classic.png)\n\n### Chat Toggle Button\n\nAdds chat toggle to the right of the TOYS status.\n\nThis toggles the right panel to `display: none` and allows theater mode without chat.\n\nOn small screens (\u003c 1100px) the chat toggle button will be hidden.\n\n![docs/s4-chat-toggle.png](docs/s4-chat-toggle.png)\n\n## Development\n\nSource files are in `src/`, split by responsibility:\n\n| File | Description |\n|------|-------------|\n| `classic.js` | Classic site (camera widget, chat toggle) |\n| `common.js` | Shared constants and utilities |\n| `entry.js` | Site detection and initialization |\n| `minesweeper.js` | Minesweeper game |\n| `new-site.js` | New site (alt cameras, tabs, observer) |\n| `solitaire.js` | Solitaire game |\n\n### Build\n\nUses [Vite](https://vite.dev/) with [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) for bundling.\n\n```bash\nnpm install\nnpm run build        # dist/main.js + dist/main.min.js\nnpm run build:test   # build with __TEST_MODE__=true (games start near-win)\nnpm run lint         # check for code issues\nnpm run lint:fix     # auto-fix code issues\n```\n\nOutput files in `dist/`:\n\n| File | Description |\n|------|-------------|\n| `main.js` | Readable, unminified build |\n| `main.min.js` | Minified build |\n\nBoth include `@updateURL`/`@downloadURL` pointing to their respective files for auto-updates via Tampermonkey.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrettotte%2Ffishtank-userscript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarrettotte%2Ffishtank-userscript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrettotte%2Ffishtank-userscript/lists"}