master
wiki-light-mode
Screenshot any Adom Wiki page in light mode and show it to the human via adom-shotlog.
The wiki is dark-only by design: color-scheme: dark, no theme toggle, no
light palette anywhere. Sometimes you still want a light rendering: for a doc,
a slide, print, or just preference. This skill synthesizes one that reads like
a real light theme.
adom-wiki pkg install adom/wiki-light-mode
wiki-light-shot adom/core
The same page, as the wiki serves it and as this tool captures it:

What one command does
- Logs in as you. Mints a single-use
adom-wiki auth loginmagic link (60s expiry, one per attempt) and opens it in a headless Chrome inside the container, so private pages work. No stored browser profile, no long-lived cookie. - Renders the page at 1920x1200 (configurable), waits for the app to settle.
- Applies the light overlay:
invert(1) hue-rotate(180deg)on the page, re-inverted on raster media so heroes and screenshots keep their true colors. - Proves it worked: decodes the PNG and computes mean luminance. A light capture scores ~195/255; if the page still reads dark (markup drift), you get a loud WARN instead of a silently-wrong image.
- Saves two shots, top of page and full page (height-capped, default 8000px), and injects them into adom-shotlog, where the broker surfaces the channel to the human and reports whether a viewer is on-screen.
Hardening
- Session containment: refuses any target host except
wiki.adom.inc, and blocks non-wiki subresource requests at the network layer. The logged-in session cannot be carried to another site. - Self-healing deps:
puppeteer-coreauto-installs into the skill package on first run (--no-save: the wikipackage.jsondependencies field, which holds wiki refs, is never touched). - Chrome discovery: puppeteer cache (newest version first), then system
binaries, then a
WIKI_LIGHT_CHROMEoverride. - Retries: fresh login link per attempt; one navigation retry; hard timeouts on every subprocess and navigation; browser cleanup on any exit.
- Honest failures: every error is an
ERROR:plus aHint:naming the next command to run.--jsongives a{ status, data, hints[] }envelope.
Flags
| Flag | Meaning |
|---|---|
--out DIR |
output directory (default ./wiki-light-shots) |
--channel NAME |
shotlog channel (default: page slug) |
--no-inject |
save PNGs only |
--no-auth |
anonymous (public pages only) |
--keep-dark |
capture as-is, no overlay |
--viewport WxH |
default 1920x1200 |
--full-max PX |
full-page height cap (default 8000) |
--json |
machine-readable envelope |
Requirements
Node 18+, a Chrome/Chromium on the machine (any puppeteer-cache or system
install; the tool finds it), and the adom-wiki CLI for auth. adom-shotlog
is optional but strongly recommended: without it the shots only land on disk,
where a human in a text thread will never see them.
# wiki-light-mode
Screenshot any Adom Wiki page in **light mode** and show it to the human via
[adom-shotlog](https://wiki.adom.inc/adom/adom-shotlog).
The wiki is dark-only by design: `color-scheme: dark`, no theme toggle, no
light palette anywhere. Sometimes you still want a light rendering: for a doc,
a slide, print, or just preference. This skill synthesizes one that reads like
a real light theme.
```bash
adom-wiki pkg install adom/wiki-light-mode
wiki-light-shot adom/core
```
The same page, as the wiki serves it and as this tool captures it:


## What one command does
1. **Logs in as you.** Mints a single-use `adom-wiki auth login` magic link
(60s expiry, one per attempt) and opens it in a headless Chrome inside the
container, so **private pages work**. No stored browser profile, no
long-lived cookie.
2. **Renders the page** at 1920x1200 (configurable), waits for the app to
settle.
3. **Applies the light overlay**: `invert(1) hue-rotate(180deg)` on the page,
re-inverted on raster media so heroes and screenshots keep their true
colors.
4. **Proves it worked**: decodes the PNG and computes mean luminance. A light
capture scores ~195/255; if the page still reads dark (markup drift), you
get a loud WARN instead of a silently-wrong image.
5. **Saves two shots**, top of page and full page (height-capped, default
8000px), and **injects them into adom-shotlog**, where the broker surfaces
the channel to the human and reports whether a viewer is on-screen.
## Hardening
- **Session containment**: refuses any target host except `wiki.adom.inc`, and
blocks non-wiki subresource requests at the network layer. The logged-in
session cannot be carried to another site.
- **Self-healing deps**: `puppeteer-core` auto-installs into the skill package
on first run (`--no-save`: the wiki `package.json` dependencies field, which
holds wiki refs, is never touched).
- **Chrome discovery**: puppeteer cache (newest version first), then system
binaries, then a `WIKI_LIGHT_CHROME` override.
- **Retries**: fresh login link per attempt; one navigation retry; hard
timeouts on every subprocess and navigation; browser cleanup on any exit.
- **Honest failures**: every error is an `ERROR:` plus a `Hint:` naming the
next command to run. `--json` gives a `{ status, data, hints[] }` envelope.
## Flags
| Flag | Meaning |
|---|---|
| `--out DIR` | output directory (default `./wiki-light-shots`) |
| `--channel NAME` | shotlog channel (default: page slug) |
| `--no-inject` | save PNGs only |
| `--no-auth` | anonymous (public pages only) |
| `--keep-dark` | capture as-is, no overlay |
| `--viewport WxH` | default `1920x1200` |
| `--full-max PX` | full-page height cap (default 8000) |
| `--json` | machine-readable envelope |
## Requirements
Node 18+, a Chrome/Chromium on the machine (any puppeteer-cache or system
install; the tool finds it), and the `adom-wiki` CLI for auth. `adom-shotlog`
is optional but strongly recommended: without it the shots only land on disk,
where a human in a text thread will never see them.