@nodaro/prompts 1.53.2 → 1.55.0

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 (112) hide show
  1. package/dist/{catalog-packs-DeMcSVCR.d.cts → catalog-packs-Bw7OpufR.d.cts} +1 -1
  2. package/dist/{catalog-packs-DjqvicAR.d.ts → catalog-packs-CyS8NdLM.d.ts} +1 -1
  3. package/dist/{chunk-HOZPYHRA.js → chunk-242NZ6SI.js} +5 -5
  4. package/dist/{chunk-HOZPYHRA.js.map → chunk-242NZ6SI.js.map} +1 -1
  5. package/dist/{chunk-GRSKB3P7.cjs → chunk-2LWYFWZL.cjs} +528 -2
  6. package/dist/chunk-2LWYFWZL.cjs.map +1 -0
  7. package/dist/{chunk-P4BXE4OA.cjs → chunk-2MTFPGQC.cjs} +13 -13
  8. package/dist/{chunk-P4BXE4OA.cjs.map → chunk-2MTFPGQC.cjs.map} +1 -1
  9. package/dist/{chunk-EKRO42T3.cjs → chunk-32BMZ4Q5.cjs} +113 -41
  10. package/dist/chunk-32BMZ4Q5.cjs.map +1 -0
  11. package/dist/{chunk-WQ7FWGZ2.js → chunk-4MCK7Y6C.js} +524 -3
  12. package/dist/chunk-4MCK7Y6C.js.map +1 -0
  13. package/dist/{chunk-FFPFBNXH.cjs → chunk-7ZWWJY24.cjs} +8 -2
  14. package/dist/chunk-7ZWWJY24.cjs.map +1 -0
  15. package/dist/{chunk-F22GZF7T.cjs → chunk-AMUXCE7X.cjs} +8 -8
  16. package/dist/{chunk-F22GZF7T.cjs.map → chunk-AMUXCE7X.cjs.map} +1 -1
  17. package/dist/{chunk-OQ3J7OGR.cjs → chunk-BHBZN2AP.cjs} +49 -49
  18. package/dist/{chunk-OQ3J7OGR.cjs.map → chunk-BHBZN2AP.cjs.map} +1 -1
  19. package/dist/{chunk-YAIPYPMM.js → chunk-BJGD4DBP.js} +4 -4
  20. package/dist/{chunk-YAIPYPMM.js.map → chunk-BJGD4DBP.js.map} +1 -1
  21. package/dist/{chunk-ZRORO6OM.js → chunk-CYYHQNW3.js} +4 -4
  22. package/dist/{chunk-ZRORO6OM.js.map → chunk-CYYHQNW3.js.map} +1 -1
  23. package/dist/{chunk-E5EKWWOO.cjs → chunk-FEHXLXAV.cjs} +8 -7
  24. package/dist/chunk-FEHXLXAV.cjs.map +1 -0
  25. package/dist/{chunk-5XPELUES.js → chunk-GJX5N63V.js} +8 -2
  26. package/dist/chunk-GJX5N63V.js.map +1 -0
  27. package/dist/{chunk-XR7RAHZI.js → chunk-HZH6XXYK.js} +81 -9
  28. package/dist/chunk-HZH6XXYK.js.map +1 -0
  29. package/dist/{chunk-OMRFKG4M.js → chunk-KBWUO4P7.js} +3 -3
  30. package/dist/{chunk-OMRFKG4M.js.map → chunk-KBWUO4P7.js.map} +1 -1
  31. package/dist/{chunk-XRCK3BCF.cjs → chunk-M25N26II.cjs} +55 -10
  32. package/dist/chunk-M25N26II.cjs.map +1 -0
  33. package/dist/{chunk-PHCYQWJP.js → chunk-NCF5TAR6.js} +55 -10
  34. package/dist/chunk-NCF5TAR6.js.map +1 -0
  35. package/dist/{chunk-NUC5RV4P.cjs → chunk-NDKJW7RP.cjs} +4 -4
  36. package/dist/{chunk-NUC5RV4P.cjs.map → chunk-NDKJW7RP.cjs.map} +1 -1
  37. package/dist/{chunk-ED47NNIN.js → chunk-OXNJVQ2V.js} +3 -3
  38. package/dist/{chunk-ED47NNIN.js.map → chunk-OXNJVQ2V.js.map} +1 -1
  39. package/dist/{chunk-PWYASBX2.cjs → chunk-P5HAPDV3.cjs} +18 -18
  40. package/dist/{chunk-PWYASBX2.cjs.map → chunk-P5HAPDV3.cjs.map} +1 -1
  41. package/dist/{chunk-EUU5W7XR.js → chunk-TMYYALRF.js} +4 -4
  42. package/dist/{chunk-EUU5W7XR.js.map → chunk-TMYYALRF.js.map} +1 -1
  43. package/dist/{chunk-H322GC7M.js → chunk-VX3BIUGY.js} +5 -4
  44. package/dist/chunk-VX3BIUGY.js.map +1 -0
  45. package/dist/{chunk-VBCVQPQ4.js → chunk-WDKQQ7WL.js} +3 -3
  46. package/dist/{chunk-VBCVQPQ4.js.map → chunk-WDKQQ7WL.js.map} +1 -1
  47. package/dist/{chunk-KTNCB2IE.cjs → chunk-XMRDZRGV.cjs} +35 -35
  48. package/dist/{chunk-KTNCB2IE.cjs.map → chunk-XMRDZRGV.cjs.map} +1 -1
  49. package/dist/{chunk-7BWDATUZ.cjs → chunk-Y3TSRO3S.cjs} +125 -125
  50. package/dist/{chunk-7BWDATUZ.cjs.map → chunk-Y3TSRO3S.cjs.map} +1 -1
  51. package/dist/entries/assembly.cjs +29 -29
  52. package/dist/entries/assembly.d.cts +9 -0
  53. package/dist/entries/assembly.d.ts +9 -0
  54. package/dist/entries/assembly.js +6 -6
  55. package/dist/entries/catalog-packs.d.cts +4 -4
  56. package/dist/entries/catalog-packs.d.ts +4 -4
  57. package/dist/entries/doctrine.cjs +46 -46
  58. package/dist/entries/doctrine.js +1 -1
  59. package/dist/entries/person.d.cts +3 -3
  60. package/dist/entries/person.d.ts +3 -3
  61. package/dist/entries/picker-art.cjs +22 -22
  62. package/dist/entries/picker-art.d.cts +1 -1
  63. package/dist/entries/picker-art.d.ts +1 -1
  64. package/dist/entries/picker-art.js +2 -2
  65. package/dist/entries/picker-catalogs.cjs +57 -57
  66. package/dist/entries/picker-catalogs.d.cts +3 -3
  67. package/dist/entries/picker-catalogs.d.ts +3 -3
  68. package/dist/entries/picker-catalogs.js +5 -5
  69. package/dist/entries/pickers.cjs +383 -383
  70. package/dist/entries/pickers.js +3 -3
  71. package/dist/entries/presets.cjs +55 -35
  72. package/dist/entries/presets.d.cts +29 -1
  73. package/dist/entries/presets.d.ts +29 -1
  74. package/dist/entries/presets.js +1 -1
  75. package/dist/entries/prompt-builder.cjs +76 -76
  76. package/dist/entries/prompt-builder.js +5 -5
  77. package/dist/{images-ChAOLY5V.d.cts → images-BQ1jUWyZ.d.cts} +32 -3
  78. package/dist/{images-ChAOLY5V.d.ts → images-BQ1jUWyZ.d.ts} +32 -3
  79. package/dist/index.cjs +657 -637
  80. package/dist/index.d.cts +4 -4
  81. package/dist/index.d.ts +4 -4
  82. package/dist/index.js +12 -12
  83. package/dist/{picker-catalogs-DzLCu6qQ.d.cts → picker-catalogs-BuMGOVWC.d.cts} +1 -1
  84. package/dist/{picker-catalogs-SDSWrufc.d.ts → picker-catalogs-CVQopXwp.d.ts} +1 -1
  85. package/package.json +2 -2
  86. package/src/__tests__/doctrine-roster-completeness.test.ts +3 -0
  87. package/src/__tests__/factory-preset-previews.test.ts +38 -0
  88. package/src/__tests__/factory-preset-shelves.test.ts +30 -0
  89. package/src/__tests__/picker-art-images.test.ts +54 -0
  90. package/src/__tests__/seedance-extend.test.ts +37 -23
  91. package/src/__tests__/video-reference-features.test.ts +7 -5
  92. package/src/__tests__/video-reference-seatless-assets.test.ts +132 -0
  93. package/src/factory-presets/index.ts +4 -0
  94. package/src/factory-presets/preview-files.generated.ts +472 -0
  95. package/src/factory-presets/previews.ts +17 -2
  96. package/src/factory-presets/shelves.ts +50 -0
  97. package/src/picker-art/images.ts +39 -2
  98. package/src/picker-catalogs.ts +4 -2
  99. package/src/prompt-wizard-categories.ts +15 -3
  100. package/src/provider-prompt-doctrine.ts +44 -5
  101. package/src/seatless-assets.ts +141 -0
  102. package/src/video-reference-resolver.ts +31 -4
  103. package/dist/chunk-5XPELUES.js.map +0 -1
  104. package/dist/chunk-E5EKWWOO.cjs.map +0 -1
  105. package/dist/chunk-EKRO42T3.cjs.map +0 -1
  106. package/dist/chunk-FFPFBNXH.cjs.map +0 -1
  107. package/dist/chunk-GRSKB3P7.cjs.map +0 -1
  108. package/dist/chunk-H322GC7M.js.map +0 -1
  109. package/dist/chunk-PHCYQWJP.js.map +0 -1
  110. package/dist/chunk-WQ7FWGZ2.js.map +0 -1
  111. package/dist/chunk-XR7RAHZI.js.map +0 -1
  112. package/dist/chunk-XRCK3BCF.cjs.map +0 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * `assetsTakeNoSeat` — the reference walk for a model whose image references
