Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
a0d090d
README and site: real box art in the shots, a tighter top, every 1.0.…
tarikbc Nov 9, 2026
353744e
A 1:52 tour video of ZyperOS, made from the launcher's own frames
tarikbc Nov 9, 2026
3ab7307
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
872a422
Tour v2: 75 seconds, quicker, and the features v1 left out
tarikbc Nov 9, 2026
34ff7b0
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
f08494b
Tour: about 20% slower, 95 seconds
tarikbc Nov 9, 2026
405c56e
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
3d0ea8c
README and site: on in 2 s, back in the game; Coming from the stock OS?
tarikbc Nov 9, 2026
2f67fce
Tour v3 in progress: boot race, power off and back, video snap; the m…
tarikbc Nov 9, 2026
62dbd66
Tour v3: on Leap, with the 2-second start, power off and back, and vi…
tarikbc Nov 9, 2026
30db70a
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
0ca68bf
Tour: the video snap beat plays any snap file, frame by frame (SNAP_S…
tarikbc Nov 9, 2026
a481850
Tour: the video snap beat plays Symphony of the Night's real ScreenSc…
tarikbc Nov 9, 2026
672c6dd
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
31f6e06
Tour: the empty card as a short story after File Transfer
tarikbc Nov 9, 2026
5840663
Merge remote-tracking branch 'origin/video-refresh' into pages-refresh
tarikbc Nov 9, 2026
c3ce319
README and site: the ZyperOS Discord, as a badge, in the nav and foot…
tarikbc Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 101 additions & 34 deletions README.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion docs/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,8 @@ Every shot names the screen and the focused item on stderr, so a sequence of
them reads back as a list of what was actually drawn.

`tools/readme-shots.py` captures the README and website gallery in both themes,
with an isolated demonstration library and optional local artwork. See
with an isolated demonstration library; `--art` gives its games their real box
art from libretro-thumbnails, cached outside the repository. See
[`res/readme/README.md`](../res/readme/README.md) for capture provenance and
the refresh steps.

Expand Down
6 changes: 3 additions & 3 deletions mk/site.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ done
cp "$ROOT/site/models/pixel2.glb" "$ROOT/site/models/pixel2-poster.png" "$OUT/models/"
cp "$ROOT/res/web/icon.svg" "$ROOT/res/web/zyper.svg" "$OUT/img/"
# Every screenshot in the light theme; dark/ only for the light-and-dark section
for f in lockup lockup-light systems gallery shelf info cheevos cheevo-notice menu scraper mp4 storage nowplaying portal \
battery gamemenu controls-hotkeys media; do
for f in lockup lockup-light systems gallery shelf shelf-n64 shelf-snes favorites info cheevos cheevo-notice menu scraper \
mp4 storage nowplaying portal portmaster battery gamemenu controls-hotkeys media; do
cp "$ROOT/res/readme/$f.png" "$OUT/img/"
done
for f in systems menu; do
for f in shelf-n64 systems; do
cp "$ROOT/res/readme/dark/$f.png" "$OUT/img/dark/"
done
# Zyper's photo, in The name
Expand Down
66 changes: 40 additions & 26 deletions res/readme/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

The screenshots in this folder show the current launcher in Beard, the light
theme: the README and the website show every screen in light. `dark/` holds
the screens their light-and-dark sections show in Salt & Pepper, the home,
the ZyperOS menu and a game's Cover and Video page, and the top bar's shot (`topbar`, the song's note and the
the screens their light-and-dark sections show in Salt & Pepper, the
Nintendo 64 shelf, the home, the ZyperOS menu and a game's Cover and Video
page, and the top bar's shot (`topbar`, the song's note and the
headphone mark) in both themes. The 3D device on the website shows the light ones too.
The logo/wordmark files remain the branding generator's output.

Expand All @@ -12,41 +13,54 @@ mockups or photographs of a running device. The three `portal` shots are the
File Transfer page (res/web) in headless Chrome, at a computer's 1280x800 and
a phone's 390x844, served by the real routes over a scratch card of freeware
names (build-native/portal-serve). The source commit, command flags
and output hashes are recorded in `captures.json`, which also names the frames
reused from the sessions that built a screen.

The capture uses temporary demonstration cards: empty game and music files
with freeware or stand-in names, a card with no games for the empty home, and
curated Metal Gear Solid metadata. The launcher draws every game card itself:
no box art and no game screens are included. The Cover and Video shots
(`media`, `media-look`, `media-video`) show stand-in pictures readme-shots.py
draws in the shapes a source offers (a box, a 3D box, a title screen, a fan's
cover), blends of one color with a diamond, none of any game's art. The home screens show the
system art in res/system-icons. MP4 shows clearly named demonstration albums,
a film named after Blender's freely licensed Sintel and the public-domain
Treasure Island as a book, all of them empty files. The games page's heart
marks two demonstration favorites, set for that shot alone.
Achievement rows, playback timing, transfer progress, the hotspot, the
Scraper's counts, the Storage page and the System Update page use the launcher's built-in shot
fixtures and stand-in values. No ROMs, audio, account credentials or personal
save data are included or required. The clock and battery are fixed preview
values.
and output hashes are recorded in `captures.json`, with the art each one
shows.

The capture uses temporary demonstration cards: empty game files named after
well-known games, empty music files with stand-in names, a card with no games
for the empty home, and curated Metal Gear Solid details (the synopsis is in
my words). The shots show the games' real box art, as the launcher's own
Scraper would put it on the card: covers, title screens and screenshots from
the [libretro-thumbnails](https://github.com/libretro-thumbnails) sets,
fetched once into a cache on the computer that takes the shots, outside this
repository. The Cover and Video shots (`media`, `media-look`, `media-video`)
show Metal Gear Solid's boxes, title screen and screenshot in the places the
page's fixture names; the in-game menu and Controls shots stand over a
Spyro the Dragon screenshot; the video snaps behind the play marks are two
seconds of each game's libretro screenshot. `captures.json` names every
picture used, its set and its checksum. The games and their art belong to
their owners: ZyperOS ships no games and no art, and only these composed
screenshots are in the repository.

The home screens show the system art in res/system-icons. MP4 shows clearly
named demonstration albums, a film named after Blender's freely licensed
Sintel and the public-domain Treasure Island as a book, all of them empty
files. The ScummVM shelf shows the freeware games ScummVM's own site gives
away, with their libretro covers. The made-up port behind the Ports menu and
Controls shots (tools/fixtures/ports) has no art. The games pages' hearts
mark demonstration favorites, set for those shots alone.
Achievement rows and badges, playback timing, transfer progress, the hotspot,
the Scraper's counts, the Storage page and the System Update page use the
launcher's built-in shot fixtures and stand-in values. No ROMs, audio,
account credentials or personal save data are included or required. The
clock and battery are fixed preview values.

## Refresh

```sh
make native
python3 tools/readme-shots.py
python3 tools/readme-shots.py --art
```

Review `build/readme-shots/light/` and `dark/`. Copy the approved PNGs to this
folder and `dark/`, and copy `manifest.json` to `captures.json`. Names after
the command take only those shots (`python3 tools/readme-shots.py menu`).
`--art-dir` copies local covers into the card; leave it out for these
pictures. The page shots need Google Chrome (`--chrome` names another
`--art` fetches what the cache lacks from raw.githubusercontent.com the first
time (ffmpeg makes the video snaps) and nothing after; `--art-cache` moves
the cache. Without `--art` every game wears the launcher's generated card. The page shots need Google Chrome (`--chrome` names another
Chromium, `--no-page` leaves them out), and the page's server listens on port
8080 or 8081 while they are taken. The launcher and the page make no requests
outside this computer for the captures. A browser's frames are not quite
8080 or 8081 while they are taken. Apart from that first fetch of the art, the launcher and the page make no
requests outside this computer for the captures. A browser's frames are not quite
repeatable: a shadow can differ by a few pixels from run to run, and the
upload's percentage by its timing.

Expand Down
Binary file modified res/readme/battery.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading