@nodaro/prompts 1.54.0 → 1.56.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 (107) 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-56HWABF5.cjs → chunk-2LWYFWZL.cjs} +478 -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-IVRSNUYX.js → chunk-4MCK7Y6C.js} +477 -3
  10. package/dist/chunk-4MCK7Y6C.js.map +1 -0
  11. package/dist/{chunk-FFPFBNXH.cjs → chunk-7ZWWJY24.cjs} +8 -2
  12. package/dist/chunk-7ZWWJY24.cjs.map +1 -0
  13. package/dist/{chunk-F22GZF7T.cjs → chunk-AMUXCE7X.cjs} +8 -8
  14. package/dist/{chunk-F22GZF7T.cjs.map → chunk-AMUXCE7X.cjs.map} +1 -1
  15. package/dist/{chunk-OQ3J7OGR.cjs → chunk-BHBZN2AP.cjs} +49 -49
  16. package/dist/{chunk-OQ3J7OGR.cjs.map → chunk-BHBZN2AP.cjs.map} +1 -1
  17. package/dist/{chunk-YAIPYPMM.js → chunk-BJGD4DBP.js} +4 -4
  18. package/dist/{chunk-YAIPYPMM.js.map → chunk-BJGD4DBP.js.map} +1 -1
  19. package/dist/{chunk-ZRORO6OM.js → chunk-CYYHQNW3.js} +4 -4
  20. package/dist/{chunk-ZRORO6OM.js.map → chunk-CYYHQNW3.js.map} +1 -1
  21. package/dist/{chunk-YDG3KMCN.js → chunk-DOGFC7LK.js} +13 -5
  22. package/dist/chunk-DOGFC7LK.js.map +1 -0
  23. package/dist/{chunk-Z4KWM6DV.js → chunk-EUA5AGXE.js} +9 -7
  24. package/dist/chunk-EUA5AGXE.js.map +1 -0
  25. package/dist/{chunk-E5EKWWOO.cjs → chunk-FEHXLXAV.cjs} +8 -7
  26. package/dist/chunk-FEHXLXAV.cjs.map +1 -0
  27. package/dist/{chunk-5XPELUES.js → chunk-GJX5N63V.js} +8 -2
  28. package/dist/chunk-GJX5N63V.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-NUC5RV4P.cjs → chunk-NDKJW7RP.cjs} +4 -4
  32. package/dist/{chunk-NUC5RV4P.cjs.map → chunk-NDKJW7RP.cjs.map} +1 -1
  33. package/dist/{chunk-CDNW7O7H.cjs → chunk-O4CRTEBB.cjs} +42 -40
  34. package/dist/chunk-O4CRTEBB.cjs.map +1 -0
  35. package/dist/{chunk-ED47NNIN.js → chunk-OXNJVQ2V.js} +3 -3
  36. package/dist/{chunk-ED47NNIN.js.map → chunk-OXNJVQ2V.js.map} +1 -1
  37. package/dist/{chunk-PWYASBX2.cjs → chunk-P5HAPDV3.cjs} +18 -18
  38. package/dist/{chunk-PWYASBX2.cjs.map → chunk-P5HAPDV3.cjs.map} +1 -1
  39. package/dist/{chunk-XUMEDRML.cjs → chunk-SJVJAEDE.cjs} +13 -5
  40. package/dist/chunk-SJVJAEDE.cjs.map +1 -0
  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 +8 -0
  53. package/dist/entries/assembly.d.ts +8 -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 +46 -38
  72. package/dist/entries/presets.d.cts +13 -1
  73. package/dist/entries/presets.d.ts +13 -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 +648 -640
  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__/assemble-image-input-style-references.test.ts +24 -0
  87. package/src/__tests__/doctrine-roster-completeness.test.ts +3 -0
  88. package/src/__tests__/factory-preset-previews.test.ts +38 -0
  89. package/src/__tests__/picker-art-images.test.ts +54 -0
  90. package/src/__tests__/seedance-extend.test.ts +46 -0
  91. package/src/assemble-image-input.ts +11 -1
  92. package/src/factory-presets/index.ts +2 -0
  93. package/src/factory-presets/preview-files.generated.ts +472 -0
  94. package/src/factory-presets/previews.ts +17 -2
  95. package/src/picker-art/images.ts +39 -2
  96. package/src/picker-catalogs.ts +4 -2
  97. package/src/prompt-wizard-categories.ts +8 -0
  98. package/dist/chunk-56HWABF5.cjs.map +0 -1
  99. package/dist/chunk-5XPELUES.js.map +0 -1
  100. package/dist/chunk-CDNW7O7H.cjs.map +0 -1
  101. package/dist/chunk-E5EKWWOO.cjs.map +0 -1
  102. package/dist/chunk-FFPFBNXH.cjs.map +0 -1
  103. package/dist/chunk-H322GC7M.js.map +0 -1
  104. package/dist/chunk-IVRSNUYX.js.map +0 -1
  105. package/dist/chunk-XUMEDRML.cjs.map +0 -1
  106. package/dist/chunk-YDG3KMCN.js.map +0 -1
  107. package/dist/chunk-Z4KWM6DV.js.map +0 -1
@@ -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:
@@ -23,6 +23,23 @@ export interface PickerImageOptions {
23
23
  * ask for it), and four URLs per option are dead weight to an agent (MCP).
24
24
  */
25
25
  readonly srcSet?: boolean
26
+ /**
27
+ * A deployment's own pictures, in place of the platform's. When set, an
28
+ * option is pictured by what this returns for it and by nothing else — no
29
+ * self-hosted photo, emoji or flag, no render — so an option it has nothing
30
+ * for has no picture, and no Person / Styling topic has one (a topic is not
31
+ * an option). `baseUrl` and `lookPreviews` are not read. The package names no
32
+ * deployment picture itself: the API passes what the deployment registered.
33
+ */
34
+ readonly own?: (catalogId: string, optionId: string) => PickerOwnPicture | undefined
35
+ }
36
+
37
+ /** A deployment's own picture for one picker option (`PickerImageOptions.own`). */
38
+ export interface PickerOwnPicture {
39
+ /** Absolute URL of the picture. */
40
+ readonly url: string
41
+ /** Absolute URL of its enlarged version, when the deployment gave one. */
42
+ readonly largeUrl?: string
26
43
  }
27
44
 
28
45
  /** Hosts whose Cloudflare zone resizes on the fly (`/cdn-cgi/image/`, `/cdn-cgi/media/`). */
@@ -65,6 +82,12 @@ export interface PickerOptionImage {
65
82
  readonly url: string
66
83
  /** `<url> 240w, <url> 480w, …` — present only for a render the CDN resizes (Nodaro Cloud), when asked for (`srcSet: true`). */
67
84
  readonly srcSet?: string
85
+ /**
86
+ * The option's enlarged picture — present only for a deployment's own
87
+ * picture that has one (`PickerImageOptions.own`), when asked for
88
+ * (`srcSet: true`, the same request that asks for a srcset).
89
+ */
90
+ readonly largeUrl?: string
68
91
  }
69
92
 
70
93
  /**
@@ -84,7 +107,10 @@ function renderImage(url: string, withSrcSet: boolean): PickerOptionImage | unde
84
107
  }
85
108
 
86
109
  /**
87
- * The picture of one picker option, or undefined when it has none:
110
+ * The picture of one picker option, or undefined when it has none.
111
+ *
112
+ * With `images.own` (a deployment's own pictures), what it returns for the
113
+ * option, and nothing else. Otherwise, the platform's:
88
114
  *
89
115
  * 1. the self-hosted character photos;
90
116
  * 2. when renders are allowed (Nodaro Cloud), the music / voice pickers'
@@ -101,6 +127,7 @@ export function pickerOptionImage(
101
127
  id: string,
102
128
  images: PickerImageOptions,
103
129
  ): PickerOptionImage | undefined {
130
+ if (images.own) return ownImage(images.own(catalog.catalogId, id), images.srcSet === true)
104
131
  const origin = originOf(images.baseUrl)
105
132
  const photo = characterArtPath(catalog.catalogId, id)
106
133
  if (photo) return origin ? { url: origin + photo } : undefined
@@ -116,6 +143,11 @@ export function pickerOptionImage(
116
143
  return render ? renderImage(render, images.srcSet === true) : undefined
117
144
  }
118
145
 
146
+ function ownImage(own: PickerOwnPicture | undefined, withLarge: boolean): PickerOptionImage | undefined {
147
+ if (!own) return undefined
148
+ return withLarge && own.largeUrl ? { url: own.url, largeUrl: own.largeUrl } : { url: own.url }
149
+ }
150
+
119
151
  /** The absolute picture URL of one picker option, or undefined — `pickerOptionImage(...)?.url`. */