3
+ * are its FRAMES (a `keyframes` video model, decided 2026-11-11). No asset is
4
+ * seated: nothing attaches a URL or numbers an `@image_N`. A wired character
5
+ * gives its name and description in BOTH reference formats (production renders
6
+ * hybrid), its mentions and `{ref:<id>}` read as its name, and a non-character
7
+ * extra adds nothing.
8
+ */
9
+ import { describe, it, expect } from "vitest"
10
+ import type { ConnectedReference } from "@nodaro/shared/types"
11
+ import { resolveVideoReferenceCore } from "../video-reference-resolver.js"
12
+
13
+ const F1 = "https://cdn/frame-1.png"
14
+ const F2 = "https://cdn/frame-2.png"
15
+ const MAYA = "https://cdn/maya.png"
16
+ const MAYA_SMILE = "https://cdn/maya-smile.png"
17
+ const CAR = "https://cdn/car.png"
18
+
19
+ const maya: ConnectedReference = {
20
+ id: "maya-ref",
21
+ defaultName: "Maya",
22
+ source: "wired-character",
23
+ url: MAYA,
24
+ characterSlug: "maya",
25
+ characterCanonicalDescription: "Short silver hair, green coat",
26
+ }
27
+ const mayaSmile: ConnectedReference = { ...maya, id: "maya-smile", url: MAYA_SMILE, variantSlug: "smile" }
28
+
29
+ for (const hybridRoles of [false, true]) {
30
+ const format = hybridRoles ? "hybrid" : "legacy"
31
+ describe(`resolveVideoReferenceCore — assetsTakeNoSeat (${format})`, () => {
32
+ it("a wired character gives its name and description; only the frames go out", () => {
33
+ const r = resolveVideoReferenceCore({
34
+ prompt: "she walks to the window",
35
+ wiredCharRefs: [maya],
36
+ ordinalOffset: 2,
37
+ hybridRoles,
38
+ assetsTakeNoSeat: true,
39
+ })
40
+ expect(r.additionalUrls).toEqual([])
41
+ expect(r.prompt).toContain("Maya — Short silver hair, green coat.")
42
+ expect(r.prompt).toContain("she walks to the window")
43
+ expect(r.prompt).not.toMatch(/@image|from @/)
44
+ })
45
+
46
+ it("leading frames come back untouched and nothing joins them", () => {
47
+ const r = resolveVideoReferenceCore({
48
+ prompt: "she walks",
49
+ wiredCharRefs: [maya, mayaSmile],
50
+ leadingRefUrls: [F1, F2],
51
+ extraRefs: [{ id: "car", url: CAR, description: "a red car" }],
52
+ hybridRoles,
53
+ assetsTakeNoSeat: true,
54
+ })
55
+ expect(r.additionalUrls).toEqual([F1, F2])
56
+ expect(r.prompt).not.toContain("a red car")
57
+ })
58
+
59
+ it("mentions, variant mentions and {ref:<id>} of the character read as its name", () => {
60
+ const r = resolveVideoReferenceCore({
61
+ prompt: "@maya:1 smiles at {ref:maya-ref}, then @maya:2:smile waves",
62
+ wiredCharRefs: [maya, mayaSmile],
63
+ ordinalOffset: 2,
64
+ hybridRoles,
65
+ assetsTakeNoSeat: true,
66
+ })
67
+ expect(r.prompt).toContain("Maya smiles at Maya, then Maya waves")
68
+ expect(r.prompt).toContain("Maya — Short silver hair, green coat.")
69
+ expect(r.prompt).not.toMatch(/@maya|@image|\{ref:/)
70
+ })
71
+
72
+ it("a character extra speaks for its character once, and its {ref:<id>} reads as the character", () => {
73
+ const r = resolveVideoReferenceCore({
74
+ prompt: "look at {ref:x1}",
75
+ wiredCharRefs: [maya],
76
+ extraRefs: [{ id: "x1", url: MAYA_SMILE, characterSlug: "maya", variantSlug: "smile", description: "smiling" }],
77
+ lookupCharacterBySlug: () => ({ characterName: "Maya", canonicalDescription: "Short silver hair, green coat" }),
78
+ ordinalOffset: 2,
79
+ hybridRoles,
80
+ assetsTakeNoSeat: true,
81
+ })
82
+ expect(r.prompt).toContain("look at Maya")
83
+ expect(r.prompt?.match(/Maya — /g)).toHaveLength(1)
84
+ expect(r.additionalUrls).toEqual([])
85
+ })
86
+
87
+ it("a hidden canonical fallback stays hidden unless the prompt mentions the character", () => {
88
+ const hidden = resolveVideoReferenceCore({
89
+ prompt: "an empty room",
90
+ wiredCharRefs: [maya],
91
+ suppressedCanonicalCharacterIds: ["maya"],
92
+ ordinalOffset: 1,
93
+ hybridRoles,
94
+ assetsTakeNoSeat: true,
95
+ })
96
+ expect(hidden.prompt).toBe("an empty room")
97
+ const mentioned = resolveVideoReferenceCore({
98
+ prompt: "@maya:1 in an empty room",
99
+ wiredCharRefs: [maya],
100
+ suppressedCanonicalCharacterIds: ["maya"],
101
+ ordinalOffset: 1,
102
+ hybridRoles,
103
+ assetsTakeNoSeat: true,
104
+ })
105
+ expect(mentioned.prompt).toContain("Maya in an empty room")
106
+ expect(mentioned.prompt).toContain("Maya — Short silver hair, green coat.")
107
+ })
108
+
109
+ it("an {image:N} past the frames keeps only its label", () => {
110
+ const r = resolveVideoReferenceCore({
111
+ prompt: "between {image:1:the door} and {image:3:Maya}",
112
+ wiredCharRefs: [maya],
113
+ ordinalOffset: 2,
114
+ hybridRoles,
115
+ assetsTakeNoSeat: true,
116
+ })
117
+ expect(r.prompt).toContain("the door from @image_1")
118
+ expect(r.prompt).not.toContain("@image_3")
119
+ })
120
+ })
121
+ }
122
+
123
+ it("without assetsTakeNoSeat the hybrid walk still seats the character after the frames", () => {
124
+ const r = resolveVideoReferenceCore({
125
+ prompt: "she walks",
126
+ wiredCharRefs: [maya],
127
+ leadingRefUrls: [F1, F2],
128
+ hybridRoles: true,
129
+ })
130
+ expect(r.additionalUrls).toEqual([F1, F2, MAYA])
131
+ expect(r.prompt).toMatch(/from @image_3/)
132
+ })
@@ -15,13 +15,17 @@ import { LOTTIE_OVERLAY_PRESETS } from "./lottie-overlay.js"
15
15
 
16
16
  export type { FactoryPreset, FactoryPresetGroup } from "./types.js"
17
17
  export { groupFactoryPresets } from "./types.js"
18
+ export type { PresetShelf } from "./shelves.js"
19
+ export { PRESET_SHELF_ORDER, presetShelf, presetShelfRank } from "./shelves.js"
18
20
  export { MAX_PRESET_REFERENCES, presetMinReferences } from "./references.js"
19
21
  export {
20
22
  FACTORY_PRESET_PREVIEW_FILES,
21
23
  FACTORY_PRESET_PREVIEW_LARGE_FILES,
24
+ FACTORY_PRESET_PREVIEW_SIZES,
22
25
  PRESET_PREVIEW_LARGE_WIDTH,
23
26
  PRESET_PREVIEW_PATH,
24
27
  PRESET_PREVIEW_WIDTH,
28
+ factoryPresetPreviewSize,
25
29
  factoryPresetPreviewSrcSet,
26
30
  factoryPresetPreviewUrl,
27
31
  } from "./previews.js"
@@ -944,3 +944,475 @@ export const FACTORY_PRESET_PREVIEW_LARGE_FILES: Readonly<Record<string, { reado
944
944
  "generate-image/x-statement-card": {"file":"1024/generate-image/x-statement-card.93c12a0c.webp","width":1024},
945
945
  "generate-image/youtube-thumbnail": {"file":"1024/generate-image/youtube-thumbnail.fd4d0cf0.webp","width":1024},
946
946
  }
947
+
948
+ // The tile picture's real width and height (the box a client draws it in, before it loads).
949
+ export const FACTORY_PRESET_PREVIEW_SIZES: Readonly<Record<string, readonly [number, number]>> = {
950
+ "generate-image/3d-icon": [512,288],
951
+ "generate-image/ad-app-store-screenshot": [512,911],
952
+ "generate-image/ad-clinic": [512,288],
953
+ "generate-image/ad-creative": [512,288],
954
+ "generate-image/ad-facebook-lead": [512,512],
955
+ "generate-image/ad-gym-offer": [512,683],
956
+ "generate-image/ad-real-estate-listing": [512,683],
957
+ "generate-image/ad-restaurant-special": [512,683],
958
+ "generate-image/ad-salon-promo": [512,683],
959
+ "generate-image/ad-service-van": [512,288],
960
+ "generate-image/ad-store-sale": [512,288],
961
+ "generate-image/add-skin-realism": [512,288],
962
+ "generate-image/aerial-drone": [512,293],
963
+ "generate-image/aerial-site": [512,288],
964
+ "generate-image/age-progression-3": [512,288],
965
+ "generate-image/age-progression-5": [512,288],
966
+ "generate-image/age-progression-bw": [512,288],
967
+ "generate-image/album-cover": [512,512],
968
+ "generate-image/anime-person-real-bg": [512,288],
969
+ "generate-image/anime-scene": [512,288],
970
+ "generate-image/app-icon": [512,288],
971
+ "generate-image/avatar-pfp": [512,288],
972
+ "generate-image/background-remove": [512,288],
973
+ "generate-image/background-replace": [512,288],
974
+ "generate-image/beauty-hero": [512,288],
975
+ "generate-image/blueprint": [512,288],
976
+ "generate-image/book-cover": [512,773],
977
+ "generate-image/brand-linkedin-banner": [512,219],
978
+ "generate-image/brand-podcast-cover": [512,512],
979
+ "generate-image/brand-profile-picture": [512,512],
980
+ "generate-image/brand-spotify-canvas": [512,911],
981
+ "generate-image/brand-twitch-banner": [512,219],
982
+ "generate-image/building-tall": [512,288],
983
+ "generate-image/bw-portrait": [512,288],
984
+ "generate-image/candid-snapshot": [512,288],
985
+ "generate-image/cardboard-diorama": [512,288],
986
+ "generate-image/caricature-real-photo": [512,288],
987
+ "generate-image/cartoon-person-real-world": [512,288],
988
+ "generate-image/cast-mega-grid": [512,288],
989
+ "generate-image/cast-scene": [512,288],
990
+ "generate-image/character-action-4": [512,288],
991
+ "generate-image/character-board": [512,288],
992
+ "generate-image/character-chibi": [512,288],
993
+ "generate-image/character-expressions-16": [512,288],
994
+ "generate-image/character-expressions-6": [512,288],
995
+ "generate-image/character-fullbody-hero": [512,288],
996
+ "generate-image/character-outfits": [512,288],
997
+ "generate-image/character-portrait": [512,288],
998
+ "generate-image/character-reference-grid": [512,288],
999
+ "generate-image/character-turnaround": [512,288],
1000
+ "generate-image/character-turnaround-labeled": [512,288],
1001
+ "generate-image/chart-graph": [512,288],
1002
+ "generate-image/cinematic-keyframe": [512,288],
1003
+ "generate-image/cinematic-portrait": [512,288],
1004
+ "generate-image/cinematic-still": [512,288],
1005
+ "generate-image/cinematic-widescreen": [512,219],
1006
+ "generate-image/claymation-figure-real-set": [512,288],
1007
+ "generate-image/claymation-scene": [512,288],
1008
+ "generate-image/colorize": [512,288],
1009
+ "generate-image/comic-panel": [512,288],
1010
+ "generate-image/community-fundraiser": [512,683],
1011
+ "generate-image/community-menu-board": [512,683],
1012
+ "generate-image/concept-art-env": [512,288],
1013
+ "generate-image/corporate-headshot": [512,288],
1014
+ "generate-image/creator-at-home": [512,288],
1015
+ "generate-image/creature-board": [512,288],
1016
+ "generate-image/creature-design": [512,288],
1017
+ "generate-image/cyberpunk-scene": [512,288],
1018
+ "generate-image/decade-timeline": [512,288],
1019
+ "generate-image/device-mockup": [512,288],
1020
+ "generate-image/doodle-overlay": [512,288],
1021
+ "generate-image/doodle-overlay-expressive": [512,288],
1022
+ "generate-image/double-exposure": [512,288],
1023
+ "generate-image/ecom-amazon-hero": [512,512],
1024
+ "generate-image/ecom-etsy-handmade": [512,683],
1025
+ "generate-image/ecom-fashion-ghost": [512,683],
1026
+ "generate-image/ecom-infographic": [512,512],
1027
+ "generate-image/ecom-lifestyle-shot": [512,512],
1028
+ "generate-image/ecom-sale-badge": [512,512],
1029
+ "generate-image/edit-by-name": [512,288],
1030
+ "generate-image/edu-flashcard": [512,683],
1031
+ "generate-image/edu-slide-title": [512,288],
1032
+ "generate-image/edu-worksheet-header": [512,219],
1033
+ "generate-image/embroidered-art": [512,288],
1034
+ "generate-image/emoji-set": [512,288],
1035
+ "generate-image/establishing-shot": [512,219],
1036
+ "generate-image/event-baby-shower": [512,683],
1037
+ "generate-image/event-birthday-invite": [512,683],
1038
+ "generate-image/event-club-flyer": [512,683],
1039
+ "generate-image/event-conference-banner": [512,293],
1040
+ "generate-image/event-holiday-greeting": [512,512],
1041
+ "generate-image/event-poster": [512,288],
1042
+ "generate-image/event-wedding-invite": [512,683],
1043
+ "generate-image/exterior-render": [512,288],
1044
+ "generate-image/faceless-3d-head": [512,288],
1045
+ "generate-image/faux-food-clay": [512,288],
1046
+ "generate-image/fb-event-cover": [512,288],
1047
+ "generate-image/fb-group-cover": [512,288],
1048
+ "generate-image/flat-vector-illustration": [512,288],
1049
+ "generate-image/floor-plan": [512,288],
1050
+ "generate-image/flowchart": [512,288],
1051
+ "generate-image/food-board": [512,288],
1052
+ "generate-image/food-flatlay": [512,288],
1053
+ "generate-image/food-photography": [512,288],
1054
+ "generate-image/four-seasons": [512,288],
1055
+ "generate-image/game-icon": [512,512],
1056
+ "generate-image/ghost-mannequin": [512,288],
1057
+ "generate-image/golden-hour-portrait": [512,288],
1058
+ "generate-image/ig-carousel-cover": [512,683],
1059
+ "generate-image/ig-flatlay": [512,512],
1060
+ "generate-image/ig-giveaway": [512,512],
1061
+ "generate-image/ig-new-drop": [512,683],
1062
+ "generate-image/ig-photo-dump": [512,683],
1063
+ "generate-image/ig-testimonial": [512,512],
1064
+ "generate-image/infographic": [512,288],
1065
+ "generate-image/instagram-post": [512,512],
1066
+ "generate-image/interior-design": [512,288],
1067
+ "generate-image/isometric-illustration": [512,288],
1068
+ "generate-image/knolling": [512,288],
1069
+ "generate-image/label-elements": [512,288],
1070
+ "generate-image/landscape-vista": [512,219],
1071
+ "generate-image/layout-2x2-grid": [512,512],
1072
+ "generate-image/layout-comic-page": [512,683],
1073
+ "generate-image/layout-headless-sheet": [512,288],
1074
+ "generate-image/layout-multi-shot": [512,288],
1075
+ "generate-image/layout-production-storyboard": [512,288],
1076
+ "generate-image/layout-props-sheet": [512,288],
1077
+ "generate-image/layout-sprite-sheet": [512,288],
1078
+ "generate-image/layout-storyboard-6": [512,288],
1079
+ "generate-image/layout-visionary-magazine-cover": [512,910],
1080
+ "generate-image/li-certified": [512,683],
1081
+ "generate-image/li-infographic": [512,512],
1082
+ "generate-image/line-art-coloring": [512,288],
1083
+ "generate-image/location-board": [512,288],
1084
+ "generate-image/logo-emblem": [512,288],
1085
+ "generate-image/logo-mascot": [512,288],
1086
+ "generate-image/logo-wordmark": [512,288],
1087
+ "generate-image/long-exposure": [512,288],
1088
+ "generate-image/low-poly": [512,288],
1089
+ "generate-image/macro-shot": [512,288],
1090
+ "generate-image/macro-skin-study": [512,288],
1091
+ "generate-image/manga-bw": [512,288],
1092
+ "generate-image/mascot-board": [512,288],
1093
+ "generate-image/matte-painting": [512,219],
1094
+ "generate-image/merch-mug": [512,512],
1095
+ "generate-image/merch-standalone-print-art": [512,512],
1096
+ "generate-image/merch-sticker-sheet": [512,512],
1097
+ "generate-image/merch-tshirt-design": [512,683],
1098
+ "generate-image/mirror-selfie": [512,288],
1099
+ "generate-image/monogram": [512,288],
1100
+ "generate-image/moodboard-tile": [512,288],
1101
+ "generate-image/movie-poster": [512,773],
1102
+ "generate-image/natural-photo-finish": [512,288],
1103
+ "generate-image/needle-felt": [512,288],
1104
+ "generate-image/oil-painting": [512,288],
1105
+ "generate-image/outfit-board": [512,288],
1106
+ "generate-image/packaging-mockup": [512,288],
1107
+ "generate-image/paper-cut": [512,288],
1108
+ "generate-image/personal-birthday-card": [512,683],
1109
+ "generate-image/personal-dating-profile": [512,683],
1110
+ "generate-image/personal-family-holiday-card": [512,683],
1111
+ "generate-image/personal-meme-template": [512,512],
1112
+ "generate-image/personal-pet-portrait": [512,683],
1113
+ "generate-image/personal-phone-wallpaper": [512,910],
1114
+ "generate-image/pet-board": [512,288],
1115
+ "generate-image/phone-camera-look": [512,288],
1116
+ "generate-image/phone-selfie": [512,288],
1117
+ "generate-image/pin-home-decor": [512,768],
1118
+ "generate-image/pin-outfit-ideas": [512,768],
1119
+ "generate-image/pin-recipe": [512,768],
1120
+ "generate-image/pixar-3d": [512,288],
1121
+ "generate-image/pixel-art": [512,288],
1122
+ "generate-image/pixel-sprite": [512,288],
1123
+ "generate-image/pop-art": [512,288],
1124
+ "generate-image/pose-board": [512,288],
1125
+ "generate-image/post-big-caption": [512,636],
1126
+ "generate-image/post-carousel-cover": [512,512],
1127
+ "generate-image/post-employee-spotlight": [512,512],
1128
+ "generate-image/post-event-announcement": [512,512],
1129
+ "generate-image/post-hiring": [512,512],
1130
+ "generate-image/post-old-vs-new": [512,636],
1131
+ "generate-image/post-quote-card": [512,512],
1132
+ "generate-image/product-board": [512,288],
1133
+ "generate-image/product-flatlay": [512,288],
1134
+ "generate-image/product-in-hand": [512,288],
1135
+ "generate-image/product-lifestyle": [512,288],
1136
+ "generate-image/product-shot": [512,288],
1137
+ "generate-image/quote-card": [512,288],
1138
+ "generate-image/real-estate-hero": [512,288],
1139
+ "generate-image/real-person-cartoon-world": [512,288],
1140
+ "generate-image/relight": [512,288],
1141
+ "generate-image/remove-faces": [512,288],
1142
+ "generate-image/restore-photo": [512,288],
1143
+ "generate-image/restyle-whole": [512,288],
1144
+ "generate-image/scene-board": [512,288],
1145
+ "generate-image/seamless-pattern": [512,288],
1146
+ "generate-image/seamless-texture": [512,288],
1147
+ "generate-image/short-ai-free-tool": [512,896],
1148
+ "generate-image/short-dance-trend": [512,911],
1149
+ "generate-image/short-fitness-daily": [512,911],
1150
+ "generate-image/short-grwm-outfit": [512,896],
1151
+ "generate-image/short-morning-routine": [512,911],
1152
+ "generate-image/short-pov-hook": [512,911],
1153
+ "generate-image/short-quick-recipe": [512,911],
1154
+ "generate-image/short-side-income": [512,896],
1155
+ "generate-image/short-storytime": [512,910],
1156
+ "generate-image/short-three-steps": [512,896],
1157
+ "generate-image/silhouette": [512,288],
1158
+ "generate-image/skin-detail-sheet": [512,288],
1159
+ "generate-image/sock-puppet": [512,288],
1160
+ "generate-image/sport-match-day": [512,683],
1161
+ "generate-image/sport-player-card": [512,683],
1162
+ "generate-image/sports-jersey-portrait": [512,288],
1163
+ "generate-image/stained-glass": [512,288],
1164
+ "generate-image/sticker-diecut": [512,288],
1165
+ "generate-image/story-countdown": [512,910],
1166
+ "generate-image/story-link-above": [512,911],
1167
+ "generate-image/story-this-or-that": [512,911],
1168
+ "generate-image/story-vertical": [512,910],
1169
+ "generate-image/storyboard-frame": [512,288],
1170
+ "generate-image/studio-portrait": [512,288],
1171
+ "generate-image/tattoo-flash": [512,288],
1172
+ "generate-image/text-80s-synthwave": [512,288],
1173
+ "generate-image/text-anime-title": [512,288],
1174
+ "generate-image/text-art-deco": [512,288],
1175
+ "generate-image/text-balloon-foil": [512,288],
1176
+ "generate-image/text-blockbuster": [512,288],
1177
+ "generate-image/text-botanical-serif": [512,288],
1178
+ "generate-image/text-brutalist-acid": [512,288],
1179
+ "generate-image/text-carved-wood": [512,288],
1180
+ "generate-image/text-chalkboard": [512,288],
1181
+ "generate-image/text-chrome-y2k": [512,288],
1182
+ "generate-image/text-comic-hero": [512,288],
1183
+ "generate-image/text-disco-funk": [512,293],
1184
+ "generate-image/text-embroidered-patch": [512,288],
1185
+ "generate-image/text-film-noir": [512,288],
1186
+ "generate-image/text-fire-embers": [512,288],
1187
+ "generate-image/text-frosted-glass": [512,288],
1188
+ "generate-image/text-glitch": [512,288],
1189
+ "generate-image/text-gold-foil-luxury": [512,288],
1190
+ "generate-image/text-graffiti-drip": [512,288],
1191
+ "generate-image/text-grunge-stamp": [512,288],
1192
+ "generate-image/text-handwritten-marker": [512,293],
1193
+ "generate-image/text-holographic": [512,293],
1194
+ "generate-image/text-horror-poster": [512,293],
1195
+ "generate-image/text-ice": [512,288],
1196
+ "generate-image/text-indie-title-card": [512,288],
1197
+ "generate-image/text-inflated-clay": [512,288],
1198
+ "generate-image/text-kids-party": [512,288],
1199
+ "generate-image/text-liquid-water": [512,288],
1200
+ "generate-image/text-marble-carved": [512,288],
1201
+ "generate-image/text-molten-gold": [512,293],
1202
+ "generate-image/text-neon-sign": [512,288],
1203
+ "generate-image/text-paper-cutout": [512,288],
1204
+ "generate-image/text-pixel-8bit": [512,288],
1205
+ "generate-image/text-psychedelic-60s": [512,288],
1206
+ "generate-image/text-ransom-note": [512,293],
1207
+ "generate-image/text-retro-serif-70s": [512,288],
1208
+ "generate-image/text-rusted-metal": [512,288],
1209
+ "generate-image/text-scifi-chrome": [512,293],
1210
+ "generate-image/text-smoke": [512,288],
1211
+ "generate-image/text-sticker-pop": [512,288],
1212
+ "generate-image/text-typewriter": [512,288],
1213
+ "generate-image/text-varsity-sport": [512,288],
1214
+ "generate-image/text-vhs-glow": [512,288],
1215
+ "generate-image/text-wedding-script": [512,288],
1216
+ "generate-image/text-western": [512,293],
1217
+ "generate-image/thumb-ai-feature-grid": [512,288],
1218
+ "generate-image/thumb-ai-os-icons": [512,288],
1219
+ "generate-image/thumb-ai-tool-reveal": [512,287],
1220
+ "generate-image/thumb-analytics-growth": [512,293],
1221
+ "generate-image/thumb-beauty-makeup": [512,287],
1222
+ "generate-image/thumb-before-after": [512,288],
1223
+ "generate-image/thumb-breaking-news": [512,288],
1224
+ "generate-image/thumb-burning-question": [512,287],
1225
+ "generate-image/thumb-challenge-timer": [512,287],
1226
+ "generate-image/thumb-coding-tutorial": [512,288],
1227
+ "generate-image/thumb-copy-me-arrow": [512,287],
1228
+ "generate-image/thumb-course-launch": [512,288],
1229
+ "generate-image/thumb-creator-milestone": [512,287],
1230
+ "generate-image/thumb-crypto-pump": [512,293],
1231
+ "generate-image/thumb-diet-plan": [512,288],
1232
+ "generate-image/thumb-doctor-health": [512,288],
1233
+ "generate-image/thumb-docu-expose": [512,288],
1234
+ "generate-image/thumb-earnings-proof": [512,288],
1235
+ "generate-image/thumb-editorial-type": [512,287],
1236
+ "generate-image/thumb-finance-shock": [512,288],
1237
+ "generate-image/thumb-fitness-transform": [512,288],
1238
+ "generate-image/thumb-food-feast": [512,288],
1239
+ "generate-image/thumb-founder-story": [512,288],
1240
+ "generate-image/thumb-gaming-golden-item": [512,288],
1241
+ "generate-image/thumb-gaming-rush": [512,287],
1242
+ "generate-image/thumb-hero-object": [512,288],
1243
+ "generate-image/thumb-interview-two-up": [512,287],
1244
+ "generate-image/thumb-language-learning": [512,293],
1245
+ "generate-image/thumb-legal-explainer": [512,288],
1246
+ "generate-image/thumb-listicle-number": [512,288],
1247
+ "generate-image/thumb-live-show": [512,288],
1248
+ "generate-image/thumb-map-pin": [512,293],
1249
+ "generate-image/thumb-minimal-tech": [512,288],
1250
+ "generate-image/thumb-model-vs-model": [512,293],
1251
+ "generate-image/thumb-motivation": [512,288],
1252
+ "generate-image/thumb-mystery-blur": [512,288],
1253
+ "generate-image/thumb-new-model-drop": [512,288],
1254
+ "generate-image/thumb-node-diagram": [512,288],
1255
+ "generate-image/thumb-parenting": [512,288],
1256
+ "generate-image/thumb-pets": [512,288],
1257
+ "generate-image/thumb-playful-cast": [512,287],
1258
+ "generate-image/thumb-quote-highlight": [512,288],
1259
+ "generate-image/thumb-real-estate-agent": [512,288],
1260
+ "generate-image/thumb-red-x-green-check": [512,288],
1261
+ "generate-image/thumb-reel-cover-bold": [512,287],
1262
+ "generate-image/thumb-science-explainer": [512,287],
1263
+ "generate-image/thumb-screen-portals": [512,288],
1264
+ "generate-image/thumb-shocked-reaction": [512,287],
1265
+ "generate-image/thumb-sports-highlight": [512,293],
1266
+ "generate-image/thumb-squad-chaos": [512,288],
1267
+ "generate-image/thumb-stage-talk": [512,293],
1268
+ "generate-image/thumb-stock-call": [512,288],
1269
+ "generate-image/thumb-swiss-collage": [512,288],
1270
+ "generate-image/thumb-tech-glitch": [512,288],
1271
+ "generate-image/thumb-tier-list": [512,288],
1272
+ "generate-image/thumb-travel-wanderlust": [512,293],
1273
+ "generate-image/thumb-true-crime-board": [512,288],
1274
+ "generate-image/thumb-unboxing": [512,293],
1275
+ "generate-image/thumb-versus-battle": [512,293],
1276
+ "generate-image/thumb-vlog-bright": [512,287],
1277
+ "generate-image/tilt-shift": [512,288],
1278
+ "generate-image/timeline": [512,288],
1279
+ "generate-image/times-of-day": [512,288],
1280
+ "generate-image/transparent-faces": [512,288],
1281
+ "generate-image/tshirt-design": [512,288],
1282
+ "generate-image/uc-001-business": [512,384],
1283
+ "generate-image/uc-002-business": [512,683],
1284
+ "generate-image/uc-003-business": [512,683],
1285
+ "generate-image/uc-004-business": [512,636],
1286
+ "generate-image/uc-005-business": [512,636],
1287
+ "generate-image/uc-006-business": [512,288],
1288
+ "generate-image/uc-007-business": [512,636],
1289
+ "generate-image/uc-008-business": [512,288],
1290
+ "generate-image/uc-009-business": [512,683],
1291
+ "generate-image/uc-010-business": [512,636],
1292
+ "generate-image/uc-011-business": [512,683],
1293
+ "generate-image/uc-012-business": [512,683],
1294
+ "generate-image/uc-013-business": [512,636],
1295
+ "generate-image/uc-014-business": [512,636],
1296
+ "generate-image/uc-015-business": [512,288],
1297
+ "generate-image/uc-016-business": [512,288],
1298
+ "generate-image/uc-017-business": [512,636],
1299
+ "generate-image/uc-018-business": [512,288],
1300
+ "generate-image/uc-019-business": [512,683],
1301
+ "generate-image/uc-020-business": [512,288],
1302
+ "generate-image/uc-021-business": [512,288],
1303
+ "generate-image/uc-022-business": [512,288],
1304
+ "generate-image/uc-023-business": [512,636],
1305
+ "generate-image/uc-024-business": [512,683],
1306
+ "generate-image/uc-025-business": [512,636],
1307
+ "generate-image/uc-026-business": [512,384],
1308
+ "generate-image/uc-027-business": [512,683],
1309
+ "generate-image/uc-028-business": [512,636],
1310
+ "generate-image/uc-029-business": [512,384],
1311
+ "generate-image/uc-030-business": [512,768],
1312
+ "generate-image/uc-031-personal": [512,384],
1313
+ "generate-image/uc-032-personal": [512,384],
1314
+ "generate-image/uc-033-personal": [512,384],
1315
+ "generate-image/uc-034-personal": [512,384],
1316
+ "generate-image/uc-035-personal": [512,384],
1317
+ "generate-image/uc-036-personal": [512,683],
1318
+ "generate-image/uc-037-personal": [512,683],
1319
+ "generate-image/uc-038-personal": [512,683],
1320
+ "generate-image/uc-039-personal": [512,384],
1321
+ "generate-image/uc-040-personal": [512,288],
1322
+ "generate-image/uc-041-personal": [512,288],
1323
+ "generate-image/uc-042-personal": [512,683],
1324
+ "generate-image/uc-043-personal": [512,683],
1325
+ "generate-image/uc-044-personal": [512,683],
1326
+ "generate-image/uc-045-personal": [512,911],
1327
+ "generate-image/uc-046-personal": [512,683],
1328
+ "generate-image/uc-047-personal": [512,384],
1329
+ "generate-image/uc-048-personal": [512,683],
1330
+ "generate-image/uc-049-personal": [512,683],
1331
+ "generate-image/uc-050-personal": [512,288],
1332
+ "generate-image/uc-051-products": [512,384],
1333
+ "generate-image/uc-052-products": [512,512],
1334
+ "generate-image/uc-053-products": [512,636],
1335
+ "generate-image/uc-054-products": [512,636],
1336
+ "generate-image/uc-055-products": [512,512],
1337
+ "generate-image/uc-056-products": [512,683],
1338
+ "generate-image/uc-057-products": [512,288],
1339
+ "generate-image/uc-058-products": [512,512],
1340
+ "generate-image/uc-059-products": [512,512],
1341
+ "generate-image/uc-060-products": [512,636],
1342
+ "generate-image/uc-061-products": [512,384],
1343
+ "generate-image/uc-062-products": [512,288],
1344
+ "generate-image/uc-063-products": [512,683],
1345
+ "generate-image/uc-064-products": [512,288],
1346
+ "generate-image/uc-065-products": [512,636],
1347
+ "generate-image/uc-066-products": [512,384],
1348
+ "generate-image/uc-067-products": [512,512],
1349
+ "generate-image/uc-068-products": [512,512],
1350
+ "generate-image/uc-069-products": [512,288],
1351
+ "generate-image/uc-070-products": [512,636],
1352
+ "generate-image/uc-071-creative": [512,512],
1353
+ "generate-image/uc-072-creative": [512,512],
1354
+ "generate-image/uc-073-creative": [512,768],
1355
+ "generate-image/uc-074-creative": [512,768],
1356
+ "generate-image/uc-075-creative": [512,768],
1357
+ "generate-image/uc-076-creative": [512,288],
1358
+ "generate-image/uc-077-creative": [512,512],
1359
+ "generate-image/uc-078-creative": [512,288],
1360
+ "generate-image/uc-079-creative": [512,512],
1361
+ "generate-image/uc-080-creative": [512,288],
1362
+ "generate-image/uc-081-creative": [512,384],
1363
+ "generate-image/uc-082-creative": [512,288],
1364
+ "generate-image/uc-083-creative": [512,683],
1365
+ "generate-image/uc-084-creative": [512,288],
1366
+ "generate-image/uc-085-creative": [512,683],
1367
+ "generate-image/uc-086-creative": [512,288],
1368
+ "generate-image/uc-087-creative": [512,683],
1369
+ "generate-image/uc-088-creative": [512,683],
1370
+ "generate-image/uc-089-creative": [512,768],
1371
+ "generate-image/uc-090-creative": [512,683],
1372
+ "generate-image/uc-091-home": [512,288],
1373
+ "generate-image/uc-092-home": [512,288],
1374
+ "generate-image/uc-093-home": [512,288],
1375
+ "generate-image/uc-094-home": [512,683],
1376
+ "generate-image/uc-095-home": [512,288],
1377
+ "generate-image/uc-096-home": [512,288],
1378
+ "generate-image/uc-097-home": [512,683],
1379
+ "generate-image/uc-098-home": [512,288],
1380
+ "generate-image/uc-099-home": [512,288],
1381
+ "generate-image/uc-100-home": [512,288],
1382
+ "generate-image/uc-101-home": [512,288],
1383
+ "generate-image/uc-102-home": [512,288],
1384
+ "generate-image/uc-103-home": [512,288],
1385
+ "generate-image/uc-104-home": [512,288],
1386
+ "generate-image/uc-105-home": [512,288],
1387
+ "generate-image/uc-106-family": [512,683],
1388
+ "generate-image/uc-107-family": [512,683],
1389
+ "generate-image/uc-108-family": [512,683],
1390
+ "generate-image/uc-109-family": [512,683],
1391
+ "generate-image/uc-110-family": [512,683],
1392
+ "generate-image/uc-111-family": [512,683],
1393
+ "generate-image/uc-112-family": [512,768],
1394
+ "generate-image/uc-113-family": [512,683],
1395
+ "generate-image/uc-114-family": [512,512],
1396
+ "generate-image/uc-115-family": [512,683],
1397
+ "generate-image/uc-116-family": [512,683],
1398
+ "generate-image/uc-117-family": [512,683],
1399
+ "generate-image/uc-118-family": [512,288],
1400
+ "generate-image/uc-119-family": [512,683],
1401
+ "generate-image/uc-120-family": [512,683],
1402
+ "generate-image/ui-mockup": [512,288],
1403
+ "generate-image/undo-beauty-filter": [512,288],
1404
+ "generate-image/unretouched-portrait": [512,288],
1405
+ "generate-image/vaporwave": [512,288],
1406
+ "generate-image/vehicle-board": [512,288],
1407
+ "generate-image/video-call-frame": [512,288],
1408
+ "generate-image/wa-status-offer": [512,910],
1409
+ "generate-image/watercolor": [512,288],
1410
+ "generate-image/web-banner": [512,288],
1411
+ "generate-image/work-email-header": [512,219],
1412
+ "generate-image/work-landing-hero": [512,288],
1413
+ "generate-image/work-report-cover": [512,683],
1414
+ "generate-image/x-chart-take": [512,293],
1415
+ "generate-image/x-ray": [512,288],
1416
+ "generate-image/x-statement-card": [512,288],
1417
+ "generate-image/youtube-thumbnail": [512,288],
1418
+ }
@@ -1,6 +1,21 @@
1
- import { FACTORY_PRESET_PREVIEW_FILES, FACTORY_PRESET_PREVIEW_LARGE_FILES } from "./preview-files.generated.js"
1
+ import { FACTORY_PRESET_PREVIEW_FILES, FACTORY_PRESET_PREVIEW_LARGE_FILES, FACTORY_PRESET_PREVIEW_SIZES } from "./preview-files.generated.js"
2
2
 
3
- export { FACTORY_PRESET_PREVIEW_FILES, FACTORY_PRESET_PREVIEW_LARGE_FILES }
3
+ export { FACTORY_PRESET_PREVIEW_FILES, FACTORY_PRESET_PREVIEW_LARGE_FILES, FACTORY_PRESET_PREVIEW_SIZES }
4
+
5
+ /**
6
+ * The tile picture's real width and height (`previewUrl`'s), or null when the
7
+ * preset has no committed picture: a client sizes the picture's box from it
8
+ * before the picture loads, whatever shape the preset itself asks for.
9
+ *
10
+ * @param sizes the preset id → [width, height] map; defaults to the committed one
11
+ */
12
+ export function factoryPresetPreviewSize(
13
+ presetId: string,
14
+ sizes: Readonly<Record<string, readonly [number, number]>> = FACTORY_PRESET_PREVIEW_SIZES,
15
+ ): { readonly width: number; readonly height: number } | null {
16
+ const size = Object.prototype.hasOwnProperty.call(sizes, presetId) ? sizes[presetId] : undefined
17
+ return size ? { width: size[0], height: size[1] } : null
18
+ }
4
19
 
5
20
  /**
6
21
  * Where the factory preset previews live, relative to the app's origin: