GL.iNet-Router-Screen-Saver-BE3600

# GL.iNet Router Screen Saver (BE3600) **Give your GL.iNet Slate 7's little front screen an animated screen saver.**
Robot eyes, colour fields, your own text, or anything you design. [![CI](https://github.com/CristoXD73/GL.iNet-Router-Screen-Saver-BE3600/actions/workflows/ci.yml/badge.svg)](https://github.com/CristoXD73/GL.iNet-Router-Screen-Saver-BE3600/actions/workflows/ci.yml) ![Device](https://img.shields.io/badge/device-GL.iNet%20GL--BE3600%20(Slate%207)-2ea44f) ![Firmware](https://img.shields.io/badge/firmware-4.8.3-blue) ![License](https://img.shields.io/badge/license-MIT-lightgrey) The bundled animation: two glowing eyes that look around The animation that comes with it, shown as the wide strip. It loops for 25 seconds.

After a few idle seconds, this plays an animation on your BE3600’s front screen. Swipe along it and the picture follows your finger and slides to your next (or previous) saved animation; a tap does the same; double-tap, or swipe across the strip, to bring the normal GL.iNet screen back. One download sets it all up, and one download removes it again — nothing about the router’s firmware changes.

Install or uninstall

You need: a GL-BE3600 (Slate 7) — the “modem” with the little screen — a computer on its Wi-Fi (or plugged into it), and the router’s admin password, the one for its admin web page.

### [**⬇ Install**](https://cristoxd73.github.io/GL.iNet-Router-Screen-Saver-BE3600/studio/get.html)   ·   [**Uninstall**](https://cristoxd73.github.io/GL.iNet-Router-Screen-Saver-BE3600/studio/get.html#uninstall)

The page sees which computer you are on and gives you the one right file:

Then it talks you through three steps, the same on every computer:

  Step 1 of 3: Finding your router
     Found your router at 192.168.8.1.

  Step 2 of 3: Logging in to your router
     Type your router's admin password (the one for its admin web page) and press Enter.
     Nothing will show while you type - that's normal.
     Password:
     Logged in.

     Save this login so you don't have to type the password next time? [Y/n]
     Saved. Next time you won't need to type the password.

  Step 3 of 3: Installing the screen saver
     This takes about a minute. Please keep this window open.
     Installed.

  All done! Your router's screen will show the animation after a few idle seconds.

The install ends with two eyes waking up on the router’s screen while its fan revs, so you know it took. Uninstall finds and logs in to the router the same way (no password if you saved the login), puts GL.iNet’s normal screen back, removes every file, service and setting it added, and forgets this computer’s saved login and router address, on both sides: “Your router is back to normal. You can delete this file.”

It tries the address that worked last time, then this computer’s router, then GL.iNet’s usual 192.168.8.1; if yours is somewhere else (say 192.168.20.1) it asks you to type it. Every message, on every system, is in tests/setup_flow/ — the tests hold Windows, macOS and Linux to exactly those words.

Advanced: Studio Link, the ZIP, and doing it by hand **Studio Link** installs the screen saver as well, then opens Motion Studio already connected to your router, so what you design goes straight onto it. Get it under *Advanced* on the [download page](https://cristoxd73.github.io/GL.iNet-Router-Screen-Saver-BE3600/studio/get.html) (Windows: `Studio-Link.cmd`; Mac / Linux: `python3 studio-link.py`). On a Mac it opens the copy of Motion Studio it serves itself, at `http://127.0.0.1:8791/`, because Safari never lets the website talk to a helper on your own computer. **From the ZIP or a clone** (*Code → Download ZIP*, then unzip): * Windows: double-click **`Install.cmd`**; drag a `.bea` onto **`Set-Animation.cmd`**. * macOS: double-click **`Install.command`** (the first time, macOS may ask you to allow it under *System Settings → Privacy & Security*). Or in Terminal: `./install.sh`. * Linux: `./install.sh`, `./set-animation.sh`, `./studio-link.sh`. The one-click files are these same programs: `python3 tools/studio_link.py --install` / `--uninstall`, and on Windows `tools\studio-link.ps1 -Install` / `-Uninstall`. **On the router itself** (over SSH, `ssh root@192.168.8.1`): `be3600-uninstall --purge` removes everything; `be3600-anim off` just switches it off. See [below](#turn-it-off-or-remove-it). **Something went wrong?** [`docs/TROUBLESHOOTING.md`](/GL.iNet-Router-Screen-Saver-BE3600/docs/TROUBLESHOOTING.html).
Pick Atmosphere, Robot Eyes or GIF in Motion Studio and press Compile BE3600 Pack The animation is sent to the router, and the three slots show Play and Remove

Design one, and get it onto the router

### [Open Motion Studio](https://cristoxd73.github.io/GL.iNet-Router-Screen-Saver-BE3600/studio/) Motion Studio

Motion Studio is a page in your browser: nothing to install, nothing uploaded. The ? button walks through it in four pictures, and the Motion / Fan tabs next to the logo switch between designing an animation and designing a chime for the fan. Pick Atmosphere (six slow colour scenes), Robot Eyes (a library of expressions) or GIF (bring your own, or press Search GIFs: Classic shows only GIFs that fit the strip, Risky shows any GIF; the compiler crops or fits it to the strip), shape it, then open Compiler and optimizer (Create your video) and click Compile BE3600 Pack. It asks how long the loop should be (1-25 s).

With Studio Link running (see Advanced above), Motion Studio connects to your router by itself:

Windows may warn about the downloaded .cmd file (choose Keep / Run anyway); it’s plain text you can open in Notepad first. If you cloned this repo you can double-click Studio-Link.cmd (macOS: Studio-Link.command; Linux: ./studio-link.sh) instead; same thing. If Studio Link isn’t running, or your browser blocks it, the old way still works: save the file and drag it onto Set-Animation.cmd (macOS: double-click Set-Animation.command and drag the file into its window; Linux: ./set-animation.sh).

The router keeps up to 3, so you can switch back later, and each loops for at most 25 s. The same name replaces the old one. Manage them from Motion Studio, from the router’s own screen (put slots in PAGES: tap moves along the three, hold removes one), or from a terminal: be3600-anim list / use NAME / remove NAME (see all commands).

What is Studio Link, and is it safe? A web page can't log in to your router by itself, so Studio Link is a tiny helper that does it for the page, using the same check-then-SSH steps as `Set-Animation`. * It listens on **this computer only** (`127.0.0.1`); nothing else on your network can reach it. * **Only your own Motion Studio tab can use it.** Each time Studio Link starts it makes a fresh secret token and opens Motion Studio with that token in the address; the page keeps it and sends it with every request. Other websites, other programs and other users on this computer don't have it, so they get nothing. (A page also has to come from Motion Studio's own site or `localhost`, and a sandboxed page, `Origin: null`, is always refused. Running a fork on another address? Set `STUDIO_LINK_ORIGINS`.) * It only ever accepts a valid `.bea` animation (checked here and again on the router), and only while you have it running. * **Your router password is typed into the Studio Link window**, never into the web page. It is held in that window's memory only, handed to `ssh` for the moment each call runs (so nothing else it starts, such as your browser, can inherit it), and never written to disk. * **Remember this computer** (optional, asked once) keeps a private key on this computer and adds its public half to the router, so the password is never asked again. The key file is **locked with a long random passphrase**, and that passphrase is kept where only you can open it: Windows' per-account encryption (DPAPI), the macOS Keychain, or the Linux keyring. Copying the key file somewhere else gets nobody in. Anyone signed in as you on this computer can still reach the router, so undo it any time with `Studio-Link.cmd -Forget` (`python3 studio-link.py --forget`), which also removes it from the router. (No keychain available? It just doesn't offer to remember.) * The single file also carries the screen saver's own files, so it can install them on your router. It only does that when you press Enter to agree. * **Checking a download:** `studio/downloads/SHA256SUMS` lists the checksums, and the router program inside is built reproducibly from `native/be3600-player.c` (`sh native/build-reproducible.sh --check`). See [`SECURITY.md`](/GL.iNet-Router-Screen-Saver-BE3600/SECURITY.html). * It refuses a router address that isn't a plain address, and asks before sending a password to an address outside a home or office network. * Your browser may ask to allow "devices on your local network". Choose Allow. Some browsers may block it entirely; then use `Set-Animation` as above. * **Safari** blocks the website from reaching Studio Link at all (it treats `http://127.0.0.1` as insecure content). That is why, on a Mac, Studio Link serves Motion Studio itself at `http://127.0.0.1:8791/` and opens that; only the page's own files are served, to this computer only. (`--studio web` opens the website instead, `--studio local` the served copy on any system.)
Smaller files, and making animations without the Studio Motion Studio already saves the compact `BEA2` format (only what changes between frames — usually 10x smaller than storing every frame in full, `BEA1`). Got an old `BEA1` file? `tools/bea2.py` converts either way, losslessly: ```sh python3 tools/bea2.py encode old-file.bea smaller.bea ``` `tools/make-preview-gif.py file.bea preview.gif` renders a GIF (`pip install pillow`). Format details: [`docs/BEA-FORMAT.md`](/GL.iNet-Router-Screen-Saver-BE3600/docs/BEA-FORMAT.html). `tools/make-sample-bea.py` makes a couple of test patterns.

Turn it off, or remove it

The easy way to remove it is the Uninstall button at the top. Or on the router, in a terminal (see how to open one):

be3600-anim off            # switch it off; everything stays installed
be3600-anim on             # switch it back on
be3600-uninstall           # remove it completely (keeps your animations)
be3600-uninstall --purge   # remove everything
be3600-uninstall --purge --forget-keys   # and the logins computers saved (what Uninstall runs)

Either way, the normal GL.iNet screen comes back exactly as it was.

All commands and settings | Command | What it does | |---------|--------------| | `be3600-anim on` / `off` | Enable / disable, and restore the normal screen. | | `be3600-anim status` | Is it on, who owns the screen, which animation. | | `be3600-anim set FILE.bea [NAME]` | Check, save to the library, and play it. | | `be3600-anim list` / `use NAME` / `remove NAME` | Manage the saved animations. | | `be3600-anim preview [FILE.bea] [SECONDS]` | Try one without installing it. | | `be3600-anim check` | Validate the active animation, show its length. | | `be3600-anim doctor` | Full health check — run this first if anything's off. | Settings live in `/etc/be3600-screen/config` (`be3600-anim on` to apply): ```sh IDLE_SECONDS=10 # seconds idle before the animation starts (0 = at once) DOUBLE_TAP_WINDOW_SECONDS=0.3 # a second tap this close is a double-tap; else it switches animation SLIDE_MS=280 # how long a slide between animations takes SWIPE_INVERT=0 # 1 = swipe the other way for next/previous TOUCH_LONG_AXIS=Y # X or Y: which touch axis runs along the strip TOUCH_DEVICE="" # leave empty: found automatically PLAYER_ENGINE="auto" # "auto" = fast native player when installed; "lua" forces the fallback ```

Screen pages: more than animations

Swipe along the strip and the picture follows your finger to the next page. Besides your animations the screen shows live pages, set in Inter and rendered by the router:

The screen pages: clock, network speed, vitals rings, router info, Wi-Fi clients, internet, data usage, VPN, health, Pomodoro timer, stopwatch, message, guest Wi-Fi switch, Wi-Fi QR code, weather and a custom page

Every page that needs no setting up comes on with the install. Two wait for you: wifiqr (it shows a Wi-Fi password to anyone who looks) and weather (it needs your location first). Choose your own in Motion Studio: with Studio Link connected, Screen pages lists them all — untick the ones you do not want and press Save pages. Or on the router:

be3600-anim pages                                            # the list, with what each one is
be3600-anim pages set "animations clock netspeed vitals internet"
be3600-anim pages reset                                      # back to animations only

Your choice is kept when you update or reinstall. (A router set up before pages came on by default gets them on its next update, unless someone had already chosen its pages.)

Page What it shows
clock Big time and date, with a seconds bar; drifts a pixel now and then so nothing burns in
analog An analog watch face with a smooth sweeping second hand
aurora Your traffic as drifting light: calm when idle, a river during a download
netspeed Live download / upload speed and a one-minute graph
talkers Which device is using the internet right now, and how much
vitals CPU, memory, storage and temperature as activity rings
info Uptime, load, LAN / WAN addresses, firmware
clients Wi-Fi devices with their names, addresses and signal strength
internet Online / offline, latency graph, packet loss (pings PING_TARGET)
doctor Where the trouble is: this router, the ISP link, the internet, name lookups
usage Data used today and this month, with a cap bar if you set DATA_CAP_GB
vpn WireGuard / OpenVPN tunnels and how long ago they last shook hands
health One glance: is everything fine? Lists what is not
pomodoro Focus / break timer. Tap starts and pauses, hold resets; rings even from another page
stopwatch Tap to start and stop, hold to reset
message A note you set with be3600-anim say "back at 5" yellow
guest The guest Wi-Fi as a switch: hold your finger down to turn it on or off
slots Your three animation slots. Tap moves along them; hold removes one
chimes The fan chimes. Tap plays the next one, hold repeats it
wifiqr A QR code that joins a Wi-Fi network (opt-in: it shows the password to anyone who looks)
weather Current weather (needs WEATHER_LAT / WEATHER_LON; asks open-meteo.com, nothing else)
custom Your own pages: scripts in /etc/be3600-screen/widgets.d (see below)

And around them:

All settings are documented in /etc/be3600-screen/config.

Hearing the router: chimes on the cooling fan The BE3600 has no speaker and no LEDs. It does have a cooling fan, and a fan can be told how fast to spin, so `be3600-fan` uses it as a doorbell. Not a tune. The blade-passing tone is buried in broadband rush on this router, so **there is no pitch to play with**: pitched jingles were tried and are indistinguishable from a draught of air. An engine works. Each chime is an idle, a stab of throttle, something held, then letting it die. The idle is the trick. From a standstill the rotor spends half a second breaking away and the stab lands against silence, which reads as one vague rush; from an idle floor it already has momentum, so the stab arrives in time and lands against a running engine. Under 400 ms is not worth asking for. **Five built in:** `ping` is one blip; `up` is a blip and a long pull away; `down` goes on the gas and then dies in stages; `alert` is three hard stabs; `rev` is the whole engine — start, two deep cuts with a stab out of each, then the long pull. **Four things play one**, and that is the entire list: | What | Switched on by | |---|---| | **Five taps** on the screen, from any page | `FAN_CHIME_TAPS="rev"` — on out of the box | | **A banner**, heard as well as seen | `FAN_CHIME=1` | | **The `chimes` page**: tap for the next one, hold to repeat | `chimes` in `PAGES` | | **By hand** | `be3600-fan chime rev` | Nothing plays at all between `FAN_CHIME_QUIET="22:00-08:00"`. **Your own** live in `/etc/be3600-screen/chimes.d`, one short file each, **up to eight** — the same idea as the three animation slots. `be3600-fan chimes` prints them, says where they are, and shows which of the four rows above is on. ``` be3600-fan chimes the list, and what plays them be3600-fan chime rev hear one be3600-fan play "60:600 255:600 60:450 255:1700" duty:milliseconds, without saving it be3600-fan save mine "60:600 255:1800" keep it as one of your eight be3600-fan forget mine be3600-fan spin 60 hold a speed; "spin auto" hands it back ``` **[Fan Studio](https://cristoxd73.github.io/GL.iNet-Router-Screen-Saver-BE3600/studio/fan.html)** designs them, and is a tab away in Motion Studio. Drag the bars and it shows what the fan will actually do: the speed curve is simulated from this router's own tachometer — spin-up 0.85 s, coast-down 0.75 s, half a second of dead time before a stopped rotor breaks away — so a 200 ms blip visibly fails to reach full speed instead of you finding out by ear. It plays an approximation through your speakers, and **Send to router** puts it on the router through Studio Link. Without Studio Link, save the `.chime` file and copy it into `chimes.d` yourself. The installer ends with `be3600-anim hello`: the two eyes from Motion Studio's logo wake on the strip, look around and blink while the fan revs under them, widening on each stab of throttle and opening out on the long pull. It takes no animation and no settings, and a router without a fan gets the eyes on their own. Cooling wins. Nothing plays above 70 °C, the previous fan speed is always restored even if the command is killed, and no chime may hold the fan longer than twelve seconds. `tools/sound_to_fan.py` maps a short WAV onto the fan. It is how the 1-UP jingle was tried, and how melodies were ruled out.
Your own pages Put a script in `/etc/be3600-screen/widgets.d/`, for example `solar.sh`, and add `custom:solar` (or `custom` for all of them) to `PAGES`. The script prints lines the page understands: ```sh # interval: 30 (optional: seconds between runs, at least 5) echo "title: Solar" echo "big: 3.2 kW" echo "line: today 14.1 kWh" echo "bar: 78" # a progress bar, 0-100 echo "spark: 1 2 4 6 5 7" # a small graph echo "color: green" ``` It runs as root, at most five seconds each time, and only its first 2 KB is used.

Good to know

For the curious

   
docs/HOW-IT-WORKS.md What runs on the router and why
docs/BEA-FORMAT.md The animation file format (BEA1, BEA2)
docs/TEARING.md What was measured about tear-free drawing
docs/TROUBLESHOOTING.md Fixes for common problems
docs/TESTING.md Running the tests on Linux and macOS
Install.cmd / .command / install.sh          one-click installer (Windows / Mac / Linux)
Set-Animation.cmd / .command / set-animation.sh   drag-and-drop animation swap
Studio-Link.cmd / .command / studio-link.sh       lets Motion Studio send animations to the router
studio/                            the browser tools: get.html (download),
                                   index.html (Motion), fan.html (Fan)
animations/                        the bundled animation
router/                            files that end up on the router
setup/                             install / uninstall scripts that run there
native/                            source of the fast player + build script
tools/                             Windows scripts, and animation helpers
tests/                             the test suite (sh tests/run.sh; Linux and macOS)
docs/                              the guides above

License

MIT, see LICENSE, including the bundled animation. Motion Studio uses Three.js and Vanta.js (both MIT) — see studio/OPEN_SOURCE.md. Not affiliated with or endorsed by GL Technologies. Use at your own risk: this takes over the router’s front display while the animation plays.