120
152
  export function pickerOptionImageUrl(
121
153
  catalog: { readonly nodeType: string; readonly catalogId: string },
@@ -126,8 +158,13 @@ export function pickerOptionImageUrl(
126
158
  return pickerOptionImage(catalog, field, id, images)?.url
127
159
  }
128
160
 
129
- /** The absolute URL of a Person / Styling topic's round picture, or undefined. */
161
+ /**
162
+ * The absolute URL of a Person / Styling topic's round picture, or undefined —
163
+ * always, with a deployment's own pictures (`images.own`): a topic is not an
164
+ * option, so it has none of them.
165
+ */
130
166
  export function pickerSectionImageUrl(sectionLabel: string, images: PickerImageOptions): string | undefined {
167
+ if (images.own) return undefined
131
168
  const origin = originOf(images.baseUrl)
132
169
  const path = characterSectionArtPath(sectionLabel)
133
170
  return origin && path ? origin + path : undefined
@@ -1088,8 +1088,9 @@ function projectOption(o: PickerOption, detail: PickerCatalogDetail, image?: Pic
1088
1088
  }
1089
1089
 
1090
1090
  function projectOptionFields(o: PickerOption, detail: PickerCatalogDetail, image?: PickerOptionImage): ProjectedPickerOption {
1091
- // `imageUrl` / `imageSrcSet` (display data) ride at both detail levels too,
1092
- // present only when the option has a picture (a srcset only for a CDN render).
1091
+ // `imageUrl` / `imageSrcSet` / `imageLargeUrl` (display data) ride at both
1092
+ // detail levels too, present only when the option has a picture (a srcset
1093
+ // only for a CDN render, a large picture only for a deployment's own).
1093
1094
  const extras = {
1094
1095
  ...(o.motion ? { motion: o.motion } : {}),
1095
1096
  // A style's media rides at both detail levels: a thin client filters its image style list by it.
@@ -1098,6 +1099,7 @@ function projectOptionFields(o: PickerOption, detail: PickerCatalogDetail, image
1098
1099
  ...(o.restyle === false ? { restyle: false as const } : {}),
1099
1100
  ...(image ? { imageUrl: image.url } : {}),
1100
1101
  ...(image?.srcSet ? { imageSrcSet: image.srcSet } : {}),
1102
+ ...(image?.largeUrl ? { imageLargeUrl: image.largeUrl } : {}),
1101
1103
  }
1102
1104
  return detail === "full"
1103
1105
  ? {
@@ -188,6 +188,7 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
188
188
  "wan-2.7": "Wan 2.7 T2I — 1K/2K/4K, up to 9 ref images",
189
189
  "wan-2.7-pro": "Wan 2.7 Pro T2I — higher quality, 1K/2K/4K",
190
190
  "flux-2-klein": "Open Flux 2 9B via Replicate — fast",
191
+ "flux-3-klein": "FLUX 3 Klein — the light FLUX 3 model: fast and low cost, 1K/2K/4K; edits from up to 10 references at the same price",
191
192
  "flux-2-pro": "BFL Flux 2 Pro via Replicate — flagship quality",
192
193
  "flux-2-max": "BFL Flux 2 Max via Replicate — even larger than Pro, up to 8 refs (variable pricing)",
193
194
  },
@@ -214,6 +215,7 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
214
215
  "seedream-5-flash-i2i": "Fast, low-cost Seedream edits — up to 10 input images",
215
216
  "minimax-h3-image-i2i": "MiniMax H3 edits — up to 16 reference images in one edit, readable text, up to 4K",
216
217
  "seedream-5-5-i2i": "Seedream 5.5 edits — round after round, the rest of the picture untouched; up to 10 input images",
218
+ "flux-3-klein-i2i": "FLUX 3 Klein edits — fast, low-cost changes from up to 10 reference images, which cost nothing extra; 1K/2K/4K",
217
219
  "flux-kontext": "Character-consistent edits with reference awareness",
218
220
  "flux-kontext-max": "Premium character-consistent editing",
219
221
  "kontext-multi": "Multi-image Kontext via Replicate — up to 4 refs",
@@ -244,6 +246,7 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
244
246
  "seedream-5-flash-i2i": "Fast, low-cost Seedream edits — up to 10 input images",
245
247
  "minimax-h3-image-i2i": "MiniMax H3 edits — up to 16 reference images in one edit, readable text, up to 4K",
246
248
  "seedream-5-5-i2i": "Seedream 5.5 edits — round after round, the rest of the picture untouched; up to 10 input images",
249
+ "flux-3-klein-i2i": "FLUX 3 Klein edits — fast, low-cost changes from up to 10 reference images, which cost nothing extra; 1K/2K/4K",
247
250
  "flux-kontext": "Character-consistent edits with reference awareness",
248
251
  "flux-kontext-max": "Premium character-consistent editing",
249
252
  "kontext-multi": "Multi-image Kontext via Replicate — up to 4 refs",
@@ -287,6 +290,7 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
287
290
  "kling-4-keyframes": "Kling 4.0 Keyframes — start frame, up to 8 in-between frames and an end frame; native audio, 3–30s, 720p/1080p",
288
291
  "kling-4-flash": "Kling 4.0 Flash — text, or up to 10 reference images / 5 videos / 7 characters (a voice clip per character); native audio, 3–20s, 720p",
289
292
  "grok-imagine-video-1.5": "Grok Imagine 1.5 — image-to-video only; exact start and end frame (the same image loops), up to 4 in-between frames; requires an input image",
293
+ "pixverse-v6-max": "PixVerse V6 Max — cinematic text-to-video, 8 aspect ratios incl. 21:9, optional native audio, 1–15s, 360p–1080p",
290
294
  },
291
295
  "image-to-video": {
292
296
  "minimax": "Versatile animation from still images",
@@ -327,6 +331,7 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
327
331
  "kling-4-keyframes": "Kling 4.0 Keyframes — start frame, up to 8 in-between frames and an end frame; native audio, 3–30s, 720p/1080p",
328
332
  "kling-4-flash": "Kling 4.0 Flash — a start frame alone is the exact opening frame; beside up to 10 reference images, 5 videos and 7 characters it joins them; native audio, 3–20s, 720p",
329
333
  "grok-imagine-video-1.5": "Grok Imagine 1.5 — stylized animation, 1–15s, 480p/720p/1080p, start + up to 4 in-between + end frames (image required)",
334
+ "pixverse-v6-max": "PixVerse V6 Max — the image is the exact first frame and sets the shape; optional native audio, 1–15s, 360p–1080p",
330
335
  },
331
336
  "video-to-video": {
332
337
  "wan": "Style transfer and video transformation",
@@ -345,6 +350,9 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
345
350
  "runway-extend": "Extend Runway-generated videos",
346
351
  "seedance-2-5-extend": "Extend ANY video by URL — seamless trim-stitched continuation with audio, 4–30s added (Seedance 2.5)",
347
352
  "seedance-2-0-extend": "Extend ANY video by URL — seamless trim-stitched continuation with audio, 4–15s added (Seedance 2.0)",
353
+ "kling-4-extend": "Extend ANY video by URL — seamless trim-stitched continuation with audio, 3–30s added (Kling 4)",
354
+ "pixverse-v6-extend": "Extend ANY video by URL — native continuation with optional sound, 1–15s added at 360p–1080p, joined onto the original clip (PixVerse V6)",
355
+ "grok-extend": "Extend a Grok Imagine video made here (by its task id) — native continuation with sound, 6 or 10s added at the video's own resolution (Grok)",
348
356
  },
349
357
  "speech-to-video": {
350
358
  "wan-speech": "Wan 2.2 speech-driven video generation",