scenri 0.20.6 → 0.21.1

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 (193) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/serve.js +49 -11
  3. package/package.json +1 -1
  4. package/studio-dist/assets/0.21.0-home-examples-J92K_hqk.webp +0 -0
  5. package/studio-dist/assets/{index-BDCs16Y1.css → index-CAJBx_f6.css} +1 -1
  6. package/studio-dist/assets/{index-B46fXqON.js → index-Ce9knTi7.js} +14 -14
  7. package/studio-dist/index.html +2 -2
  8. package/templates/demo-products/aldric-marine-40.json +13 -0
  9. package/templates/demo-products/barrier-balm.json +13 -0
  10. package/templates/demo-products/brume-08.json +13 -0
  11. package/templates/demo-products/calm-body-lotion.json +13 -0
  12. package/templates/demo-products/clairfont-rose.json +13 -0
  13. package/templates/demo-products/dune-candle.json +13 -0
  14. package/templates/demo-products/halvard-12.json +13 -0
  15. package/templates/demo-products/kultur-kefir.json +13 -0
  16. package/templates/demo-products/melo-peach-tea.json +13 -0
  17. package/templates/demo-products/nami-sparkling.json +13 -0
  18. package/templates/demo-products/nuit-cream.json +13 -0
  19. package/templates/demo-products/olea-hand-cream.json +13 -0
  20. package/templates/demo-products/ondine-serum.json +13 -0
  21. package/templates/demo-products/pli-bag.json +13 -0
  22. package/templates/demo-products/soleado-lemon.json +13 -0
  23. package/templates/demo-products/sora-sandal.json +13 -0
  24. package/templates/demo-products/velin-silk-wash.json +13 -0
  25. package/templates/demo-products/verdo-greens.json +13 -0
  26. package/templates/presenters/anaya.json +1 -1
  27. package/templates/presenters/odette.json +1 -1
  28. package/templates/presenters/zuri.json +1 -1
  29. package/templates/previews/demo-products/aldric-marine-40/three-quarter.jpg +0 -0
  30. package/templates/previews/demo-products/barrier-balm/three-quarter.jpg +0 -0
  31. package/templates/previews/demo-products/brume-08/three-quarter.jpg +0 -0
  32. package/templates/previews/demo-products/calm-body-lotion/three-quarter.jpg +0 -0
  33. package/templates/previews/demo-products/clairfont-rose/three-quarter.jpg +0 -0
  34. package/templates/previews/demo-products/dune-candle/three-quarter.jpg +0 -0
  35. package/templates/previews/demo-products/halvard-12/three-quarter.jpg +0 -0
  36. package/templates/previews/demo-products/kultur-kefir/three-quarter.jpg +0 -0
  37. package/templates/previews/demo-products/melo-peach-tea/three-quarter.jpg +0 -0
  38. package/templates/previews/demo-products/nami-sparkling/three-quarter.jpg +0 -0
  39. package/templates/previews/demo-products/nuit-cream/three-quarter.jpg +0 -0
  40. package/templates/previews/demo-products/olea-hand-cream/three-quarter.jpg +0 -0
  41. package/templates/previews/demo-products/ondine-serum/three-quarter.jpg +0 -0
  42. package/templates/previews/demo-products/pli-bag/three-quarter.jpg +0 -0
  43. package/templates/previews/demo-products/soleado-lemon/three-quarter.jpg +0 -0
  44. package/templates/previews/demo-products/sora-sandal/three-quarter.jpg +0 -0
  45. package/templates/previews/demo-products/velin-silk-wash/three-quarter.jpg +0 -0
  46. package/templates/previews/demo-products/verdo-greens/three-quarter.jpg +0 -0
  47. package/templates/previews/showcase/aldric-marine-40.jpg +0 -0
  48. package/templates/previews/showcase/barrier-balm.jpg +0 -0
  49. package/templates/previews/showcase/brume-08.jpg +0 -0
  50. package/templates/previews/showcase/calm-body-lotion.jpg +0 -0
  51. package/templates/previews/showcase/clairfont-rose.jpg +0 -0
  52. package/templates/previews/showcase/dune-candle.jpg +0 -0
  53. package/templates/previews/showcase/halvard-12.jpg +0 -0
  54. package/templates/previews/showcase/kultur-kefir.jpg +0 -0
  55. package/templates/previews/showcase/melo-peach-tea.jpg +0 -0
  56. package/templates/previews/showcase/nami-sparkling.jpg +0 -0
  57. package/templates/previews/showcase/nuit-cream.jpg +0 -0
  58. package/templates/previews/showcase/olea-hand-cream.jpg +0 -0
  59. package/templates/previews/showcase/ondine-serum.jpg +0 -0
  60. package/templates/previews/showcase/pli-bag.jpg +0 -0
  61. package/templates/previews/showcase/soleado-lemon.jpg +0 -0
  62. package/templates/previews/showcase/sora-sandal.jpg +0 -0
  63. package/templates/previews/showcase/velin-silk-wash.jpg +0 -0
  64. package/templates/previews/showcase/verdo-greens.jpg +0 -0
  65. package/templates/previews/wet-ribs.jpg +0 -0
  66. package/templates/showcase/72-dark-bite.json +1 -1
  67. package/templates/showcase/72-dark-palm-shade.json +1 -1
  68. package/templates/showcase/72-dark-snap.json +1 -1
  69. package/templates/showcase/acetates-harbour-light.json +1 -1
  70. package/templates/showcase/acetates-ice-block.json +1 -1
  71. package/templates/showcase/acetates-salt-flat.json +1 -1
  72. package/templates/showcase/acetates-silk-drape.json +1 -1
  73. package/templates/showcase/aldric-marine-40.json +29 -0
  74. package/templates/showcase/aperitivo-chrome-bar.json +1 -1
  75. package/templates/showcase/aperitivo-pit.json +1 -1
  76. package/templates/showcase/aperitivo-ruby-pour.json +1 -1
  77. package/templates/showcase/aperitivo-tomato-vine.json +1 -1
  78. package/templates/showcase/barrier-balm.json +29 -0
  79. package/templates/showcase/barrier-cream-caddy.json +1 -1
  80. package/templates/showcase/barrier-cream-cheek.json +1 -1
  81. package/templates/showcase/barrier-cream-ice-core.json +1 -1
  82. package/templates/showcase/barrier-cream-oats.json +1 -1
  83. package/templates/showcase/bowler-bonnet-rain.json +1 -1
  84. package/templates/showcase/bowler-car-exit.json +1 -1
  85. package/templates/showcase/bowler-cobalt-room.json +1 -1
  86. package/templates/showcase/bowler-red-blade.json +1 -1
  87. package/templates/showcase/brume-08.json +29 -0
  88. package/templates/showcase/c15-apricot-ledge.json +1 -1
  89. package/templates/showcase/c15-dew-bed.json +1 -1
  90. package/templates/showcase/c15-morning-drop.json +1 -1
  91. package/templates/showcase/c15-orange-pool.json +1 -1
  92. package/templates/showcase/calm-body-lotion.json +29 -0
  93. package/templates/showcase/capsule-block-tower.json +1 -1
  94. package/templates/showcase/capsule-model-village.json +1 -1
  95. package/templates/showcase/capsule-stoop.json +1 -1
  96. package/templates/showcase/casserole-long-table.json +1 -1
  97. package/templates/showcase/casserole-steam.json +1 -1
  98. package/templates/showcase/casserole-tomatoes.json +1 -1
  99. package/templates/showcase/chug-courtside.json +1 -1
  100. package/templates/showcase/chug-long-shadow.json +1 -1
  101. package/templates/showcase/chug-mountain-stream.json +1 -1
  102. package/templates/showcase/chug-waterline.json +1 -1
  103. package/templates/showcase/clairfont-rose.json +29 -0
  104. package/templates/showcase/collagen-berry-splash.json +1 -1
  105. package/templates/showcase/collagen-morning-shake.json +1 -1
  106. package/templates/showcase/collagen-paper-garden.json +1 -1
  107. package/templates/showcase/court-72-baseline.json +1 -1
  108. package/templates/showcase/court-72-checker-sit.json +1 -1
  109. package/templates/showcase/court-72-fisheye-steps.json +1 -1
  110. package/templates/showcase/court-72-salt-flat.json +1 -1
  111. package/templates/showcase/cricket-jumper-green.json +1 -1
  112. package/templates/showcase/cricket-jumper-hamper.json +1 -1
  113. package/templates/showcase/cricket-jumper-sheets.json +1 -1
  114. package/templates/showcase/dune-candle.json +29 -0
  115. package/templates/showcase/field-watch-boulder-gap.json +1 -1
  116. package/templates/showcase/field-watch-corner.json +1 -1
  117. package/templates/showcase/field-watch-helm.json +1 -1
  118. package/templates/showcase/field-watch-ice-core.json +1 -1
  119. package/templates/showcase/fig-leaf-frost-window.json +1 -1
  120. package/templates/showcase/fig-leaf-lanterns.json +1 -1
  121. package/templates/showcase/fig-leaf-still-life.json +1 -1
  122. package/templates/showcase/fig-vetiver-travertine.json +1 -1
  123. package/templates/showcase/green-04-ice-trough.json +1 -1
  124. package/templates/showcase/green-04-ingredients.json +1 -1
  125. package/templates/showcase/green-04-track.json +1 -1
  126. package/templates/showcase/gummies-bedside.json +1 -1
  127. package/templates/showcase/gummies-cherry-heap.json +1 -1
  128. package/templates/showcase/gummies-moonlit-pillow.json +1 -1
  129. package/templates/showcase/halvard-12.json +29 -0
  130. package/templates/showcase/hibiscus-dew-bed.json +1 -1
  131. package/templates/showcase/hibiscus-flower-nest.json +1 -1
  132. package/templates/showcase/hibiscus-long-lunch.json +1 -1
  133. package/templates/showcase/hoops-honey-drip.json +1 -1
  134. package/templates/showcase/hoops-painted-canvas.json +1 -1
  135. package/templates/showcase/hoops-pink-smoke.json +1 -1
  136. package/templates/showcase/hoops-sculpted-hands.json +1 -1
  137. package/templates/showcase/kultur-kefir.json +33 -0
  138. package/templates/showcase/lounge-chair-reading.json +1 -1
  139. package/templates/showcase/lounge-chair-snowfall.json +1 -1
  140. package/templates/showcase/lounge-chair-travertine.json +1 -1
  141. package/templates/showcase/melo-peach-tea.json +29 -0
  142. package/templates/showcase/nami-sparkling.json +33 -0
  143. package/templates/showcase/noir-cedar-char.json +1 -1
  144. package/templates/showcase/noir-cedar-coal.json +1 -1
  145. package/templates/showcase/noir-cedar-silk-drape.json +1 -1
  146. package/templates/showcase/noir-cedar-smoke.json +1 -1
  147. package/templates/showcase/nuit-cream.json +33 -0
  148. package/templates/showcase/olea-hand-cream.json +29 -0
  149. package/templates/showcase/ondine-serum.json +29 -0
  150. package/templates/showcase/open-buds-hands.json +1 -1
  151. package/templates/showcase/open-buds-surf-check.json +1 -1
  152. package/templates/showcase/open-buds-vinyl.json +1 -1
  153. package/templates/showcase/orris-collarbone.json +1 -1
  154. package/templates/showcase/orris-salt-pan.json +1 -1
  155. package/templates/showcase/orris-waterline.json +1 -1
  156. package/templates/showcase/orris-window-stripe.json +1 -1
  157. package/templates/showcase/over-ear-arch.json +1 -1
  158. package/templates/showcase/over-ear-balloons.json +1 -1
  159. package/templates/showcase/over-ear-glass-blocks.json +1 -1
  160. package/templates/showcase/over-ear-pool-edge.json +1 -1
  161. package/templates/showcase/pli-bag.json +33 -0
  162. package/templates/showcase/puffer-container-lean.json +1 -1
  163. package/templates/showcase/puffer-foil-jump.json +1 -1
  164. package/templates/showcase/puffer-ghost-snow.json +1 -1
  165. package/templates/showcase/puffer-snow-street.json +1 -1
  166. package/templates/showcase/ridgeline-boulder-gap.json +1 -1
  167. package/templates/showcase/ridgeline-chalk-sprint.json +1 -1
  168. package/templates/showcase/ridgeline-stream-leap.json +1 -1
  169. package/templates/showcase/ridgeline-tyre-top.json +1 -1
  170. package/templates/showcase/scarlet-beauty-dish.json +1 -1
  171. package/templates/showcase/scarlet-red-blade.json +1 -1
  172. package/templates/showcase/scarlet-summer-laugh.json +1 -1
  173. package/templates/showcase/scarlet-swatch.json +1 -1
  174. package/templates/showcase/soleado-lemon.json +29 -0
  175. package/templates/showcase/sora-sandal.json +33 -0
  176. package/templates/showcase/spf-poolside.json +1 -1
  177. package/templates/showcase/spf-salt-flat.json +1 -1
  178. package/templates/showcase/spf-shadow-hand.json +1 -1
  179. package/templates/showcase/spf-yellow-field.json +1 -1
  180. package/templates/showcase/sun-coin-collarbone.json +1 -1
  181. package/templates/showcase/sun-coin-hair-nest.json +1 -1
  182. package/templates/showcase/sun-coin-sundial.json +1 -1
  183. package/templates/showcase/sun-coin-white-glove.json +1 -1
  184. package/templates/showcase/velin-silk-wash.json +29 -0
  185. package/templates/showcase/verdo-greens.json +29 -0
  186. package/templates/showcase/wash-fig-leaves.json +1 -1
  187. package/templates/showcase/wash-slate-shower.json +1 -1
  188. package/templates/showcase/wash-steam.json +1 -1
  189. package/templates/showcase/yuzu-arch-lean.json +1 -1
  190. package/templates/showcase/yuzu-container-sill.json +1 -1
  191. package/templates/showcase/yuzu-flash-walk.json +1 -1
  192. package/templates/showcase/yuzu-ice-burst.json +1 -1
  193. package/templates/wet-ribs.json +15 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.21.1](https://github.com/tonygorb/Scenri/compare/v0.21.0...v0.21.1) (2026-10-04)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * let the new example packshots through the package check ([45a0174](https://github.com/tonygorb/Scenri/commit/45a017453fed5d5a206e27d9e585a0d0b31ace95))
9
+ * let the new example packshots through the package check ([6eef8f8](https://github.com/tonygorb/Scenri/commit/6eef8f8b44c06bd53db3052f4423475f2befc394))
10
+
11
+ ## [0.21.0](https://github.com/tonygorb/Scenri/compare/v0.20.7...v0.21.0) (2026-10-04)
12
+
13
+
14
+ ### Features
15
+
16
+ * bring the website examples and Wet Ribs into the studio ([a859481](https://github.com/tonygorb/Scenri/commit/a859481cf33f1a0f2cd724c0adca23a68ba9c5ca))
17
+ * bring the website examples and Wet Ribs into the studio ([013aead](https://github.com/tonygorb/Scenri/commit/013aeadc4e1aca23ee1bef816ba743dbab001ade))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * patch the multipart reader against two denial-of-service advisories ([adbf2d3](https://github.com/tonygorb/Scenri/commit/adbf2d30ff8d7e582f0d43d49820e3732194b1d7))
23
+ * patch the multipart reader against two denial-of-service advisories ([b854c58](https://github.com/tonygorb/Scenri/commit/b854c58529fdb84a1e922ffbfca70fe32bf4c071))
24
+
25
+ ## [0.20.7](https://github.com/tonygorb/Scenri/compare/v0.20.6...v0.20.7) (2026-10-03)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * keep a parent's reference photo off a refinement ([6d74815](https://github.com/tonygorb/Scenri/commit/6d74815fdcdb246ef7c7038a639a20a63042ea29))
31
+ * keep a parent's reference photo off a refinement ([0acd180](https://github.com/tonygorb/Scenri/commit/0acd18031c72c9aeabd971fd72e140a88006accb))
32
+
3
33
  ## [0.20.6](https://github.com/tonygorb/Scenri/compare/v0.20.5...v0.20.6) (2026-10-02)
4
34
 
5
35
 
package/dist/serve.js CHANGED
@@ -5468,9 +5468,6 @@ function inheritedIdentityDirective(kinds) {
5468
5468
  return "The attached product references show the same product that is already in this picture. Use them to hold its identity exact while you make the change, not as a reason to re-stage the shot.";
5469
5469
  return "The attached person reference shows the same person who is already in this picture. Use it to hold their identity exact while you make the change, not as a reason to re-stage the shot.";
5470
5470
  }
5471
- function inheritedRefDirective() {
5472
- return "The carried reference is attached for composition, lighting and treatment only. Any person or product visible in it lends mood, never identity \u2014 nobody and nothing in this photograph takes a face, a body or a design from it.";
5473
- }
5474
5471
  function productFactDirectives(p) {
5475
5472
  const out = [];
5476
5473
  if (p.preservationNotes) out.push(String(p.preservationNotes));
@@ -16386,6 +16383,51 @@ function registerImageRoutes(app, deps) {
16386
16383
  var HEADLINES_KEPT = 5;
16387
16384
  var FIRST_PUBLIC = "0.2.0";
16388
16385
  var RELEASES = [
16386
+ {
16387
+ version: "0.21.1",
16388
+ date: "2026-10-04",
16389
+ title: "The new examples' product photos ship with the app",
16390
+ sections: [
16391
+ {
16392
+ heading: "Examples",
16393
+ body: "Each of the eighteen new examples brings its own product photo, so a shot that uses one starts from that photo."
16394
+ }
16395
+ ]
16396
+ },
16397
+ {
16398
+ version: "0.21.0",
16399
+ date: "2026-10-04",
16400
+ title: "New examples on Home, and Refine has its own look",
16401
+ sections: [
16402
+ {
16403
+ heading: "Examples",
16404
+ 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.",
16405
+ image: {
16406
+ file: "0.21.0-home-examples.webp",
16407
+ alt: "Home open on All examples, the wall showing Ol\xE9a Hand Cream and Halvard 12 among the shots."
16408
+ }
16409
+ },
16410
+ {
16411
+ heading: "Refine",
16412
+ 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."
16413
+ },
16414
+ {
16415
+ heading: "Security",
16416
+ 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."
16417
+ }
16418
+ ]
16419
+ },
16420
+ {
16421
+ version: "0.20.7",
16422
+ date: "2026-10-03",
16423
+ title: "A refinement keeps the shot, not the reference",
16424
+ sections: [
16425
+ {
16426
+ heading: "Refine",
16427
+ body: "A shot made with a reference picture keeps its own person, product and brand when you refine it. The reference shaped the first picture, and it is not sent again."
16428
+ }
16429
+ ]
16430
+ },
16389
16431
  {
16390
16432
  version: "0.20.6",
16391
16433
  date: "2026-10-02",
@@ -18828,7 +18870,6 @@ function buildServer(opts) {
18828
18870
  );
18829
18871
  const inheritedDirectives = [];
18830
18872
  let inheritedMark = false;
18831
- let inheritedRef = false;
18832
18873
  const inheritedProduct = inheritedTokens.some((t) => t.t === "product");
18833
18874
  const inheritedPerson = inheritedTokens.some((t) => t.t === "character");
18834
18875
  for (const tok of inheritedTokens) {
@@ -18849,9 +18890,6 @@ function buildServer(opts) {
18849
18890
  } else if (tok.t === "mark" && !inheritedMark) {
18850
18891
  inheritedMark = true;
18851
18892
  inheritedDirectives.push(markEditDirective());
18852
- } else if (tok.t === "ref" && !inheritedRef) {
18853
- inheritedRef = true;
18854
- inheritedDirectives.push(inheritedRefDirective());
18855
18893
  }
18856
18894
  }
18857
18895
  if (inheritedPerson) inheritedDirectives.push(personSkinDirective());
@@ -18871,9 +18909,9 @@ function buildServer(opts) {
18871
18909
  editScope: verdict.scope,
18872
18910
  editRemoval: verdict.removal ?? false,
18873
18911
  // Kinds, not a count: the identity claim speaks only about the kinds
18874
- // that actually ride. A mark-only or ref-only inheritance emits no
18875
- // generic claim - markEditDirective and inheritedRefDirective speak
18876
- // for themselves.
18912
+ // that actually ride. A mark-only inheritance emits no generic claim.
18913
+ // markEditDirective speaks for the mark. A carried reference photograph
18914
+ // is recorded and not attached, so it emits nothing either.
18877
18915
  inheritedIdentity: inheritedProduct || inheritedPerson ? { product: inheritedProduct, person: inheritedPerson } : false,
18878
18916
  inheritedDirectives,
18879
18917
  // Only the explicit op drops the dimension promise: an implicit legacy
@@ -18896,7 +18934,7 @@ function buildServer(opts) {
18896
18934
  productAngles.set(String(a.id ?? a.hash), n);
18897
18935
  return n <= 2;
18898
18936
  }
18899
- return a.essential || a.role === "brand" || a.role === "reference";
18937
+ return a.essential || a.role === "brand";
18900
18938
  }).map((a) => ({ ...a, inherited: true }));
18901
18939
  }
18902
18940
  const cap2 = Math.max(0, engineCaps.maxReferenceImages - 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scenri",
3
- "version": "0.20.6",
3
+ "version": "0.21.1",
4
4
  "author": "Tony Gorb <hello@scenri.co>",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",