Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Free Chrome and Firefox extension that restyles twitch.tv: a quieter sidebar and chat, cleaner pages, a framed player, and your own colours. No data collected.
PluginsSCSS · JavaScriptGitHub @corentin-gautierOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Restyle of the Twitch UI as if they had hired UI designers
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Restyle for Twitch is a stylesheet layered over twitch.tv. It does not add features or change how Twitch works: it quiets the noisy parts, gives the content more room, and makes the pages look like they belong to the same site.
It is an unofficial project, not affiliated with or endorsed by Twitch.
If Restyle for Twitch is useful to you, you can support my work with a small donation on Ko-fi. Thank you!
Creator Dashboard (dashboard.twitch.tv) is left untouched.
Click the extension's icon to open its settings. Changes apply immediately, without reloading the page.
| Setting | What it does |
|---|---|
| Enable on Twitch | Turns the whole restyle on or off. |
| Spacing | Three densities: compact, airy, very airy. |
| Corners | How rounded cards, panels, fields and buttons are: square, soft or round. |
| Floating panels | Takes the top bar, the sidebar and the chat off the window's edges, as rounded panels. |
| Themes | Eight ready-made pairs of background and accent colours, dark and light. |
| Accent colour | The colour of links, tags and highlights. |
| Plain chat | Hides chat badges and shows every username in the text colour. |
| Background colour | The page colour. Sidebars, chat, menus and text colours are derived from it. Reset to follow Twitch's own light or dark theme. |
| Channel colours | On a channel's pages, takes the accent and a tinted background from the channel's own colour, adjusted until text stays readable. Channels without a colour, or with a grey one, keep your settings. |
| Home carousel | Shows the featured streams at the top of the home page. Off by default: the carousel is hidden and its video paused. |
| Stories | Shows stories in the sidebar and on Following. Off by default. |
The settings popup follows the browser's language: English, French, Spanish, Portuguese, German, Italian, Dutch, Polish, Turkish, Russian, Japanese, Korean and Chinese (simplified and traditional). Other languages get English.
Install it from the Chrome Web Store. It needs Chrome 120 or later, and should work in other Chromium browsers of the same generation. Chrome keeps it up to date.
To install it by hand instead:
chrome://extensions and turn on Developer mode.Keep that folder: Chrome loads the extension from it. To update, replace its contents with a newer release and click the reload button on the extension's card.
Install it from Firefox Add-ons. It needs Firefox 140 or later. Firefox keeps it up to date.
To try a release before it reaches Firefox Add-ons, load it for the current session:
about:debugging#/runtime/this-firefox.Firefox removes it when it closes. It needs Firefox 140 or later.
The extension only runs on twitch.tv. It collects nothing and sends nothing
anywhere. Its one permission, storage, is used to remember your settings.
The stylesheet is written in Sass and compiled to one file, src/restyle.css,
which is not in the repository. To work on it, clone the repository, then:
npm install
npm run build # once, or
npm run watch # rebuilds on every save
and load the folder with Load unpacked. The extension is made of:
| Path | Role |
|---|---|
src/scss/ | The stylesheet's source. restyle.scss lists every file in cascade order. base/ holds the design tokens (spacing, radii, type scale, palette) and the theme; layout/ the top bar, the sidebar and the page column; components/ what the whole site shares (cards, tabs, menus, player popups); pages/ one file per page or per tab of a page, each page's folder holding the components only it uses (the chat under pages/channel/components/); tools/ the shared mixins and the one that writes the selectors' performance guards. |
src/restyle.css | The compiled stylesheet, the only one the extension loads. Never edited by hand. |
src/content.js | Applies the settings, marks what the stylesheet needs to know about the page, pauses the home carousel's video while it is hidden and stops the video cards' animated previews. |
popup/ | The settings popup. |
src/dev-reload.js | Live reload, for unpacked installs only. |
When loaded unpacked, the extension reloads itself and any open Twitch tab
whenever the compiled stylesheet or a JavaScript file changes: with
npm run watch running, saving a Sass file is enough.
To build the store packages, which leave the live reload out:
./scripts/package.sh # Chrome Web Store
./scripts/package.sh firefox # Firefox Add-ons
npm run package # both
The zips are written to dist/. The script needs Node.js and the
dependencies (npm install): it compiles the stylesheet, minified, before
zipping. The Firefox manifest is derived from manifest.json: it gains the
add-on id and the data collection statement Firefox asks for.
Releases are cut with npm run release (version bump, changelog, tag).
Pushing the tag publishes a GitHub release with both zips attached, then
submits each package to its store, where it waits for review as usual.
A store is skipped until its repository secrets are set (Settings > Secrets and variables > Actions):
| Secret | Where it comes from |
|---|---|
CWS_PUBLISHER_ID | The publisher ID shown in the Chrome Web Store developer dashboard, under Publisher > Settings. |
CWS_CLIENT_ID, CWS_CLIENT_SECRET | An OAuth client of a Google Cloud project with the Chrome Web Store API enabled. Set the consent screen to "In production": a refresh token issued in "Testing" expires after a week. |
CWS_REFRESH_TOKEN | A refresh token for that client with the scope https://www.googleapis.com/auth/chromewebstore, obtained once with the account that owns the extension (see Use the Chrome Web Store API). |
AMO_JWT_ISSUER, AMO_JWT_SECRET | The API credentials generated on addons.mozilla.org. |
Each store has its own job in the workflow. To submit the current version to a store again without a new tag (after fixing a secret, say), run the "Release" workflow by hand from the Actions tab and pick the store.
Twitch's markup has few stable hooks and changes without notice, so a Twitch update can break part of the restyle. If something looks wrong, please open an issue with a screenshot and the page's address.
Some rules match English labels, so a few details may be missing when Twitch is displayed in another language.
Copyright © 2026 Corentin Gautier.
Restyle for Twitch is free software, released under the GNU Affero General Public License, version 3. You may use, modify and share it, provided that copies and modified versions keep the copyright notices, stay under the same license, and come with their source code. It is provided without any warranty.