Files
small-packages/luci-theme-footstrap/wallpapers
2026-09-20 01:22:33 +08:00
..
2026-09-20 01:22:33 +08:00
2026-09-20 01:22:33 +08:00
2026-09-20 01:22:33 +08:00

Pattern wallpapers

Two drawings to try the Appearance → Background → Wallpaper → Pattern axis with.

They are not part of the theme package and are not downloaded by it — nothing in footstrap reaches the network at run time. Save one and upload it from that page like any other file, or run this on the router, as root:

wget -qO- https://raw.githubusercontent.com/VizzleTF/luci-theme-footstrap/main/wallpapers/set-pattern.sh | sh -s cats

cats or dinos, and the cats are back where they used to be. Details below.

file size tile
svg/cats.svg 77 kB 870 units square, reads well around 440 px
svg/dinos.svg 128 kB 2048 units square, reads well around 880 px

Earlier versions of the theme fetched these two from this repository on demand and checked them against a pinned sha256. That is gone: a theme in a package feed has no business calling a third-party host while a settings page is open, and your drawing is the interesting half of the feature anyway. They stay here because they are pleasant and because they are exactly the shape a pattern wants to be.

Putting one back on a router without a browser

set-pattern.sh does from a shell exactly what the Appearance page's upload does — that is the point of it, and it is why it is a script here rather than a feature in the theme: the admin fetches the drawing deliberately, once. The one-liner above is the whole interface, in the shape the theme's own install.sh uses.

cats and dinos are the two drawings above; anything else is taken as a URL or a local file, so your own tile installs the same way. Options: --size (40–1600 px, default per drawing), --strength (0–100 %), --ink theme|original, --keep-wallpaper (install the file but leave the wallpaper axis alone), and remove as the argument deletes the pattern and turns the wallpaper off.

It writes /etc/footstrap/pattern.svg at 0644, links it to /www/luci-static/footstrap/pattern.svg (the extension is load-bearing — uhttpd types a response by extension), and saves the file's md5 as footstrap.settings.pattern alongside the wallpaper, size, strength and colour settings, which is the router's default. A browser that has already chosen a wallpaper keeps its own choice: every axis is per-browser first and the router default second, so on such a browser press Reset to saved on the Footstrap tab, or pick Pattern there by hand.

The script raises the same objections the upload page does, by text matching rather than with a parser — a shell has no DOMParser. That is a cruder instrument in both directions, so a file it refuses can still be uploaded from the page, where a real parser decides.

What makes a good pattern

Line art on a transparent background. In the default Colours: Theme mode the SVG is painted through a CSS mask: the file supplies only its alpha and the theme supplies the ink, so one upload reads correctly in light mode, in dark mode and under every palette. A drawing with an opaque background rectangle masks as a solid sheet — for artwork that carries its own palette, switch that row to As in file and it is used as an ordinary tiled image instead.

Seamless at any size. The Scale slider sets the tile's edge (40–1600 px) and the drawing is repeated in both directions; both files here tile seamlessly, so the number is a legibility choice rather than a geometric constraint.

Strength is a knob, not a property of the file. Do not bake a low opacity into the artwork — the Strength slider fades the whole layer (0–100 %, default 20 %), and a file that is already faint cannot be turned up.

What the theme will refuse

The upload is parsed with DOMParser — inertly, nothing runs — and rejected if the root is not <svg>, if any element executes or embeds (script, foreignObject, iframe, embed, object, audio, video, animate, set), if an attribute is a real event handler (^on[a-z]+$), if a value opens a javascript: URL, or if an href points off the router. #fragment and data: references are fine — that is how a tile refers to its own <defs> and embeds a bitmap. The cap is 512 kB.

Licence

Both files are Apache-2.0, like the rest of this repository.