scenri 0.20.7 → 0.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +5 -40
  3. package/dist/serve.js +45 -0
  4. package/package.json +1 -1
  5. package/studio-dist/assets/0.21.0-home-examples-J92K_hqk.webp +0 -0
  6. package/studio-dist/assets/{index-BDCs16Y1.css → index-CAJBx_f6.css} +1 -1
  7. package/studio-dist/assets/{index-B46fXqON.js → index-Ce9knTi7.js} +14 -14
  8. package/studio-dist/index.html +2 -2
  9. package/templates/demo-products/aldric-marine-40.json +13 -0
  10. package/templates/demo-products/barrier-balm.json +13 -0
  11. package/templates/demo-products/brume-08.json +13 -0
  12. package/templates/demo-products/calm-body-lotion.json +13 -0
  13. package/templates/demo-products/clairfont-rose.json +13 -0
  14. package/templates/demo-products/dune-candle.json +13 -0
  15. package/templates/demo-products/halvard-12.json +15 -0
  16. package/templates/demo-products/kultur-kefir.json +13 -0
  17. package/templates/demo-products/melo-peach-tea.json +13 -0
  18. package/templates/demo-products/nami-sparkling.json +13 -0
  19. package/templates/demo-products/nuit-cream.json +13 -0
  20. package/templates/demo-products/olea-hand-cream.json +13 -0
  21. package/templates/demo-products/ondine-serum.json +13 -0
  22. package/templates/demo-products/pli-bag.json +13 -0
  23. package/templates/demo-products/soleado-lemon.json +13 -0
  24. package/templates/demo-products/sora-sandal.json +13 -0
  25. package/templates/demo-products/velin-silk-wash.json +13 -0
  26. package/templates/demo-products/verdo-greens.json +13 -0
  27. package/templates/presenters/anaya.json +1 -1
  28. package/templates/presenters/odette.json +1 -1
  29. package/templates/presenters/zuri.json +1 -1
  30. package/templates/previews/demo-products/aldric-marine-40/three-quarter.jpg +0 -0
  31. package/templates/previews/demo-products/barrier-balm/three-quarter.jpg +0 -0
  32. package/templates/previews/demo-products/brume-08/three-quarter.jpg +0 -0
  33. package/templates/previews/demo-products/calm-body-lotion/three-quarter.jpg +0 -0
  34. package/templates/previews/demo-products/clairfont-rose/three-quarter.jpg +0 -0
  35. package/templates/previews/demo-products/dune-candle/three-quarter.jpg +0 -0
  36. package/templates/previews/demo-products/halvard-12/three-quarter.jpg +0 -0
  37. package/templates/previews/demo-products/kultur-kefir/three-quarter.jpg +0 -0
  38. package/templates/previews/demo-products/melo-peach-tea/three-quarter.jpg +0 -0
  39. package/templates/previews/demo-products/nami-sparkling/three-quarter.jpg +0 -0
  40. package/templates/previews/demo-products/nuit-cream/three-quarter.jpg +0 -0
  41. package/templates/previews/demo-products/olea-hand-cream/three-quarter.jpg +0 -0
  42. package/templates/previews/demo-products/ondine-serum/three-quarter.jpg +0 -0
  43. package/templates/previews/demo-products/pli-bag/three-quarter.jpg +0 -0
  44. package/templates/previews/demo-products/soleado-lemon/three-quarter.jpg +0 -0
  45. package/templates/previews/demo-products/sora-sandal/three-quarter.jpg +0 -0
  46. package/templates/previews/demo-products/velin-silk-wash/three-quarter.jpg +0 -0
  47. package/templates/previews/demo-products/verdo-greens/three-quarter.jpg +0 -0
  48. package/templates/previews/showcase/aldric-marine-40.jpg +0 -0
  49. package/templates/previews/showcase/barrier-balm.jpg +0 -0
  50. package/templates/previews/showcase/brume-08.jpg +0 -0
  51. package/templates/previews/showcase/calm-body-lotion.jpg +0 -0
  52. package/templates/previews/showcase/clairfont-rose.jpg +0 -0
  53. package/templates/previews/showcase/dune-candle.jpg +0 -0
  54. package/templates/previews/showcase/halvard-12.jpg +0 -0
  55. package/templates/previews/showcase/kultur-kefir.jpg +0 -0
  56. package/templates/previews/showcase/melo-peach-tea.jpg +0 -0
  57. package/templates/previews/showcase/nami-sparkling.jpg +0 -0
  58. package/templates/previews/showcase/nuit-cream.jpg +0 -0
  59. package/templates/previews/showcase/olea-hand-cream.jpg +0 -0
  60. package/templates/previews/showcase/ondine-serum.jpg +0 -0
  61. package/templates/previews/showcase/pli-bag.jpg +0 -0
  62. package/templates/previews/showcase/soleado-lemon.jpg +0 -0
  63. package/templates/previews/showcase/sora-sandal.jpg +0 -0
  64. package/templates/previews/showcase/velin-silk-wash.jpg +0 -0
  65. package/templates/previews/showcase/verdo-greens.jpg +0 -0
  66. package/templates/previews/wet-ribs.jpg +0 -0
  67. package/templates/showcase/72-dark-bite.json +1 -1
  68. package/templates/showcase/72-dark-palm-shade.json +1 -1
  69. package/templates/showcase/72-dark-snap.json +1 -1
  70. package/templates/showcase/acetates-harbour-light.json +1 -1
  71. package/templates/showcase/acetates-ice-block.json +1 -1
  72. package/templates/showcase/acetates-salt-flat.json +1 -1
  73. package/templates/showcase/acetates-silk-drape.json +1 -1
  74. package/templates/showcase/aldric-marine-40.json +29 -0
  75. package/templates/showcase/aperitivo-chrome-bar.json +1 -1
  76. package/templates/showcase/aperitivo-pit.json +1 -1
  77. package/templates/showcase/aperitivo-ruby-pour.json +1 -1
  78. package/templates/showcase/aperitivo-tomato-vine.json +1 -1
  79. package/templates/showcase/barrier-balm.json +29 -0
  80. package/templates/showcase/barrier-cream-caddy.json +1 -1
  81. package/templates/showcase/barrier-cream-cheek.json +1 -1
  82. package/templates/showcase/barrier-cream-ice-core.json +1 -1
  83. package/templates/showcase/barrier-cream-oats.json +1 -1
  84. package/templates/showcase/bowler-bonnet-rain.json +1 -1
  85. package/templates/showcase/bowler-car-exit.json +1 -1
  86. package/templates/showcase/bowler-cobalt-room.json +1 -1
  87. package/templates/showcase/bowler-red-blade.json +1 -1
  88. package/templates/showcase/brume-08.json +29 -0
  89. package/templates/showcase/c15-apricot-ledge.json +1 -1
  90. package/templates/showcase/c15-dew-bed.json +1 -1
  91. package/templates/showcase/c15-morning-drop.json +1 -1
  92. package/templates/showcase/c15-orange-pool.json +1 -1
  93. package/templates/showcase/calm-body-lotion.json +29 -0
  94. package/templates/showcase/capsule-block-tower.json +1 -1
  95. package/templates/showcase/capsule-model-village.json +1 -1
  96. package/templates/showcase/capsule-stoop.json +1 -1
  97. package/templates/showcase/casserole-long-table.json +1 -1
  98. package/templates/showcase/casserole-steam.json +1 -1
  99. package/templates/showcase/casserole-tomatoes.json +1 -1
  100. package/templates/showcase/chug-courtside.json +1 -1
  101. package/templates/showcase/chug-long-shadow.json +1 -1
  102. package/templates/showcase/chug-mountain-stream.json +1 -1
  103. package/templates/showcase/chug-waterline.json +1 -1
  104. package/templates/showcase/clairfont-rose.json +29 -0
  105. package/templates/showcase/collagen-berry-splash.json +1 -1
  106. package/templates/showcase/collagen-morning-shake.json +1 -1
  107. package/templates/showcase/collagen-paper-garden.json +1 -1
  108. package/templates/showcase/court-72-baseline.json +1 -1
  109. package/templates/showcase/court-72-checker-sit.json +1 -1
  110. package/templates/showcase/court-72-fisheye-steps.json +1 -1
  111. package/templates/showcase/court-72-salt-flat.json +1 -1
  112. package/templates/showcase/cricket-jumper-green.json +1 -1
  113. package/templates/showcase/cricket-jumper-hamper.json +1 -1
  114. package/templates/showcase/cricket-jumper-sheets.json +1 -1
  115. package/templates/showcase/dune-candle.json +29 -0
  116. package/templates/showcase/field-watch-boulder-gap.json +1 -1
  117. package/templates/showcase/field-watch-corner.json +1 -1
  118. package/templates/showcase/field-watch-helm.json +1 -1
  119. package/templates/showcase/field-watch-ice-core.json +1 -1
  120. package/templates/showcase/fig-leaf-frost-window.json +1 -1
  121. package/templates/showcase/fig-leaf-lanterns.json +1 -1
  122. package/templates/showcase/fig-leaf-still-life.json +1 -1
  123. package/templates/showcase/fig-vetiver-travertine.json +1 -1
  124. package/templates/showcase/green-04-ice-trough.json +1 -1
  125. package/templates/showcase/green-04-ingredients.json +1 -1
  126. package/templates/showcase/green-04-track.json +1 -1
  127. package/templates/showcase/gummies-bedside.json +1 -1
  128. package/templates/showcase/gummies-cherry-heap.json +1 -1
  129. package/templates/showcase/gummies-moonlit-pillow.json +1 -1
  130. package/templates/showcase/halvard-12.json +29 -0
  131. package/templates/showcase/hibiscus-dew-bed.json +1 -1
  132. package/templates/showcase/hibiscus-flower-nest.json +1 -1
  133. package/templates/showcase/hibiscus-long-lunch.json +1 -1
  134. package/templates/showcase/hoops-honey-drip.json +1 -1
  135. package/templates/showcase/hoops-painted-canvas.json +1 -1
  136. package/templates/showcase/hoops-pink-smoke.json +1 -1
  137. package/templates/showcase/hoops-sculpted-hands.json +1 -1
  138. package/templates/showcase/kultur-kefir.json +33 -0
  139. package/templates/showcase/lounge-chair-reading.json +1 -1
  140. package/templates/showcase/lounge-chair-snowfall.json +1 -1
  141. package/templates/showcase/lounge-chair-travertine.json +1 -1
  142. package/templates/showcase/melo-peach-tea.json +29 -0
  143. package/templates/showcase/nami-sparkling.json +33 -0
  144. package/templates/showcase/noir-cedar-char.json +1 -1
  145. package/templates/showcase/noir-cedar-coal.json +1 -1
  146. package/templates/showcase/noir-cedar-silk-drape.json +1 -1
  147. package/templates/showcase/noir-cedar-smoke.json +1 -1
  148. package/templates/showcase/nuit-cream.json +33 -0
  149. package/templates/showcase/olea-hand-cream.json +29 -0
  150. package/templates/showcase/ondine-serum.json +29 -0
  151. package/templates/showcase/open-buds-hands.json +1 -1
  152. package/templates/showcase/open-buds-surf-check.json +1 -1
  153. package/templates/showcase/open-buds-vinyl.json +1 -1
  154. package/templates/showcase/orris-collarbone.json +1 -1
  155. package/templates/showcase/orris-salt-pan.json +1 -1
  156. package/templates/showcase/orris-waterline.json +1 -1
  157. package/templates/showcase/orris-window-stripe.json +1 -1
  158. package/templates/showcase/over-ear-arch.json +1 -1
  159. package/templates/showcase/over-ear-balloons.json +1 -1
  160. package/templates/showcase/over-ear-glass-blocks.json +1 -1
  161. package/templates/showcase/over-ear-pool-edge.json +1 -1
  162. package/templates/showcase/pli-bag.json +33 -0
  163. package/templates/showcase/puffer-container-lean.json +1 -1
  164. package/templates/showcase/puffer-foil-jump.json +1 -1
  165. package/templates/showcase/puffer-ghost-snow.json +1 -1
  166. package/templates/showcase/puffer-snow-street.json +1 -1
  167. package/templates/showcase/ridgeline-boulder-gap.json +1 -1
  168. package/templates/showcase/ridgeline-chalk-sprint.json +1 -1
  169. package/templates/showcase/ridgeline-stream-leap.json +1 -1
  170. package/templates/showcase/ridgeline-tyre-top.json +1 -1
  171. package/templates/showcase/scarlet-beauty-dish.json +1 -1
  172. package/templates/showcase/scarlet-red-blade.json +1 -1
  173. package/templates/showcase/scarlet-summer-laugh.json +1 -1
  174. package/templates/showcase/scarlet-swatch.json +1 -1
  175. package/templates/showcase/soleado-lemon.json +29 -0
  176. package/templates/showcase/sora-sandal.json +33 -0
  177. package/templates/showcase/spf-poolside.json +1 -1
  178. package/templates/showcase/spf-salt-flat.json +1 -1
  179. package/templates/showcase/spf-shadow-hand.json +1 -1
  180. package/templates/showcase/spf-yellow-field.json +1 -1
  181. package/templates/showcase/sun-coin-collarbone.json +1 -1
  182. package/templates/showcase/sun-coin-hair-nest.json +1 -1
  183. package/templates/showcase/sun-coin-sundial.json +1 -1
  184. package/templates/showcase/sun-coin-white-glove.json +1 -1
  185. package/templates/showcase/velin-silk-wash.json +29 -0
  186. package/templates/showcase/verdo-greens.json +29 -0
  187. package/templates/showcase/wash-fig-leaves.json +1 -1
  188. package/templates/showcase/wash-slate-shower.json +1 -1
  189. package/templates/showcase/wash-steam.json +1 -1
  190. package/templates/showcase/yuzu-arch-lean.json +1 -1
  191. package/templates/showcase/yuzu-container-sill.json +1 -1
  192. package/templates/showcase/yuzu-flash-walk.json +1 -1
  193. package/templates/showcase/yuzu-ice-burst.json +1 -1
  194. package/templates/wet-ribs.json +15 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.21.2](https://github.com/tonygorb/Scenri/compare/v0.21.1...v0.21.2) (2026-10-05)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * declare the docs-impact script's types so its test typechecks ([f484a2d](https://github.com/tonygorb/Scenri/commit/f484a2daaca5e1d1fae65112d5066c6402a270a4))
9
+ * **library:** replace the Halvard 12 product photo ([2a2172d](https://github.com/tonygorb/Scenri/commit/2a2172da4358935c2faf43f646a163d976fa4db1))
10
+ * **library:** replace the Halvard 12 product photo ([1d06193](https://github.com/tonygorb/Scenri/commit/1d0619397bbf5a39c4b982db5cde1c7d9b8bbf3b))
11
+
12
+ ## [0.21.1](https://github.com/tonygorb/Scenri/compare/v0.21.0...v0.21.1) (2026-10-04)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * let the new example packshots through the package check ([45a0174](https://github.com/tonygorb/Scenri/commit/45a017453fed5d5a206e27d9e585a0d0b31ace95))
18
+ * let the new example packshots through the package check ([6eef8f8](https://github.com/tonygorb/Scenri/commit/6eef8f8b44c06bd53db3052f4423475f2befc394))
19
+
20
+ ## [0.21.0](https://github.com/tonygorb/Scenri/compare/v0.20.7...v0.21.0) (2026-10-04)
21
+
22
+
23
+ ### Features
24
+
25
+ * bring the website examples and Wet Ribs into the studio ([a859481](https://github.com/tonygorb/Scenri/commit/a859481cf33f1a0f2cd724c0adca23a68ba9c5ca))
26
+ * bring the website examples and Wet Ribs into the studio ([013aead](https://github.com/tonygorb/Scenri/commit/013aeadc4e1aca23ee1bef816ba743dbab001ade))
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * patch the multipart reader against two denial-of-service advisories ([adbf2d3](https://github.com/tonygorb/Scenri/commit/adbf2d30ff8d7e582f0d43d49820e3732194b1d7))
32
+ * patch the multipart reader against two denial-of-service advisories ([b854c58](https://github.com/tonygorb/Scenri/commit/b854c58529fdb84a1e922ffbfca70fe32bf4c071))
33
+
3
34
  ## [0.20.7](https://github.com/tonygorb/Scenri/compare/v0.20.6...v0.20.7) (2026-10-03)
4
35
 
5
36
 
package/README.md CHANGED
@@ -15,7 +15,7 @@ Save a brand's products from real photos, the people in its shots and its places
15
15
 
16
16
  **Get started.** You need [Node.js](https://nodejs.org) 22 or newer, and a paid ChatGPT plan (used through Codex CLI, which Scenri sets up for you) or an [OpenRouter](https://openrouter.ai) API key to make pictures. Scenri itself has no account and no fees.
17
17
 
18
- <sub>If `npm --version` prints 12, run `npm config set allow-scripts=better-sqlite3 --location=user` once first ([why](https://github.com/tonygorb/scenri/blob/main/docs/INSTALL.md#troubleshooting)). Then:</sub>
18
+ <sub>If `npm --version` prints 12, run `npm config set allow-scripts=better-sqlite3 --location=user` once first ([why](https://github.com/tonygorb/scenri/blob/main/docs/TROUBLESHOOTING.md)). Then:</sub>
19
19
 
20
20
  ```bash
21
21
  npx scenri
@@ -65,21 +65,13 @@ The brand kit lives in Settings and is the part that keeps output consistent. Na
65
65
 
66
66
  ## Run it
67
67
 
68
- Scenri runs on [Node.js](https://nodejs.org), version 22 or newer. If you are not sure you have it, or terminals are not part of your day, the **[install guide](https://github.com/tonygorb/scenri/blob/main/docs/INSTALL.md)** covers every step for macOS, Windows and Linux. With Node in place:
68
+ Node.js 22 or newer, then:
69
69
 
70
70
  ```bash
71
71
  npx scenri
72
72
  ```
73
73
 
74
- That is the whole install. npm asks once whether to proceed, downloads the current release, and opens `http://127.0.0.1:4747`. Keep the terminal window open while you work; closing it stops Scenri. Tomorrow the same command opens it again, with everything where you left it. Nothing here needs an administrator.
75
-
76
- On Windows, if PowerShell answers `npx.ps1 cannot be loaded because running scripts is disabled on this system`, that is a stock Windows setting, not a fault: type `npx.cmd scenri` instead, or use Command Prompt. Still no administrator required.
77
-
78
- On macOS and Windows, Scenri then asks once whether to put a **Scenri icon on your desktop**. Say yes and from then on a double-click starts Scenri and opens it in your browser, no terminal needed; the icon works offline and keeps working across updates. Said no? Settings, then Local access, then **Add to desktop**, or `npx scenri desktop` in a terminal. Scenri stays what it is, a local server and your browser: the icon is a launcher, not an app.
79
-
80
- Generation runs on **Codex CLI**, an official helper from OpenAI that draws on your own paid ChatGPT plan (Codex image generation is not part of the Free plan). No API key to paste, and Scenri never charges you. Each image spends some of your plan's Codex usage. You do not have to set it up by hand: if it is missing, Scenri offers to install it and to sign you in, both from the app. No ChatGPT plan? Add your own key from an image provider in Settings instead, see [Engines](#engines).
81
-
82
- One dependency, `better-sqlite3`, runs an install script that fetches its native binary. The npm that ships with current Node releases (npm 11) runs it without asking. npm 12 blocks dependency install scripts by default, so if `npm --version` prints 12, allow this one once with `npm config set allow-scripts=better-sqlite3 --location=user` before you run `npx scenri`. Something not starting? See [troubleshooting](https://github.com/tonygorb/scenri/blob/main/docs/INSTALL.md#troubleshooting).
74
+ The [install guide](https://github.com/tonygorb/scenri/blob/main/docs/INSTALL.md) covers macOS, Windows, and Linux, including the desktop icon and the PowerShell case. The [quick start](https://github.com/tonygorb/scenri/blob/main/docs/QUICKSTART.md) is the shortest path to one Shot. Generation is a separate step: [connect Codex or a provider key](https://github.com/tonygorb/scenri/blob/main/docs/CONNECT.md). If `npm --version` prints 12, see [troubleshooting](https://github.com/tonygorb/scenri/blob/main/docs/TROUBLESHOOTING.md) before the first run.
83
75
 
84
76
  <details>
85
77
  <summary>Run from source</summary>
@@ -94,41 +86,14 @@ pnpm dev # starts the server on 127.0.0.1:4747
94
86
 
95
87
  </details>
96
88
 
97
- ## First five minutes
98
-
99
- Scenri offers to walk you through your first shot, one step at a time, and Learn holds the rest. The short version:
100
-
101
- 1. **Paste a website URL.** Scenri reads the public pages and drafts the kit: name, logo, palette. If the site sells things, it offers to add the products too.
102
- 2. **Describe a shot.** In the composer, `$` reaches for a product, `@` for a presenter, `/` for a scene, and `#` for a colour. Everything between them is your own words.
103
- 3. **Generate on Codex CLI.** Runs on your own paid ChatGPT plan, so there is no key and no per-image charge from us.
104
- 4. **Refine it.** Open the shot and say what to change. Each refinement joins the trail under the picture.
105
- 5. **Add your own key** in Settings, Providers to run on OpenRouter, Replicate or fal instead.
106
-
107
89
  ## Why it is built this way
108
90
 
109
- - **Iteration is the product.** Not a prompt box: every shot keeps its trail of refinements, and the ones you star collect in Keepers.
91
+ - **Iteration is the product.** Not a prompt box: every shot keeps its trail of refinements, and the ones you mark collect in Keepers.
110
92
  - **Your brands are files, not hostages.** `.brand` is an open, documented format under a permissive license. Email one to a client. Any tool can adopt it.
111
93
  - **Your AI, your cost.** Bring your own ChatGPT plan through Codex CLI, or an API key. You pay the provider directly, at its own price. Scenri sells no credits and adds no markup.
112
94
  - **Local first, and it means it.** No account, no telemetry, nothing uploaded to us. Scenri runs on this computer, and answers other devices on your own network only when they bring its six-digit code (Settings, Local access). It makes exactly two requests on its own behalf: a version-number check against npm every six hours so updates can announce themselves (and, when one is found, the download of that release from npm, staged locally until you choose to restart), and the download of the library imagery archive from GitHub, once for each library version a release pins. Nothing about you or your work is sent in either, and both turn off: in Settings or `SCENRI_NO_UPDATE_CHECK=1` for the first, `SCENRI_NO_CONTENT_FETCH=1` for the second ([how updates work](https://github.com/tonygorb/scenri/blob/main/docs/updates.md), [what goes where](https://github.com/tonygorb/scenri/blob/main/PRIVACY.md)).
113
95
 
114
- ## Engines
115
-
116
- | Engine | What it costs you | Needs | Carries a Product or Presenter |
117
- |---|---|---|---|
118
- | **Codex CLI** | your ChatGPT plan's Codex usage | a paid ChatGPT plan; the app installs Codex and signs you in | yes, up to 5 references |
119
- | OpenRouter | about $0.04 an image | API key | yes, up to 4 references |
120
- | Replicate | about $0.003 an image | API token | no |
121
- | fal | about $0.006 an image (fal bills per megapixel) | API key | no |
122
-
123
- Codex CLI is the default because it needs no key and because it carries the most reference images: a shot that has to keep both a product and a person accurate needs the room.
124
-
125
- It is not free. Paid ChatGPT plans include Codex usage, and each image spends some of it: OpenAI says image generation uses it three to five times faster than a plain turn. OpenAI meters that, not Scenri, so spend caps do not apply to this engine.
126
-
127
- **Without a paid ChatGPT plan**, use your own provider key. OpenRouter is the one to pick if your shots name a Product or a Presenter. Replicate and fal take no reference images, so Scenri refuses those shots on them rather than generating something that only looks right. Edits on Replicate and fal cost more than a new image.
128
-
129
- Keys are stored in your local library folder, sent only to that provider, and never returned by the API. Set a monthly spend cap per engine in Settings, Providers.
130
-
131
- Your Codex session is yours: Scenri runs the official `codex` commands on your machine and never reads, copies or stores the credential. That is also why Scenri never pools user plans: a plan is licensed to the person who pays for it, not to a service reselling it to other people. Any hosted version of Scenri, if one ever exists, would run API-priced engines only.
96
+ Providers, costs, and what each one can carry are in [Connect image generation](https://github.com/tonygorb/scenri/blob/main/docs/CONNECT.md).
132
97
 
133
98
  ## Configuration
134
99
 
package/dist/serve.js CHANGED
@@ -16383,6 +16383,51 @@ function registerImageRoutes(app, deps) {
16383
16383
  var HEADLINES_KEPT = 5;
16384
16384
  var FIRST_PUBLIC = "0.2.0";
16385
16385
  var RELEASES = [
16386
+ {
16387
+ version: "0.21.2",
16388
+ date: "2026-10-05",
16389
+ title: "Halvard 12 has a full-size product photo",
16390
+ sections: [
16391
+ {
16392
+ heading: "Examples",
16393
+ body: "The whisky bottle now has a photo as large as the other products, so its label stays readable, and a shot made from it is told every word on that label."
16394
+ }
16395
+ ]
16396
+ },
16397
+ {
16398
+ version: "0.21.1",
16399
+ date: "2026-10-04",
16400
+ title: "The new examples' product photos ship with the app",
16401
+ sections: [
16402
+ {
16403
+ heading: "Examples",
16404
+ body: "Each of the eighteen new examples brings its own product photo, so a shot that uses one starts from that photo."
16405
+ }
16406
+ ]
16407
+ },
16408
+ {
16409
+ version: "0.21.0",
16410
+ date: "2026-10-04",
16411
+ title: "New examples on Home, and Refine has its own look",
16412
+ sections: [
16413
+ {
16414
+ heading: "Examples",
16415
+ body: "Eighteen new examples sit on Home, each a real product in a real place. Wet Ribs joins the scenes: wet orange ribbed rubber under a hard sun.",
16416
+ image: {
16417
+ file: "0.21.0-home-examples.webp",
16418
+ alt: "Home open on All examples, the wall showing Ol\xE9a Hand Cream and Halvard 12 among the shots."
16419
+ }
16420
+ },
16421
+ {
16422
+ heading: "Refine",
16423
+ body: "While a shot is being refined, the button is the light pill. Closing that state on the composer clears only the refinement, and the shot stays."
16424
+ },
16425
+ {
16426
+ heading: "Security",
16427
+ body: "The reader that takes uploaded files on the local server is on its patched release, for two denial-of-service advisories. Nothing about how Scenri works changes."
16428
+ }
16429
+ ]
16430
+ },
16386
16431
  {
16387
16432
  version: "0.20.7",
16388
16433
  date: "2026-10-03",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scenri",
3
- "version": "0.20.7",
3
+ "version": "0.21.2",
4
4
  "author": "Tony Gorb <hello@scenri.co>",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",