---
name: gog-pamphlet
description: Builds the printable pamphlet panels that go inside a GOG backup disc case — scrapes the store page, generates the QR badge, writes the per-title JSON and runs build_set.py to emit 483x629 SVG and PNG panels. Use this whenever the user gives a gog.com/en/game/... URL and wants a pamphlet, insert panels, or "the full flow" for a title; when they ask to rebuild, fix or restyle an existing title's panels; or when they mention AF/AB/BF/BB panels, the preservation certificate, or the production-history card. Also use it for batches of several GOG URLs at once. For case-insert artwork metadata alone (the disc case itself rather than the pamphlet), use gog-case-insert instead.
---
# GOG backup pamphlet
The user prints a small pamphlet for each personal backup disc, styled as a modern
reissue line. This skill turns a GOG store URL into finished print panels.
**This is cosmetic dressing** meant to make a shelf of burned discs look like a real
product line. Don't agonise over near-equivalent legal entities or hedge every
uncertainty — pick the most defensible option and say so in one line. But facts that
get *printed* should be true: dates, ratings, DLC and company names are worth a
minute of checking, because a wrong one is permanent once it's in the case.
Related: **gog-case-insert** covers the case artwork metadata. This skill reuses its
QR script. Don't duplicate its job.
## What gets built
Two cards, four panels, each **483 × 629** (127.79 × 166.42 mm at 96 dpi):
| Panel | Content | When |
|---|---|---|
| `
_AF` | Title, rating, copyright, publisher/developer, QR, logos | always |
| `_AB` | Requirements, time to beat, genre/tags, languages, DLC, Notes | always |
| `_BF` | Preservation certificate, GOG changelog, edition contents | preserved titles only |
| `_BB` | Production history, timeline, reception, credits | preserved titles only |
Health & safety, warranty and "also available" are **not** per-title — the user has a
separate stock print for those. Never add them here.
## The flow
### 1. Locate the folder — never duplicate
Search the pipeline before creating anything:
```bash
find . -ipath '**' -not -path '*/.*' | sort
```
Titles live in `0.1_Games in Progress/`, `0.2_Ready for Print/`, `0.4_Printed/` or
`0.5_Archive/`. If one already exists anywhere, **work in it** — many of these discs
are already printed and the case insert is done. Only create
`0.1_Games in Progress//{Assets,For Print}` for a genuinely new title.
Output goes to `/Pamphlet/`, and `build_set.py` makes `SVG/` and `PNG/`
inside it.
### 2. Scrape the store page
Open the URL in the browser, then **wait and scroll before reading page text** —
the preservation badge, changelog and HowLongToBeat figures lazy-load and read as
absent if you query straight after navigating. This has caused a wrong answer before.
```
navigate → wait 3s → scroll down 14 → wait 2-3s → javascript_exec
```
From `window.productcardData.cardProduct` take: id, title, publishers, developers,
globalReleaseDate, gogReleaseDate, copyrights, esrbRating, pegiRating, features,
size, localizations, supportedOperatingSystems, bonuses, and `cardProductDlcs`.
From `document.body.innerText` take: the preservation marker, "What improvements we
made" changelog, "Time to beat", "Genre:/Tags:", and critic/user scores.
Keep each extraction under ~2,500 characters or it truncates mid-object. For a batch,
chain several `navigate → wait → scroll → js` groups in one browser_batch call.
### 3. Decide preserved or not — this gates card B
A title is in the **GOG Preservation Program** when the page text contains
*"We made this game up to today's standards as part of GOG Preservation Program"*
(usually alongside "This game is 2026-ready" and "Windows 11 verified").
Test `/GOG Preservation Program/i` against the rendered text.
**The "Good Old Game" tag is not the signal.** Mad Max carries it; FFIX, Breath of
Fire IV and both Witchers are all in the programme and none of them do. Going by the
tag would have silently dropped card B from four titles.
Set `"preserved": true|false` in card2.json. A non-preserved build emits card A only
and deletes any stale BF/BB from a previous run.
### 4. QR badge
Reuse the case-insert script. It needs the `qrcode` package, so make a venv in the
scratchpad if there isn't one:
```bash
python3 -m venv "$SP/venv" && "$SP/venv/bin/pip" -q install qrcode
"$SP/venv/bin/python" .claude/skills/gog-case-insert/scripts/generate_qr_badge.py \
"" "" "/Assets/_qr.svg" 31 45
```
Check for an existing QR first. Some titles carry an older bare-QR style with no ID
header — regenerate as a badge and keep the old one as `*_qr_old_bareQR.svg`.
### 5. Logos
Check `0.3_Assets/Logos/Publishers-Developers/` before anything else — most major
studios are covered. **Ask before downloading any logo**, naming the file, source and
format. Say plainly when a defunct studio has no findable mark rather than inventing
one. SVG and PNG/JPEG both work.
### 6. Publisher address
GOG has no address field. Look up the current registered or business address of the
entity that actually holds the rights, and cite where it came from. Companies House,
the French company registry, and a publisher's own imprint/legal-notice page are all
good sources.
### 7. Production history — preserved titles only
Card B's back needs a real research pass: studio, engine, development story, release
dates by region, what changed in later editions, reception, credits. Verify against
Wikipedia or primary sources rather than recall — a plausible-sounding date that turns
out wrong is worse than omitting it. Write 3 paragraphs, a dated timeline, a reception
line and a credits line.
### 8. Write the JSON and build
Per-title JSON lives in `/Assets/`:
`_card1.json`, `_card2.json`, and `_card3.json` for preserved titles.
Field reference: `references/per-title-json.md`.
```bash
python3 "0.3_Assets/Templates/scripts/build_set.py" \
--title "" \
--data "/Assets" \
--assets "0.3_Assets" \
--out "/Pamphlet"
```
`--png-scale` (default 4 → 1932×2516) and `--no-png` are available.
### 9. Check the output
The builder prints the lowest element on each panel and **warns when anything drops
below the 157.4 mm safe line**. Treat that warning as a failure — fix it before
showing the user. Then look at the rendered PNGs; the guard measures vertical position
only, so it cannot see two elements colliding side by side.
## Traps that have actually bitten
**`cardProductDlcs: []` does not mean no DLC.** It's empty whenever the add-ons are
folded into the base product. Sleeping Dogs returned `[]` and ships 24 extensions; Mad
Max returned `[]` and ships ten. Check the store description, then ask the user.
**A null `esrbRating` does not mean unrated.** Septerra Core returns null for both
boards but is ESRB Teen. Check esrb.org, and ask the user — they own the game. If the
ESRB genuinely has no record (Look Outside), print the rating the user states but
caption the block "Content rating" rather than claiming an ESRB rating.
**Companies rename.** GOG's publisher field is current; the copyright string is
historical. Keep the copyright verbatim and use the present-day entity for the
imprint, naming the original publisher in the copyright line. Anachronox, Vampyr and
Septerra all needed this.
**Key discs.** Some releases hold a licence rather than an installer — inserting the
disc calls the download from GOG's servers, like a Switch 2 Game-Key Card. Nothing in
GOG's data reveals this, so **ask** when a title looks like a key release, and
describe it in the DLC block.
**Original vs re-release dates.** `globalReleaseDate` is often the re-release. The
certificate's "original release" should be the game's first release; check the
copyright string, which frequently spans both years.
## House style
Two typefaces and nothing else: **Barlow Condensed** for every title and label,
**Noto Sans** for all running text. Black on white; the only colour comes from logos
and the GOG seal.
**Title bars carry the title and nothing else.** A title with a colon splits — the
main name at full size, the edition on a second line.
One consistent style across the whole collection — these are a modern reissue line,
**not period reproductions**. Never propose 1990s pastiche, big-box or jewel-case
treatments; that was considered and rejected.
Cards adapt to thin data: a minimum-only requirements table collapses to one column,
a single language draws one column, missing HowLongToBeat figures drop the block, and
the ruled Notes area shrinks to whatever space is left — disappearing entirely when
bundled content needs the room. Bundled extras the user paid for outrank Notes.