@nodaro/shared 1.4.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 (665) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +32 -0
  3. package/dist/index.cjs +12506 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12269 -0
  6. package/dist/index.d.ts +12269 -0
  7. package/dist/index.js +11831 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +54 -0
  10. package/src/__tests__/__snapshots__/prompt-builder-segments.test.ts.snap +65 -0
  11. package/src/__tests__/ai-avatar-pricing.test.ts +321 -0
  12. package/src/__tests__/apply-video-negative-prompt.test.ts +76 -0
  13. package/src/__tests__/attach-columns.test.ts +28 -0
  14. package/src/__tests__/audio-crossfade-curves.test.ts +33 -0
  15. package/src/__tests__/build-model-menu.test.ts +58 -0
  16. package/src/__tests__/character-aspect-defaults.test.ts +142 -0
  17. package/src/__tests__/character-mention-slug.test.ts +199 -0
  18. package/src/__tests__/character-reference-photo-kinds.test.ts +32 -0
  19. package/src/__tests__/character-usage-mode.test.ts +147 -0
  20. package/src/__tests__/character-variant-assets.test.ts +142 -0
  21. package/src/__tests__/character-voice.test.ts +130 -0
  22. package/src/__tests__/cinematic-avatar-pricing.test.ts +119 -0
  23. package/src/__tests__/combine-transitions.test.ts +137 -0
  24. package/src/__tests__/component-types.test.ts +87 -0
  25. package/src/__tests__/condition-variables.test.ts +98 -0
  26. package/src/__tests__/credit-identifiers.test.ts +811 -0
  27. package/src/__tests__/default-video-provider.test.ts +63 -0
  28. package/src/__tests__/entity-image-handle.test.ts +43 -0
  29. package/src/__tests__/entity-variants.test.ts +33 -0
  30. package/src/__tests__/fal-lip-sync-sets.test.ts +31 -0
  31. package/src/__tests__/featured-entities.test.ts +33 -0
  32. package/src/__tests__/film-pricing.test.ts +64 -0
  33. package/src/__tests__/filter-condition.test.ts +285 -0
  34. package/src/__tests__/freecut-protocol.test.ts +35 -0
  35. package/src/__tests__/generate-text-items.test.ts +19 -0
  36. package/src/__tests__/generated-results.test.ts +50 -0
  37. package/src/__tests__/graph-utils.test.ts +618 -0
  38. package/src/__tests__/group-aggregation.test.ts +83 -0
  39. package/src/__tests__/i18n-locale-completeness.test.ts +156 -0
  40. package/src/__tests__/image-critic-node.test.ts +86 -0
  41. package/src/__tests__/image-mask-mode.test.ts +16 -0
  42. package/src/__tests__/image-ref-limit.test.ts +78 -0
  43. package/src/__tests__/inpaint-region.test.ts +24 -0
  44. package/src/__tests__/input-field-map-parity.test.ts +30 -0
  45. package/src/__tests__/json-evaluator.test.ts +289 -0
  46. package/src/__tests__/json-path.test.ts +64 -0
  47. package/src/__tests__/lip-sync-pricing.test.ts +142 -0
  48. package/src/__tests__/list-merge.test.ts +96 -0
  49. package/src/__tests__/list-sort.test.ts +134 -0
  50. package/src/__tests__/llm-models.test.ts +445 -0
  51. package/src/__tests__/location-mention-slug.test.ts +246 -0
  52. package/src/__tests__/locations-coverage-critic-schema.test.ts +92 -0
  53. package/src/__tests__/loop-delimiter.test.ts +39 -0
  54. package/src/__tests__/lottie-slots.test.ts +245 -0
  55. package/src/__tests__/model-catalog-flux2-resolutions.test.ts +21 -0
  56. package/src/__tests__/model-constants-location.test.ts +20 -0
  57. package/src/__tests__/model-constants.test.ts +122 -0
  58. package/src/__tests__/model-tree.test.ts +86 -0
  59. package/src/__tests__/no-internal-imports.test.ts +25 -0
  60. package/src/__tests__/node-default-mappings.test.ts +175 -0
  61. package/src/__tests__/node-mappable-fields.test.ts +7 -0
  62. package/src/__tests__/node-preset-export.test.ts +46 -0
  63. package/src/__tests__/node-preset-extract.test.ts +166 -0
  64. package/src/__tests__/node-refs-canonical.test.ts +54 -0
  65. package/src/__tests__/node-refs-combine.test.ts +54 -0
  66. package/src/__tests__/node-refs.test.ts +187 -0
  67. package/src/__tests__/node-runtime-keys.test.ts +99 -0
  68. package/src/__tests__/object-aspect-defaults.test.ts +59 -0
  69. package/src/__tests__/parameter-node-value.test.ts +137 -0
  70. package/src/__tests__/pinterest-url.test.ts +35 -0
  71. package/src/__tests__/pipeline-chat.test.ts +110 -0
  72. package/src/__tests__/pipeline-validation.test.ts +98 -0
  73. package/src/__tests__/presentation-utils.test.ts +1137 -0
  74. package/src/__tests__/producer-types.test.ts +47 -0
  75. package/src/__tests__/prompt-length-limits.test.ts +156 -0
  76. package/src/__tests__/provider-directive-defaults.test.ts +46 -0
  77. package/src/__tests__/reduce-strategy-registry.test.ts +43 -0
  78. package/src/__tests__/reference-board-templates.test.ts +33 -0
  79. package/src/__tests__/reference-roles.test.ts +36 -0
  80. package/src/__tests__/resolve-field-mappings.test.ts +110 -0
  81. package/src/__tests__/resolve-pipeline-model.test.ts +76 -0
  82. package/src/__tests__/scene-node-types.test.ts +80 -0
  83. package/src/__tests__/scraper-actors.test.ts +67 -0
  84. package/src/__tests__/seedance-2-catalog.test.ts +18 -0
  85. package/src/__tests__/seedance-2-credit-id.test.ts +23 -0
  86. package/src/__tests__/seedance-aspects.test.ts +52 -0
  87. package/src/__tests__/selector.test.ts +1151 -0
  88. package/src/__tests__/settled-with-limit.test.ts +214 -0
  89. package/src/__tests__/social-media-specs.test.ts +129 -0
  90. package/src/__tests__/sub-workflow-validation.test.ts +88 -0
  91. package/src/__tests__/switchx-pricing.test.ts +28 -0
  92. package/src/__tests__/to-connected-references.test.ts +153 -0
  93. package/src/__tests__/utilities.test.ts +541 -0
  94. package/src/__tests__/video-analysis-pricing.test.ts +58 -0
  95. package/src/__tests__/video-analysis.test.ts +63 -0
  96. package/src/__tests__/video-audio-capability.test.ts +204 -0
  97. package/src/__tests__/video-gen-providers.test.ts +28 -0
  98. package/src/__tests__/video-mode-aliases.test.ts +150 -0
  99. package/src/__tests__/video-ref-limits.test.ts +72 -0
  100. package/src/__tests__/video-utils.test.ts +303 -0
  101. package/src/__tests__/voice-changer-models.test.ts +33 -0
  102. package/src/__tests__/workflow-export-strip.test.ts +46 -0
  103. package/src/ai-avatar-pricing.ts +213 -0
  104. package/src/ancestor-refs.ts +48 -0
  105. package/src/animals.ts +231 -0
  106. package/src/audio-crossfade-curves.ts +73 -0
  107. package/src/audio-fx-presets.ts +64 -0
  108. package/src/avatar-payload-validators.ts +214 -0
  109. package/src/caption-styles.ts +31 -0
  110. package/src/character-aspect-defaults.ts +102 -0
  111. package/src/character-facets.ts +37 -0
  112. package/src/character-mention-slug.ts +166 -0
  113. package/src/character-usage-mode.ts +109 -0
  114. package/src/character-variant-assets.ts +121 -0
  115. package/src/character-voice.ts +151 -0
  116. package/src/cinematic-avatar-pricing.ts +111 -0
  117. package/src/clone-utils.ts +46 -0
  118. package/src/combine-transitions.ts +482 -0
  119. package/src/community.ts +112 -0
  120. package/src/component-types.ts +127 -0
  121. package/src/condition-variables.ts +65 -0
  122. package/src/credit-estimators/index.ts +15 -0
  123. package/src/credit-estimators/video-utils.ts +165 -0
  124. package/src/credit-identifiers.ts +304 -0
  125. package/src/entity-approval-types.ts +31 -0
  126. package/src/entity-aspect-defaults.ts +82 -0
  127. package/src/entity-asset-types.ts +296 -0
  128. package/src/entity-image-handle.ts +36 -0
  129. package/src/extra-refs.ts +139 -0
  130. package/src/featured-entities.ts +136 -0
  131. package/src/film-pricing.ts +117 -0
  132. package/src/filter-condition.ts +250 -0
  133. package/src/flux2-pricing.ts +18 -0
  134. package/src/freecut-protocol.ts +52 -0
  135. package/src/furniture.ts +167 -0
  136. package/src/generate-text-items.ts +15 -0
  137. package/src/generated-results.ts +63 -0
  138. package/src/group-aggregation.ts +75 -0
  139. package/src/hint-graph-types.ts +18 -0
  140. package/src/i18n/action-fx.ar.ts +89 -0
  141. package/src/i18n/action-fx.de.ts +89 -0
  142. package/src/i18n/action-fx.es.ts +89 -0
  143. package/src/i18n/action-fx.fr.ts +89 -0
  144. package/src/i18n/action-fx.he.ts +89 -0
  145. package/src/i18n/action-fx.hi.ts +89 -0
  146. package/src/i18n/action-fx.ja.ts +89 -0
  147. package/src/i18n/action-fx.ko.ts +89 -0
  148. package/src/i18n/action-fx.pt-BR.ts +89 -0
  149. package/src/i18n/action-fx.ru.ts +89 -0
  150. package/src/i18n/action-fx.zh-CN.ts +89 -0
  151. package/src/i18n/aesthetic.ar.ts +170 -0
  152. package/src/i18n/aesthetic.de.ts +48 -0
  153. package/src/i18n/aesthetic.es.ts +169 -0
  154. package/src/i18n/aesthetic.fr.ts +52 -0
  155. package/src/i18n/aesthetic.he.ts +169 -0
  156. package/src/i18n/aesthetic.hi.ts +55 -0
  157. package/src/i18n/aesthetic.ja.ts +165 -0
  158. package/src/i18n/aesthetic.ko.ts +169 -0
  159. package/src/i18n/aesthetic.pt-BR.ts +148 -0
  160. package/src/i18n/aesthetic.ru.ts +155 -0
  161. package/src/i18n/aesthetic.zh-CN.ts +172 -0
  162. package/src/i18n/animals.ar.ts +145 -0
  163. package/src/i18n/animals.de.ts +144 -0
  164. package/src/i18n/animals.es.ts +158 -0
  165. package/src/i18n/animals.fr.ts +144 -0
  166. package/src/i18n/animals.he.ts +155 -0
  167. package/src/i18n/animals.hi.ts +157 -0
  168. package/src/i18n/animals.ja.ts +159 -0
  169. package/src/i18n/animals.ko.ts +159 -0
  170. package/src/i18n/animals.pt-BR.ts +157 -0
  171. package/src/i18n/animals.ru.ts +155 -0
  172. package/src/i18n/animals.zh-CN.ts +155 -0
  173. package/src/i18n/atmosphere.ar.ts +49 -0
  174. package/src/i18n/atmosphere.de.ts +47 -0
  175. package/src/i18n/atmosphere.es.ts +50 -0
  176. package/src/i18n/atmosphere.fr.ts +47 -0
  177. package/src/i18n/atmosphere.he.ts +47 -0
  178. package/src/i18n/atmosphere.hi.ts +49 -0
  179. package/src/i18n/atmosphere.ja.ts +49 -0
  180. package/src/i18n/atmosphere.ko.ts +49 -0
  181. package/src/i18n/atmosphere.pt-BR.ts +49 -0
  182. package/src/i18n/atmosphere.ru.ts +47 -0
  183. package/src/i18n/atmosphere.zh-CN.ts +152 -0
  184. package/src/i18n/backdrop.ar.ts +53 -0
  185. package/src/i18n/backdrop.de.ts +46 -0
  186. package/src/i18n/backdrop.es.ts +54 -0
  187. package/src/i18n/backdrop.fr.ts +52 -0
  188. package/src/i18n/backdrop.he.ts +51 -0
  189. package/src/i18n/backdrop.hi.ts +59 -0
  190. package/src/i18n/backdrop.ja.ts +61 -0
  191. package/src/i18n/backdrop.ko.ts +59 -0
  192. package/src/i18n/backdrop.pt-BR.ts +59 -0
  193. package/src/i18n/backdrop.ru.ts +57 -0
  194. package/src/i18n/backdrop.zh-CN.ts +57 -0
  195. package/src/i18n/camera-format.ar.ts +40 -0
  196. package/src/i18n/camera-format.de.ts +37 -0
  197. package/src/i18n/camera-format.es.ts +41 -0
  198. package/src/i18n/camera-format.fr.ts +37 -0
  199. package/src/i18n/camera-format.he.ts +37 -0
  200. package/src/i18n/camera-format.hi.ts +42 -0
  201. package/src/i18n/camera-format.ja.ts +37 -0
  202. package/src/i18n/camera-format.ko.ts +37 -0
  203. package/src/i18n/camera-format.pt-BR.ts +46 -0
  204. package/src/i18n/camera-format.ru.ts +42 -0
  205. package/src/i18n/camera-format.zh-CN.ts +42 -0
  206. package/src/i18n/camera-motions.ar.ts +86 -0
  207. package/src/i18n/camera-motions.de.ts +74 -0
  208. package/src/i18n/camera-motions.es.ts +86 -0
  209. package/src/i18n/camera-motions.fr.ts +86 -0
  210. package/src/i18n/camera-motions.he.ts +86 -0
  211. package/src/i18n/camera-motions.hi.ts +99 -0
  212. package/src/i18n/camera-motions.ja.ts +99 -0
  213. package/src/i18n/camera-motions.ko.ts +99 -0
  214. package/src/i18n/camera-motions.pt-BR.ts +99 -0
  215. package/src/i18n/camera-motions.ru.ts +99 -0
  216. package/src/i18n/camera-motions.zh-CN.ts +99 -0
  217. package/src/i18n/character-fx.ar.ts +72 -0
  218. package/src/i18n/character-fx.de.ts +72 -0
  219. package/src/i18n/character-fx.es.ts +72 -0
  220. package/src/i18n/character-fx.fr.ts +72 -0
  221. package/src/i18n/character-fx.he.ts +72 -0
  222. package/src/i18n/character-fx.hi.ts +72 -0
  223. package/src/i18n/character-fx.ja.ts +72 -0
  224. package/src/i18n/character-fx.ko.ts +72 -0
  225. package/src/i18n/character-fx.pt-BR.ts +72 -0
  226. package/src/i18n/character-fx.ru.ts +72 -0
  227. package/src/i18n/character-fx.zh-CN.ts +72 -0
  228. package/src/i18n/color-look.ar.ts +50 -0
  229. package/src/i18n/color-look.de.ts +47 -0
  230. package/src/i18n/color-look.es.ts +50 -0
  231. package/src/i18n/color-look.fr.ts +50 -0
  232. package/src/i18n/color-look.he.ts +49 -0
  233. package/src/i18n/color-look.hi.ts +52 -0
  234. package/src/i18n/color-look.ja.ts +54 -0
  235. package/src/i18n/color-look.ko.ts +54 -0
  236. package/src/i18n/color-look.pt-BR.ts +54 -0
  237. package/src/i18n/color-look.ru.ts +52 -0
  238. package/src/i18n/color-look.zh-CN.ts +53 -0
  239. package/src/i18n/composition-effects.ar.ts +26 -0
  240. package/src/i18n/composition-effects.de.ts +25 -0
  241. package/src/i18n/composition-effects.es.ts +27 -0
  242. package/src/i18n/composition-effects.fr.ts +25 -0
  243. package/src/i18n/composition-effects.he.ts +25 -0
  244. package/src/i18n/composition-effects.hi.ts +27 -0
  245. package/src/i18n/composition-effects.ja.ts +27 -0
  246. package/src/i18n/composition-effects.ko.ts +27 -0
  247. package/src/i18n/composition-effects.pt-BR.ts +25 -0
  248. package/src/i18n/composition-effects.ru.ts +82 -0
  249. package/src/i18n/composition-effects.zh-CN.ts +25 -0
  250. package/src/i18n/era.ar.ts +37 -0
  251. package/src/i18n/era.de.ts +34 -0
  252. package/src/i18n/era.es.ts +37 -0
  253. package/src/i18n/era.fr.ts +37 -0
  254. package/src/i18n/era.he.ts +36 -0
  255. package/src/i18n/era.hi.ts +39 -0
  256. package/src/i18n/era.ja.ts +41 -0
  257. package/src/i18n/era.ko.ts +39 -0
  258. package/src/i18n/era.pt-BR.ts +41 -0
  259. package/src/i18n/era.ru.ts +121 -0
  260. package/src/i18n/era.zh-CN.ts +39 -0
  261. package/src/i18n/exposure-settings.ar.ts +28 -0
  262. package/src/i18n/exposure-settings.de.ts +26 -0
  263. package/src/i18n/exposure-settings.es.ts +28 -0
  264. package/src/i18n/exposure-settings.fr.ts +29 -0
  265. package/src/i18n/exposure-settings.he.ts +28 -0
  266. package/src/i18n/exposure-settings.hi.ts +31 -0
  267. package/src/i18n/exposure-settings.ja.ts +31 -0
  268. package/src/i18n/exposure-settings.ko.ts +31 -0
  269. package/src/i18n/exposure-settings.pt-BR.ts +31 -0
  270. package/src/i18n/exposure-settings.ru.ts +31 -0
  271. package/src/i18n/exposure-settings.zh-CN.ts +31 -0
  272. package/src/i18n/framing.ar.ts +78 -0
  273. package/src/i18n/framing.de.ts +73 -0
  274. package/src/i18n/framing.es.ts +78 -0
  275. package/src/i18n/framing.fr.ts +78 -0
  276. package/src/i18n/framing.he.ts +77 -0
  277. package/src/i18n/framing.hi.ts +82 -0
  278. package/src/i18n/framing.ja.ts +84 -0
  279. package/src/i18n/framing.ko.ts +82 -0
  280. package/src/i18n/framing.pt-BR.ts +84 -0
  281. package/src/i18n/framing.ru.ts +82 -0
  282. package/src/i18n/framing.zh-CN.ts +82 -0
  283. package/src/i18n/furniture.ar.ts +92 -0
  284. package/src/i18n/furniture.de.ts +93 -0
  285. package/src/i18n/furniture.es.ts +101 -0
  286. package/src/i18n/furniture.fr.ts +93 -0
  287. package/src/i18n/furniture.he.ts +101 -0
  288. package/src/i18n/furniture.hi.ts +101 -0
  289. package/src/i18n/furniture.ja.ts +101 -0
  290. package/src/i18n/furniture.ko.ts +101 -0
  291. package/src/i18n/furniture.pt-BR.ts +101 -0
  292. package/src/i18n/furniture.ru.ts +101 -0
  293. package/src/i18n/furniture.zh-CN.ts +101 -0
  294. package/src/i18n/held-prop.ar.ts +74 -0
  295. package/src/i18n/held-prop.de.ts +65 -0
  296. package/src/i18n/held-prop.es.ts +83 -0
  297. package/src/i18n/held-prop.fr.ts +74 -0
  298. package/src/i18n/held-prop.he.ts +73 -0
  299. package/src/i18n/held-prop.hi.ts +82 -0
  300. package/src/i18n/held-prop.ja.ts +84 -0
  301. package/src/i18n/held-prop.ko.ts +84 -0
  302. package/src/i18n/held-prop.pt-BR.ts +84 -0
  303. package/src/i18n/held-prop.ru.ts +82 -0
  304. package/src/i18n/held-prop.zh-CN.ts +82 -0
  305. package/src/i18n/index.ts +208 -0
  306. package/src/i18n/instrumentation.ar.ts +195 -0
  307. package/src/i18n/instrumentation.de.ts +195 -0
  308. package/src/i18n/instrumentation.es.ts +195 -0
  309. package/src/i18n/instrumentation.fr.ts +195 -0
  310. package/src/i18n/instrumentation.he.ts +195 -0
  311. package/src/i18n/instrumentation.hi.ts +195 -0
  312. package/src/i18n/instrumentation.ja.ts +195 -0
  313. package/src/i18n/instrumentation.ko.ts +195 -0
  314. package/src/i18n/instrumentation.pt-BR.ts +195 -0
  315. package/src/i18n/instrumentation.ru.ts +195 -0
  316. package/src/i18n/instrumentation.zh-CN.ts +195 -0
  317. package/src/i18n/lens.ar.ts +24 -0
  318. package/src/i18n/lens.de.ts +24 -0
  319. package/src/i18n/lens.es.ts +24 -0
  320. package/src/i18n/lens.fr.ts +24 -0
  321. package/src/i18n/lens.he.ts +24 -0
  322. package/src/i18n/lens.hi.ts +24 -0
  323. package/src/i18n/lens.ja.ts +24 -0
  324. package/src/i18n/lens.ko.ts +24 -0
  325. package/src/i18n/lens.pt-BR.ts +24 -0
  326. package/src/i18n/lens.ru.ts +25 -0
  327. package/src/i18n/lens.zh-CN.ts +24 -0
  328. package/src/i18n/lighting.ar.ts +86 -0
  329. package/src/i18n/lighting.de.ts +84 -0
  330. package/src/i18n/lighting.es.ts +89 -0
  331. package/src/i18n/lighting.fr.ts +84 -0
  332. package/src/i18n/lighting.he.ts +88 -0
  333. package/src/i18n/lighting.hi.ts +90 -0
  334. package/src/i18n/lighting.ja.ts +90 -0
  335. package/src/i18n/lighting.ko.ts +90 -0
  336. package/src/i18n/lighting.pt-BR.ts +90 -0
  337. package/src/i18n/lighting.ru.ts +88 -0
  338. package/src/i18n/lighting.zh-CN.ts +92 -0
  339. package/src/i18n/loop-subject.ar.ts +39 -0
  340. package/src/i18n/loop-subject.de.ts +39 -0
  341. package/src/i18n/loop-subject.es.ts +39 -0
  342. package/src/i18n/loop-subject.fr.ts +39 -0
  343. package/src/i18n/loop-subject.he.ts +39 -0
  344. package/src/i18n/loop-subject.hi.ts +39 -0
  345. package/src/i18n/loop-subject.ja.ts +39 -0
  346. package/src/i18n/loop-subject.ko.ts +39 -0
  347. package/src/i18n/loop-subject.pt-BR.ts +39 -0
  348. package/src/i18n/loop-subject.ru.ts +39 -0
  349. package/src/i18n/loop-subject.zh-CN.ts +39 -0
  350. package/src/i18n/materials.ar.ts +80 -0
  351. package/src/i18n/materials.de.ts +80 -0
  352. package/src/i18n/materials.es.ts +87 -0
  353. package/src/i18n/materials.fr.ts +80 -0
  354. package/src/i18n/materials.he.ts +86 -0
  355. package/src/i18n/materials.hi.ts +86 -0
  356. package/src/i18n/materials.ja.ts +88 -0
  357. package/src/i18n/materials.ko.ts +88 -0
  358. package/src/i18n/materials.pt-BR.ts +88 -0
  359. package/src/i18n/materials.ru.ts +86 -0
  360. package/src/i18n/materials.zh-CN.ts +86 -0
  361. package/src/i18n/mood.ar.ts +61 -0
  362. package/src/i18n/mood.de.ts +61 -0
  363. package/src/i18n/mood.es.ts +66 -0
  364. package/src/i18n/mood.fr.ts +61 -0
  365. package/src/i18n/mood.he.ts +64 -0
  366. package/src/i18n/mood.hi.ts +66 -0
  367. package/src/i18n/mood.ja.ts +66 -0
  368. package/src/i18n/mood.ko.ts +66 -0
  369. package/src/i18n/mood.pt-BR.ts +64 -0
  370. package/src/i18n/mood.ru.ts +64 -0
  371. package/src/i18n/mood.zh-CN.ts +64 -0
  372. package/src/i18n/music-genre.ar.ts +302 -0
  373. package/src/i18n/music-genre.de.ts +302 -0
  374. package/src/i18n/music-genre.es.ts +302 -0
  375. package/src/i18n/music-genre.fr.ts +302 -0
  376. package/src/i18n/music-genre.he.ts +302 -0
  377. package/src/i18n/music-genre.hi.ts +302 -0
  378. package/src/i18n/music-genre.ja.ts +302 -0
  379. package/src/i18n/music-genre.ko.ts +302 -0
  380. package/src/i18n/music-genre.pt-BR.ts +302 -0
  381. package/src/i18n/music-genre.ru.ts +302 -0
  382. package/src/i18n/music-genre.zh-CN.ts +302 -0
  383. package/src/i18n/music-mood.ar.ts +75 -0
  384. package/src/i18n/music-mood.de.ts +75 -0
  385. package/src/i18n/music-mood.es.ts +75 -0
  386. package/src/i18n/music-mood.fr.ts +75 -0
  387. package/src/i18n/music-mood.he.ts +75 -0
  388. package/src/i18n/music-mood.hi.ts +75 -0
  389. package/src/i18n/music-mood.ja.ts +75 -0
  390. package/src/i18n/music-mood.ko.ts +75 -0
  391. package/src/i18n/music-mood.pt-BR.ts +75 -0
  392. package/src/i18n/music-mood.ru.ts +75 -0
  393. package/src/i18n/music-mood.zh-CN.ts +75 -0
  394. package/src/i18n/person.ar.ts +638 -0
  395. package/src/i18n/person.de.ts +629 -0
  396. package/src/i18n/person.es.ts +645 -0
  397. package/src/i18n/person.fr.ts +621 -0
  398. package/src/i18n/person.he.ts +656 -0
  399. package/src/i18n/person.hi.ts +654 -0
  400. package/src/i18n/person.ja.ts +662 -0
  401. package/src/i18n/person.ko.ts +662 -0
  402. package/src/i18n/person.pt-BR.ts +656 -0
  403. package/src/i18n/person.ru.ts +656 -0
  404. package/src/i18n/person.zh-CN.ts +656 -0
  405. package/src/i18n/photo-genre.ar.ts +58 -0
  406. package/src/i18n/photo-genre.de.ts +52 -0
  407. package/src/i18n/photo-genre.es.ts +64 -0
  408. package/src/i18n/photo-genre.fr.ts +58 -0
  409. package/src/i18n/photo-genre.he.ts +62 -0
  410. package/src/i18n/photo-genre.hi.ts +63 -0
  411. package/src/i18n/photo-genre.ja.ts +65 -0
  412. package/src/i18n/photo-genre.ko.ts +63 -0
  413. package/src/i18n/photo-genre.pt-BR.ts +65 -0
  414. package/src/i18n/photo-genre.ru.ts +63 -0
  415. package/src/i18n/photo-genre.zh-CN.ts +63 -0
  416. package/src/i18n/photographer.ar.ts +75 -0
  417. package/src/i18n/photographer.de.ts +74 -0
  418. package/src/i18n/photographer.es.ts +77 -0
  419. package/src/i18n/photographer.fr.ts +77 -0
  420. package/src/i18n/photographer.he.ts +78 -0
  421. package/src/i18n/photographer.hi.ts +80 -0
  422. package/src/i18n/photographer.ja.ts +84 -0
  423. package/src/i18n/photographer.ko.ts +84 -0
  424. package/src/i18n/photographer.pt-BR.ts +83 -0
  425. package/src/i18n/photographer.ru.ts +78 -0
  426. package/src/i18n/photographer.zh-CN.ts +78 -0
  427. package/src/i18n/pose.ar.ts +95 -0
  428. package/src/i18n/pose.de.ts +96 -0
  429. package/src/i18n/pose.es.ts +104 -0
  430. package/src/i18n/pose.fr.ts +96 -0
  431. package/src/i18n/pose.he.ts +104 -0
  432. package/src/i18n/pose.hi.ts +104 -0
  433. package/src/i18n/pose.ja.ts +104 -0
  434. package/src/i18n/pose.ko.ts +104 -0
  435. package/src/i18n/pose.pt-BR.ts +104 -0
  436. package/src/i18n/pose.ru.ts +104 -0
  437. package/src/i18n/pose.zh-CN.ts +104 -0
  438. package/src/i18n/post-process-effects.ar.ts +25 -0
  439. package/src/i18n/post-process-effects.de.ts +24 -0
  440. package/src/i18n/post-process-effects.es.ts +26 -0
  441. package/src/i18n/post-process-effects.fr.ts +24 -0
  442. package/src/i18n/post-process-effects.he.ts +24 -0
  443. package/src/i18n/post-process-effects.hi.ts +26 -0
  444. package/src/i18n/post-process-effects.ja.ts +26 -0
  445. package/src/i18n/post-process-effects.ko.ts +26 -0
  446. package/src/i18n/post-process-effects.pt-BR.ts +24 -0
  447. package/src/i18n/post-process-effects.ru.ts +24 -0
  448. package/src/i18n/post-process-effects.zh-CN.ts +24 -0
  449. package/src/i18n/render-quality.ar.ts +34 -0
  450. package/src/i18n/render-quality.de.ts +30 -0
  451. package/src/i18n/render-quality.es.ts +35 -0
  452. package/src/i18n/render-quality.fr.ts +34 -0
  453. package/src/i18n/render-quality.he.ts +33 -0
  454. package/src/i18n/render-quality.hi.ts +39 -0
  455. package/src/i18n/render-quality.ja.ts +39 -0
  456. package/src/i18n/render-quality.ko.ts +39 -0
  457. package/src/i18n/render-quality.pt-BR.ts +37 -0
  458. package/src/i18n/render-quality.ru.ts +37 -0
  459. package/src/i18n/render-quality.zh-CN.ts +37 -0
  460. package/src/i18n/seasons.ar.ts +10 -0
  461. package/src/i18n/seasons.de.ts +10 -0
  462. package/src/i18n/seasons.es.ts +10 -0
  463. package/src/i18n/seasons.fr.ts +10 -0
  464. package/src/i18n/seasons.he.ts +10 -0
  465. package/src/i18n/seasons.hi.ts +10 -0
  466. package/src/i18n/seasons.ja.ts +10 -0
  467. package/src/i18n/seasons.ko.ts +10 -0
  468. package/src/i18n/seasons.pt-BR.ts +10 -0
  469. package/src/i18n/seasons.ru.ts +10 -0
  470. package/src/i18n/seasons.zh-CN.ts +10 -0
  471. package/src/i18n/setting.ar.ts +73 -0
  472. package/src/i18n/setting.de.ts +73 -0
  473. package/src/i18n/setting.es.ts +77 -0
  474. package/src/i18n/setting.fr.ts +73 -0
  475. package/src/i18n/setting.he.ts +76 -0
  476. package/src/i18n/setting.hi.ts +76 -0
  477. package/src/i18n/setting.ja.ts +78 -0
  478. package/src/i18n/setting.ko.ts +76 -0
  479. package/src/i18n/setting.pt-BR.ts +78 -0
  480. package/src/i18n/setting.ru.ts +76 -0
  481. package/src/i18n/setting.zh-CN.ts +76 -0
  482. package/src/i18n/style.ar.ts +55 -0
  483. package/src/i18n/style.de.ts +54 -0
  484. package/src/i18n/style.es.ts +54 -0
  485. package/src/i18n/style.fr.ts +54 -0
  486. package/src/i18n/style.he.ts +54 -0
  487. package/src/i18n/style.hi.ts +54 -0
  488. package/src/i18n/style.ja.ts +54 -0
  489. package/src/i18n/style.ko.ts +54 -0
  490. package/src/i18n/style.pt-BR.ts +56 -0
  491. package/src/i18n/style.ru.ts +54 -0
  492. package/src/i18n/style.zh-CN.ts +54 -0
  493. package/src/i18n/styling.ar.ts +295 -0
  494. package/src/i18n/styling.de.ts +285 -0
  495. package/src/i18n/styling.es.ts +317 -0
  496. package/src/i18n/styling.fr.ts +285 -0
  497. package/src/i18n/styling.he.ts +307 -0
  498. package/src/i18n/styling.hi.ts +323 -0
  499. package/src/i18n/styling.ja.ts +317 -0
  500. package/src/i18n/styling.ko.ts +311 -0
  501. package/src/i18n/styling.pt-BR.ts +301 -0
  502. package/src/i18n/styling.ru.ts +301 -0
  503. package/src/i18n/styling.zh-CN.ts +307 -0
  504. package/src/i18n/temporal.ar.ts +31 -0
  505. package/src/i18n/temporal.de.ts +24 -0
  506. package/src/i18n/temporal.es.ts +27 -0
  507. package/src/i18n/temporal.fr.ts +28 -0
  508. package/src/i18n/temporal.he.ts +31 -0
  509. package/src/i18n/temporal.hi.ts +31 -0
  510. package/src/i18n/temporal.ja.ts +31 -0
  511. package/src/i18n/temporal.ko.ts +31 -0
  512. package/src/i18n/temporal.pt-BR.ts +31 -0
  513. package/src/i18n/temporal.ru.ts +31 -0
  514. package/src/i18n/temporal.zh-CN.ts +31 -0
  515. package/src/i18n/transitions.ar.ts +97 -0
  516. package/src/i18n/transitions.de.ts +97 -0
  517. package/src/i18n/transitions.es.ts +97 -0
  518. package/src/i18n/transitions.fr.ts +97 -0
  519. package/src/i18n/transitions.he.ts +97 -0
  520. package/src/i18n/transitions.hi.ts +97 -0
  521. package/src/i18n/transitions.ja.ts +97 -0
  522. package/src/i18n/transitions.ko.ts +97 -0
  523. package/src/i18n/transitions.pt-BR.ts +97 -0
  524. package/src/i18n/transitions.ru.ts +97 -0
  525. package/src/i18n/transitions.zh-CN.ts +97 -0
  526. package/src/i18n/types.ts +158 -0
  527. package/src/i18n/vehicles.ar.ts +137 -0
  528. package/src/i18n/vehicles.de.ts +125 -0
  529. package/src/i18n/vehicles.es.ts +138 -0
  530. package/src/i18n/vehicles.fr.ts +125 -0
  531. package/src/i18n/vehicles.he.ts +136 -0
  532. package/src/i18n/vehicles.hi.ts +138 -0
  533. package/src/i18n/vehicles.ja.ts +138 -0
  534. package/src/i18n/vehicles.ko.ts +138 -0
  535. package/src/i18n/vehicles.pt-BR.ts +136 -0
  536. package/src/i18n/vehicles.ru.ts +136 -0
  537. package/src/i18n/vehicles.zh-CN.ts +136 -0
  538. package/src/i18n/voice-character.ar.ts +126 -0
  539. package/src/i18n/voice-character.de.ts +126 -0
  540. package/src/i18n/voice-character.es.ts +126 -0
  541. package/src/i18n/voice-character.fr.ts +126 -0
  542. package/src/i18n/voice-character.he.ts +126 -0
  543. package/src/i18n/voice-character.hi.ts +126 -0
  544. package/src/i18n/voice-character.ja.ts +126 -0
  545. package/src/i18n/voice-character.ko.ts +126 -0
  546. package/src/i18n/voice-character.pt-BR.ts +126 -0
  547. package/src/i18n/voice-character.ru.ts +126 -0
  548. package/src/i18n/voice-character.zh-CN.ts +126 -0
  549. package/src/i18n/voice-delivery.ar.ts +77 -0
  550. package/src/i18n/voice-delivery.de.ts +77 -0
  551. package/src/i18n/voice-delivery.es.ts +77 -0
  552. package/src/i18n/voice-delivery.fr.ts +77 -0
  553. package/src/i18n/voice-delivery.he.ts +77 -0
  554. package/src/i18n/voice-delivery.hi.ts +77 -0
  555. package/src/i18n/voice-delivery.ja.ts +77 -0
  556. package/src/i18n/voice-delivery.ko.ts +77 -0
  557. package/src/i18n/voice-delivery.pt-BR.ts +77 -0
  558. package/src/i18n/voice-delivery.ru.ts +77 -0
  559. package/src/i18n/voice-delivery.zh-CN.ts +77 -0
  560. package/src/i18n/weapons.ar.ts +115 -0
  561. package/src/i18n/weapons.de.ts +114 -0
  562. package/src/i18n/weapons.es.ts +116 -0
  563. package/src/i18n/weapons.fr.ts +103 -0
  564. package/src/i18n/weapons.he.ts +114 -0
  565. package/src/i18n/weapons.hi.ts +116 -0
  566. package/src/i18n/weapons.ja.ts +116 -0
  567. package/src/i18n/weapons.ko.ts +116 -0
  568. package/src/i18n/weapons.pt-BR.ts +114 -0
  569. package/src/i18n/weapons.ru.ts +114 -0
  570. package/src/i18n/weapons.zh-CN.ts +114 -0
  571. package/src/image-critic-node.ts +61 -0
  572. package/src/image-critic-types.ts +40 -0
  573. package/src/index.ts +866 -0
  574. package/src/inject-upstream.ts +15 -0
  575. package/src/inpaint-region.ts +51 -0
  576. package/src/json-evaluator.ts +732 -0
  577. package/src/json-path.ts +52 -0
  578. package/src/lip-sync-pricing.ts +90 -0
  579. package/src/list-merge.ts +40 -0
  580. package/src/list-sort.ts +122 -0
  581. package/src/list-source-resolver.ts +50 -0
  582. package/src/llm-models.ts +245 -0
  583. package/src/location-mention-slug.ts +291 -0
  584. package/src/location-preset-catalog-map.ts +128 -0
  585. package/src/loop-delimiter.ts +73 -0
  586. package/src/lora-routing.ts +95 -0
  587. package/src/lottie-overlay-catalog.ts +175 -0
  588. package/src/lottie-slots.ts +309 -0
  589. package/src/model-catalog.ts +2386 -0
  590. package/src/model-constants.ts +1910 -0
  591. package/src/model-tree.ts +120 -0
  592. package/src/monetization.ts +15 -0
  593. package/src/multi-pick.ts +42 -0
  594. package/src/node-default-mappings.ts +262 -0
  595. package/src/node-mappable-fields.ts +70 -0
  596. package/src/node-preset-export.ts +56 -0
  597. package/src/node-preset-extract.ts +147 -0
  598. package/src/node-refs.ts +253 -0
  599. package/src/node-runtime-keys.ts +117 -0
  600. package/src/object-aspect-defaults.ts +72 -0
  601. package/src/object-picker-types.ts +22 -0
  602. package/src/parameter-node-value.ts +284 -0
  603. package/src/pinterest-url.ts +28 -0
  604. package/src/pipeline-chat.ts +72 -0
  605. package/src/pipeline-defaults.ts +318 -0
  606. package/src/pipeline-events.ts +162 -0
  607. package/src/pipeline-state-types.ts +196 -0
  608. package/src/pipeline-types.ts +647 -0
  609. package/src/pipeline-validation.ts +87 -0
  610. package/src/presentation-types.ts +23 -0
  611. package/src/presentation-utils.ts +397 -0
  612. package/src/producer-types.ts +188 -0
  613. package/src/progress-curve.ts +99 -0
  614. package/src/provider-directive-defaults.ts +69 -0
  615. package/src/reduce-strategy-registry.ts +121 -0
  616. package/src/reference-board-templates.ts +81 -0
  617. package/src/reference-roles.ts +153 -0
  618. package/src/reference-sheet/__tests__/board-to-column.test.ts +20 -0
  619. package/src/reference-sheet/__tests__/catalog.test.ts +50 -0
  620. package/src/reference-sheet/__tests__/cost.test.ts +38 -0
  621. package/src/reference-sheet/__tests__/no-drift.test.ts +28 -0
  622. package/src/reference-sheet/__tests__/panel-plan.test.ts +61 -0
  623. package/src/reference-sheet/__tests__/panel-prompts.test.ts +17 -0
  624. package/src/reference-sheet/__tests__/plan-generation.test.ts +72 -0
  625. package/src/reference-sheet/__tests__/presets.test.ts +54 -0
  626. package/src/reference-sheet/__tests__/types.test.ts +24 -0
  627. package/src/reference-sheet/catalog.ts +144 -0
  628. package/src/reference-sheet/cost.ts +37 -0
  629. package/src/reference-sheet/credit-id.ts +7 -0
  630. package/src/reference-sheet/index.ts +8 -0
  631. package/src/reference-sheet/panel-plan.ts +65 -0
  632. package/src/reference-sheet/panel-prompts.ts +14 -0
  633. package/src/reference-sheet/plan-generation.ts +79 -0
  634. package/src/reference-sheet/presets.ts +77 -0
  635. package/src/reference-sheet/types.ts +92 -0
  636. package/src/repeat-types.ts +97 -0
  637. package/src/resolve-field-mappings.ts +119 -0
  638. package/src/route-filter.ts +80 -0
  639. package/src/scene-helper-types.ts +249 -0
  640. package/src/scene-node-types.ts +281 -0
  641. package/src/scraper-actors.ts +57 -0
  642. package/src/scraper-output-schemas.ts +25 -0
  643. package/src/seasons.ts +45 -0
  644. package/src/selector.ts +864 -0
  645. package/src/settled-with-limit.ts +42 -0
  646. package/src/shot-element.ts +43 -0
  647. package/src/social-media-specs.ts +121 -0
  648. package/src/social-post.ts +24 -0
  649. package/src/sub-workflow-validation.ts +78 -0
  650. package/src/supported-fonts.ts +40 -0
  651. package/src/surround.ts +113 -0
  652. package/src/switchx-pricing.ts +33 -0
  653. package/src/text-separators.ts +59 -0
  654. package/src/to-connected-references.ts +77 -0
  655. package/src/types.ts +272 -0
  656. package/src/variant-job-id.ts +17 -0
  657. package/src/vehicles.ts +213 -0
  658. package/src/video-analysis-pricing.ts +74 -0
  659. package/src/video-analysis.ts +127 -0
  660. package/src/video-duration.ts +25 -0
  661. package/src/voice-changer-models.ts +36 -0
  662. package/src/voice-matcher-types.ts +37 -0
  663. package/src/voices.ts +92 -0
  664. package/src/weapons.ts +190 -0
  665. package/src/workflow-export.ts +153 -0
@@ -0,0 +1,662 @@
1
+ import type { LocaleCatalogMap } from "./types.js"
2
+
3
+ const map: LocaleCatalogMap = {
4
+ // -------------------- Type --------------------
5
+ "man": { label: "남성", description: "성인 남성입니다" },
6
+ "woman": { label: "여성", description: "성인 여성입니다" },
7
+ "not-defined": { label: "미지정", description: "성별을 지정하지 않음 — 열려 있음" },
8
+ "beautiful-woman": { label: "아름다운 여성", description: "고전적으로 아름다운 여성입니다" },
9
+ "girl-next-door": { label: "옆집 소녀", description: "친근하고 다가가기 쉬우며 건강한 매력을 지녔습니다" },
10
+ "handsome-man": { label: "잘생긴 남성", description: "고전적으로 잘생긴 남성입니다" },
11
+ "boy-next-door": { label: "옆집 소년", description: "친근하고 다가가기 쉬우며 건강한 매력을 지녔습니다" },
12
+ "gentleman": { label: "젠틀맨", description: "세련되고 클래식한 매력의 남성입니다" },
13
+ "elegant-woman": { label: "우아한 여성", description: "단정하고 세련된 여성입니다" },
14
+ "rugged-man": { label: "거친 남성", description: "풍파를 겪은 거친 남성입니다" },
15
+ "bad-boy": { label: "배드 보이", description: "반항적이고 날카로운 매력의 남성입니다" },
16
+ "graceful-woman": { label: "우아한 여성", description: "부드럽고 우아한 여성입니다" },
17
+ "baddie": { label: "배디", description: "트렌디하고 자신감 있게 스타일링된 여성입니다" },
18
+ "stylish-influencer": { label: "스타일리시한 인플루언서", description: "세련된 소셜미디어 트렌드세터" },
19
+ "stunning-model": { label: "스타일리시한 모델", description: "패션 모델 같은 미적 감각입니다" },
20
+ "supermodel": { label: "슈퍼모델", description: "런웨이와 표지를 장식하는 최고급의 상징적 존재" },
21
+ "femme-fatale": { label: "팜므 파탈", description: "매혹적이고 위험한 느와르의 유혹자입니다" },
22
+ "tough-guy": { label: "터프 가이", description: "단단하고 거친 남성입니다" },
23
+ "wise-elder": { label: "현명한 노인", description: "연륜 있고 지혜로운 노인입니다" },
24
+ "silver-fox": { label: "실버 폭스", description: "품격 있고 매력적인 중년 이상의 남성입니다" },
25
+ "mysterious-figure": { label: "신비로운 인물", description: "수수께끼 같은 인물입니다" },
26
+
27
+ // -------------------- Age --------------------
28
+ "age-baby": { label: "아기", description: "2세 미만입니다" },
29
+ "age-child": { label: "어린이", description: "5~12세 정도입니다" },
30
+ "age-teen": { label: "10대", description: "13~19세입니다" },
31
+ "age-20s": { label: "20대", description: "20대입니다" },
32
+ "age-30s": { label: "30대", description: "30대입니다" },
33
+ "age-40s": { label: "40대", description: "40대입니다" },
34
+ "age-50s": { label: "50대", description: "50대입니다" },
35
+ "age-60s": { label: "60대", description: "60대입니다" },
36
+ "age-elderly": { label: "고령", description: "70세 이상입니다" },
37
+
38
+ // -------------------- Ethnicity --------------------
39
+ "asian-any": { label: "아시아인 (전체)", description: "지역을 특정하지 않은 아시아인입니다" },
40
+ "east-asian": { label: "동아시아인 (전체)", description: "동아시아 외형 (광역)입니다" },
41
+ "chinese": { label: "중국인", description: "한족 중국인 외형입니다" },
42
+ "japanese": { label: "일본인", description: "일본인 외형입니다" },
43
+ "korean": { label: "한국인", description: "한국인 외형입니다" },
44
+ "mongolian-tibetan": { label: "몽골 / 티베트", description: "몽골 / 티베트 외형입니다" },
45
+ "south-asian": { label: "남아시아인 / 인도인", description: "인도 / 파키스탄 / 방글라데시 / 스리랑카입니다" },
46
+ "southeast-asian": { label: "동남아시아인 (전체)", description: "동남아시아인 (광역)입니다" },
47
+ "thai": { label: "태국인", description: "태국인 외형입니다" },
48
+ "vietnamese": { label: "베트남인", description: "베트남인 외형입니다" },
49
+ "indonesian-malay": { label: "인도네시아인 / 말레이인", description: "인도네시아 / 말레이 외형입니다" },
50
+ "khmer": { label: "크메르 / 캄보디아", description: "크메르 / 캄보디아 외형입니다" },
51
+ "filipino": { label: "필리핀인", description: "필리핀인 외형 (아시아 + 스페인 혈통)입니다" },
52
+ "mena-any": { label: "중동 / 북아프리카 (전체)", description: "지역을 특정하지 않은 MENA입니다" },
53
+ "middle-eastern": { label: "중동인 (아랍)", description: "아랍 / 레반트 / 걸프 외형입니다" },
54
+ "turkish": { label: "터키인", description: "아나톨리아 터키인 외형입니다" },
55
+ "persian": { label: "페르시아인 / 이란인", description: "인도-이란 외형입니다" },
56
+ "israeli": { label: "이스라엘인", description: "이스라엘 외형 (지중해 레반트, 광역)" },
57
+ "african": { label: "아프리카인 (전체)", description: "지역을 특정하지 않은 사하라 이남 아프리카인입니다" },
58
+ "west-african": { label: "서아프리카인", description: "요루바 / 이그보 / 아칸 / 월로프입니다" },
59
+ "east-african": { label: "동아프리카인", description: "소말리 / 에티오피아 / 스와힐리입니다" },
60
+ "central-african": { label: "중앙아프리카인", description: "반투 / 콩고 / 앙골라입니다" },
61
+ "southern-african": { label: "남부 아프리카인", description: "줄루 / 코사 / 소토입니다" },
62
+ "afro-caribbean": { label: "아프리카-카리브계", description: "영어권 카리브 (자메이카 / 트리니다드 / 바베이도스)입니다" },
63
+ "european-any": { label: "유럽인 (전체)", description: "지역을 특정하지 않은 유럽인입니다" },
64
+ "nordic": { label: "노르딕 (전체)", description: "모든 스칸디나비아 / 북유럽인 — 지역 미지정" },
65
+ "swedish": { label: "스웨덴계", description: "스웨덴 — 키 크고 금발이 많으며 섬세한 이목구비" },
66
+ "norwegian": { label: "노르웨이계", description: "노르웨이 — 흰 피부, 밝은 눈동자 흔함" },
67
+ "danish": { label: "덴마크계", description: "덴마크 — 부드러운 이목구비, 애쉬블론드 흔함" },
68
+ "finnish": { label: "핀란드계", description: "핀란드 — 우랄계 이목구비, 높은 광대" },
69
+ "icelandic": { label: "아이슬란드계", description: "아이슬란드 — 노르드 + 켈트 혼혈, 날카로운 각진 이목구비" },
70
+ "celtic": { label: "켈트", description: "영국 / 아일랜드 외형입니다" },
71
+ "mediterranean": { label: "지중해", description: "남유럽인 (광역)입니다" },
72
+ "slavic": { label: "슬라브", description: "동유럽 외형입니다" },
73
+ "czech": { label: "체코", description: "체코 외형 (서슬라브, 중부 유럽)" },
74
+ "russian": { label: "러시아", description: "러시아 외형 (동슬라브)" },
75
+ "ukrainian": { label: "우크라이나", description: "우크라이나 외형 (동슬라브)" },
76
+ "italian": { label: "이탈리아인", description: "이탈리아인 외형입니다" },
77
+ "iberian": { label: "이베리아 (스페인 / 포르투갈)", description: "스페인 / 포르투갈 — 켈트이베리아 + 무어 혈통입니다" },
78
+ "french": { label: "프랑스인", description: "프랑스인 외형 (북부와 남부에 따라 다양)입니다" },
79
+ "germanic": { label: "게르만", description: "독일 / 오스트리아 / 네덜란드 / 스위스-독일계입니다" },
80
+ "greek": { label: "그리스인", description: "그리스인 외형입니다" },
81
+ "baltic": { label: "발트", description: "리투아니아 / 라트비아 / 에스토니아입니다" },
82
+ "latin-american": { label: "라틴 아메리카인 (전체)", description: "지역을 특정하지 않은 라틴 아메리카인입니다" },
83
+ "mexican-mesoamerican": { label: "멕시코 / 메소아메리카", description: "멕시코 / 과테말라 / 중미 메스티소입니다" },
84
+ "caribbean-latino": { label: "카리브 라틴", description: "쿠바 / 도미니카 / 푸에르토리코입니다" },
85
+ "brazilian": { label: "브라질인", description: "브라질인 (포르투갈 + 아프리카 + 원주민)입니다" },
86
+ "andean-indigenous": { label: "안데스 / 라틴 원주민", description: "케추아 / 아이마라 / 마야 / 나우아입니다" },
87
+ "southern-cone": { label: "남부 원뿔 유럽계", description: "아르헨티나 / 우루과이 / 칠레 (주로 유럽계)입니다" },
88
+ "indigenous-any": { label: "원주민 (전체)", description: "특정 그룹을 지정하지 않은 원주민입니다" },
89
+ "native-american": { label: "북미 원주민", description: "북미 원주민 / 퍼스트 네이션입니다" },
90
+ "aboriginal-australian": { label: "호주 원주민", description: "호주 원주민 / 토레스 해협 출신입니다" },
91
+ "pacific-islander": { label: "태평양 섬 주민", description: "폴리네시아 / 마오리 / 사모아 / 하와이입니다" },
92
+ "inuit": { label: "이누이트 / 북극", description: "이누이트 / 유픽 / 알류트입니다" },
93
+ "mixed": { label: "혼혈", description: "혼혈 혈통입니다" },
94
+
95
+ // Body (frame / body-mass / bust / waist / hips / silhouette)
96
+ "frame-petite": { label: "프티트", description: "키가 작고 체구가 작은 체형입니다" },
97
+ "frame-slim": { label: "슬림", description: "좁고 가는 체형입니다" },
98
+ "frame-average": { label: "보통", description: "평균적인 체형입니다" },
99
+ "frame-broad": { label: "넓은", description: "넓고 어깨가 벌어진 체형입니다" },
100
+ "mass-lean": { label: "마른", description: "마르고 체질량이 적습니다" },
101
+ "mass-average": { label: "보통", description: "평균적인 체질량입니다" },
102
+ "mass-full": { label: "풍만한", description: "풍만한 체형입니다" },
103
+ "mass-heavy": { label: "묵직한", description: "묵직하고 큰 체격입니다" },
104
+ "bust-small": { label: "작은", description: "작은 가슴입니다" },
105
+ "bust-average": { label: "보통", description: "보통 가슴입니다" },
106
+ "bust-full": { label: "풍만한", description: "풍만한 가슴입니다" },
107
+ "bust-very-full": { label: "매우 풍만한", description: "매우 풍만한 가슴입니다" },
108
+ "waist-defined": { label: "잘록한", description: "또렷하게 잘록한 허리입니다" },
109
+ "waist-average": { label: "보통", description: "보통 허리입니다" },
110
+ "waist-straight": { label: "일자", description: "굴곡이 적은 일자 허리입니다" },
111
+ "hips-narrow": { label: "좁은", description: "좁은 엉덩이입니다" },
112
+ "hips-balanced": { label: "균형 잡힌", description: "균형 잡힌 엉덩이입니다" },
113
+ "hips-wide": { label: "넓은", description: "넓은 엉덩이입니다" },
114
+ "silhouette-hourglass": { label: "모래시계형", description: "가슴과 엉덩이가 균형 잡히고 허리가 잘록합니다" },
115
+ "silhouette-rectangular": { label: "직사각형", description: "위아래가 일직선인 실루엣입니다" },
116
+ "silhouette-pear": { label: "배 모양", description: "어깨보다 엉덩이가 넓습니다" },
117
+ "silhouette-inverted": { label: "역삼각형", description: "어깨가 넓고 엉덩이가 좁습니다" },
118
+ "silhouette-athletic": { label: "운동선수형", description: "마르고 탄탄한 V라인 체형입니다" },
119
+
120
+ // -------------------- Face Shape --------------------
121
+ "face-oval": { label: "타원형", description: "세로가 약간 긴, 부드러운 곡선의 얼굴입니다" },
122
+ "face-round": { label: "둥근형", description: "부드러운 원형 얼굴입니다" },
123
+ "face-square": { label: "사각형", description: "강한 턱, 이마와 턱 너비가 같은 얼굴입니다" },
124
+ "face-heart": { label: "하트형", description: "이마가 넓고 턱이 뾰족합니다" },
125
+ "face-diamond": { label: "다이아몬드형", description: "이마와 턱이 좁고 광대뼈가 넓습니다" },
126
+ "face-oblong": { label: "긴 타원형", description: "길고 좁은 얼굴입니다" },
127
+ "face-triangular": { label: "삼각형", description: "이마가 좁고 턱이 넓습니다" },
128
+
129
+ // -------------------- Jawline --------------------
130
+ "jaw-strong": { label: "강한", description: "또렷하고 각진 턱선입니다" },
131
+ "jaw-soft": { label: "부드러운", description: "부드럽고 둥근 턱입니다" },
132
+ "jaw-pointed": { label: "뾰족한", description: "뾰족한 턱과 좁은 턱선입니다" },
133
+ "jaw-wide": { label: "넓은", description: "넓고 큰 턱입니다" },
134
+ "jaw-double": { label: "이중 턱", description: "보이는 이중 턱입니다" },
135
+
136
+ // -------------------- Eye Shape --------------------
137
+ "eye-almond": { label: "아몬드형", description: "아몬드 모양, 약간 위로 올라간 눈입니다" },
138
+ "eye-round": { label: "둥근", description: "넓고 둥근 눈입니다" },
139
+ "eye-hooded": { label: "후디드", description: "윗눈꺼풀이 주름을 부분적으로 덮은 눈입니다" },
140
+ "eye-monolid": { label: "모놀리드", description: "쌍꺼풀 없이 매끄러운 눈꺼풀입니다" },
141
+ "eye-deep-set": { label: "깊이 들어간", description: "안구가 더 깊게 자리 잡은 눈입니다" },
142
+ "eye-downturned": { label: "처진 눈매", description: "바깥 모서리가 아래로 향한 눈입니다" },
143
+ "eye-upturned": { label: "올라간 눈매", description: "바깥 모서리가 위로 올라간 눈입니다" },
144
+ "eye-wide-set": { label: "넓게 떨어진", description: "눈 사이가 넓게 떨어진 눈입니다" },
145
+ "eye-close-set": { label: "가깝게 모인", description: "눈이 가깝게 모인 눈입니다" },
146
+
147
+ // -------------------- Nose --------------------
148
+ "nose-straight": { label: "곧은", description: "곧은 콧대입니다" },
149
+ "nose-aquiline": { label: "매부리코", description: "휘어지고 갈고리 모양인 콧대입니다" },
150
+ "nose-roman": { label: "로마형", description: "약간 솟아오른 두드러진 콧대입니다" },
151
+ "nose-snub": { label: "들창코", description: "짧고 약간 위로 들린 코입니다" },
152
+ "nose-button": { label: "버튼", description: "작고 둥근 코끝입니다" },
153
+ "nose-broad": { label: "넓은", description: "넓은 콧구멍과 넓은 콧대입니다" },
154
+ "nose-narrow": { label: "좁은", description: "가늘고 좁은 코입니다" },
155
+ "nose-hooked": { label: "갈고리형", description: "강하게 휘어진 갈고리 모양 끝입니다" },
156
+
157
+ // -------------------- Lips --------------------
158
+ "lips-thin": { label: "얇은", description: "얇은 입술입니다" },
159
+ "lips-medium": { label: "보통", description: "평균적인 두께의 입술입니다" },
160
+ "lips-full": { label: "풍성한", description: "풍성하고 도톰한 입술입니다" },
161
+ "lips-wide": { label: "넓은", description: "넓은 입 모양입니다" },
162
+ "lips-cupids-bow": { label: "큐피드 보우", description: "윗입술의 두드러진 큐피드 보우입니다" },
163
+ "lips-small": { label: "작은", description: "작고 단아한 입입니다" },
164
+
165
+ // -------------------- Lip State --------------------
166
+ "lip-state-chapped": { label: "갈라진", description: "갈라지고 건조한, 풍파를 겪은 입술입니다" },
167
+ "lip-state-glossy": { label: "글로시", description: "광택이 흐르는 촉촉한 입술입니다" },
168
+ "lip-state-bare": { label: "베어", description: "자연스럽고 화장하지 않은 입술입니다" },
169
+ "lip-state-bold-red": { label: "볼드 레드", description: "채도 높은 빨간 립스틱 스테이트먼트입니다" },
170
+ "lip-state-bitten": { label: "깨문", description: "장난스럽게 아랫입술을 살짝 깨문 모습입니다" },
171
+ "lip-state-parted": { label: "벌어진", description: "입술이 살짝 벌어져 호흡하는 모습입니다" },
172
+ "lip-state-pursed": { label: "오므린", description: "입술을 모아 앞으로 내민 모습입니다" },
173
+ "lip-state-pouting": { label: "삐죽 내민", description: "삐죽 내민 풀 포지션의 입술입니다" },
174
+
175
+ // -------------------- Hair Color --------------------
176
+ "hair-platinum": { label: "플래티넘", description: "매우 옅은 아이시 플래티넘입니다" },
177
+ "hair-creamy": { label: "크리미", description: "따뜻한 크리미 / 바닐라 블론드입니다" },
178
+ "hair-blonde": { label: "블론드", description: "클래식한 블론드 헤어입니다" },
179
+ "hair-honey": { label: "허니", description: "따뜻한 허니 골드 블론드입니다" },
180
+ "hair-strawberry": { label: "스트로베리 블론드", description: "분홍빛 레드 톤이 도는 블론드입니다" },
181
+ "hair-ash-blonde": { label: "애쉬 블론드", description: "차갑고 애쉬한 블론드입니다" },
182
+ "hair-ginger": { label: "진저", description: "선명한 진저 (붉은 주황빛)입니다" },
183
+ "hair-copper": { label: "코퍼", description: "선명한 코퍼 주황-레드입니다" },
184
+ "hair-red": { label: "레드", description: "클래식한 레드 헤어입니다" },
185
+ "hair-auburn": { label: "어번", description: "풍성한 적갈색입니다" },
186
+ "hair-burgundy": { label: "버건디", description: "어두운 와인 레드입니다" },
187
+ "hair-light-brown": { label: "라이트 브라운", description: "밝은 브라운 헤어입니다" },
188
+ "hair-caramel": { label: "캐러멜", description: "따뜻한 캐러멜 브라운입니다" },
189
+ "hair-brown": { label: "브라운", description: "미디엄 브라운 헤어입니다" },
190
+ "hair-chestnut": { label: "체스트넛", description: "따뜻한 적갈색 체스트넛입니다" },
191
+ "hair-chocolate": { label: "초콜릿", description: "풍성한 다크 초콜릿 브라운입니다" },
192
+ "hair-dark-brown": { label: "다크 브라운", description: "어두운 브라운 헤어입니다" },
193
+ "hair-black": { label: "블랙", description: "클래식한 블랙 헤어입니다" },
194
+ "hair-jet-black": { label: "제트 블랙", description: "푸른 톤이 도는 짙은 블랙입니다" },
195
+ "hair-gray": { label: "그레이", description: "그레이 헤어입니다" },
196
+ "hair-salt-pepper": { label: "솔트 & 페퍼", description: "검정과 회색이 섞인 헤어입니다" },
197
+ "hair-white": { label: "화이트", description: "흰 헤어입니다" },
198
+ "hair-silver": { label: "실버", description: "밝은 메탈릭 실버" },
199
+ "hair-rose-gold": { label: "로즈 골드", description: "부드러운 로즈골드 메탈릭" },
200
+ "hair-dyed": { label: "컬러풀 (전체)", description: "화려하게 염색 — 색상 미지정" },
201
+ "hair-blue": { label: "블루", description: "강렬하게 푸르게 염색한 머리" },
202
+ "hair-pastel-blue": { label: "파스텔 블루", description: "부드러운 파스텔 하늘색" },
203
+ "hair-teal": { label: "틸", description: "채도 높은 청록" },
204
+ "hair-mint": { label: "민트", description: "옅은 민트 그린" },
205
+ "hair-green": { label: "그린", description: "강렬하게 푸르게 염색한 머리" },
206
+ "hair-lavender": { label: "라벤더", description: "부드러운 라벤더 바이올렛" },
207
+ "hair-purple": { label: "퍼플", description: "깊고 진한 퍼플" },
208
+ "hair-magenta": { label: "마젠타", description: "선명한 마젠타 핑크-퍼플" },
209
+ "hair-pink": { label: "핑크", description: "강렬하게 분홍빛으로 염색한 머리" },
210
+ "hair-pastel-pink": { label: "파스텔 핑크", description: "부드러운 파스텔 솜사탕 핑크" },
211
+ "hair-peach": { label: "피치", description: "따뜻한 피치 블론드-핑크" },
212
+ "hair-mermaid": { label: "머메이드", description: "푸른-초록-보라 바다 블렌드" },
213
+ "hair-rainbow": { label: "레인보우", description: "다양한 레인보우 스트랜드" },
214
+
215
+ // -------------------- Hair Base --------------------
216
+ "base-bald": { label: "민머리 / 삭발", description: "민머리이거나 완전히 삭발한 머리입니다" },
217
+ "base-buzz": { label: "버즈컷", description: "매우 짧게 깎은 머리입니다" },
218
+ "base-short-straight": { label: "짧고 직모", description: "짧은 직모입니다" },
219
+ "base-short-wavy": { label: "짧고 웨이브", description: "짧은 웨이브입니다" },
220
+ "base-short-curly": { label: "짧고 곱슬", description: "짧은 곱슬입니다" },
221
+ "base-short-coily": { label: "짧고 강한 곱슬", description: "짧은 강한 곱슬입니다" },
222
+ "base-medium-straight": { label: "중간 길이 직모", description: "어깨 길이의 직모입니다" },
223
+ "base-medium-wavy": { label: "중간 길이 웨이브", description: "어깨 길이의 웨이브입니다" },
224
+ "base-medium-curly": { label: "중간 길이 곱슬", description: "어깨 길이의 곱슬입니다" },
225
+ "base-medium-coily": { label: "중간 길이 강한 곱슬", description: "어깨 길이의 강한 곱슬입니다" },
226
+ "base-long-straight": { label: "긴 직모", description: "등 중간까지 오는 직모입니다" },
227
+ "base-long-wavy": { label: "긴 웨이브", description: "등 중간까지 오는 웨이브입니다" },
228
+ "base-long-curly": { label: "긴 곱슬", description: "등 중간까지 오는 곱슬입니다" },
229
+ "base-long-coily": { label: "긴 강한 곱슬", description: "등 중간까지 오는 강한 곱슬입니다" },
230
+ "base-very-long-straight": { label: "매우 긴 직모", description: "허리까지 오는 직모입니다" },
231
+ "base-very-long-wavy": { label: "매우 긴 웨이브", description: "허리까지 오는 웨이브입니다" },
232
+ "base-very-long-curly": { label: "매우 긴 곱슬", description: "허리까지 오는 곱슬입니다" },
233
+ "base-afro": { label: "아프로", description: "풍성한 둥근 아프로입니다" },
234
+ "base-thinning": { label: "숱이 적은 / 후퇴하는", description: "눈에 띄게 숱이 적거나 헤어라인이 후퇴한 모습입니다" },
235
+ "base-wet": { label: "젖은", description: "젖어서 매끈한 머리입니다" },
236
+
237
+ // -------------------- Eyebrows --------------------
238
+ "brows-natural": { label: "자연스러운", description: "손대지 않은 자연 눈썹입니다" },
239
+ "brows-thick": { label: "두꺼운 / 풍성한", description: "두껍고 풍성한 눈썹입니다" },
240
+ "brows-thin": { label: "얇은 / 가는", description: "얇고 가는 모양의 눈썹입니다" },
241
+ "brows-arched": { label: "아치형", description: "강하게 아치를 그리는 극적인 눈썹입니다" },
242
+ "brows-straight": { label: "직선", description: "수평으로 평평한 눈썹입니다" },
243
+ "brows-bold": { label: "볼드", description: "선명하고 진한 풀 눈썹입니다" },
244
+ "brows-soft": { label: "부드러운 / 흐릿한", description: "부드럽고 옅은 흐릿한 눈썹입니다" },
245
+ "brows-microbladed": { label: "마이크로블레이딩", description: "또렷한 모양으로 그려진 마이크로블레이딩 눈썹입니다" },
246
+ "brows-tinted": { label: "틴티드", description: "머리색과 다른 색으로 틴팅된 눈썹입니다" },
247
+ "brows-unibrow": { label: "일자 눈썹", description: "이어진 일자 눈썹입니다" },
248
+
249
+ // -------------------- Skin Tone --------------------
250
+ "skin-very-fair": { label: "매우 밝은", description: "매우 밝거나 창백한 피부입니다" },
251
+ "skin-fair": { label: "밝은", description: "밝은 피부입니다" },
252
+ "skin-medium": { label: "중간", description: "중간 톤의 피부입니다" },
253
+ "skin-olive": { label: "올리브", description: "올리브 톤의 피부입니다" },
254
+ "skin-tan": { label: "탄", description: "햇볕에 그을린 피부입니다" },
255
+ "skin-brown": { label: "브라운", description: "갈색 피부입니다" },
256
+ "skin-dark": { label: "다크", description: "어두운 피부입니다" },
257
+
258
+ // -------------------- Eye Color --------------------
259
+ "eyes-brown": { label: "갈색", description: "갈색 눈입니다" },
260
+ "eyes-blue": { label: "파란색", description: "파란 눈입니다" },
261
+ "eyes-green": { label: "초록색", description: "초록 눈입니다" },
262
+ "eyes-hazel": { label: "헤이즐", description: "헤이즐 눈입니다" },
263
+ "eyes-gray": { label: "회색", description: "회색 눈입니다" },
264
+ "eyes-amber": { label: "앰버", description: "앰버 눈입니다" },
265
+ "eyes-violet": { label: "바이올렛", description: "희귀한 바이올렛 눈 (Liz Taylor)" },
266
+ "eyes-gold": { label: "골드", description: "빛나는 황금빛 홍채" },
267
+ "eyes-silver": { label: "실버", description: "옅은 실버-그레이 홍채" },
268
+ "eyes-red": { label: "레드", description: "붉은 홍채 (알비니즘 / 판타지)" },
269
+ "eyes-pink": { label: "핑크", description: "부드러운 분홍 홍채 (알비노 / 판타지)" },
270
+ "eyes-turquoise": { label: "터쿼이즈", description: "선명한 터쿼이즈 청록 홍채" },
271
+
272
+ // -------------------- Eye State --------------------
273
+ "eye-state-closed": { label: "감은", description: "완전히 감겨 평온해 보이는 눈입니다" },
274
+ "eye-state-half-lidded": { label: "반쯤 감은", description: "졸린 듯 무거운 눈꺼풀의 시선입니다" },
275
+ "eye-state-wide-eyed": { label: "휘둥그레진", description: "활짝 뜨고 기민하거나 놀란 눈입니다" },
276
+ "eye-state-staring-camera": { label: "카메라를 응시", description: "렌즈와의 직접적인 시선 교환입니다" },
277
+ "eye-state-gazing-away": { label: "다른 곳 응시", description: "카메라 밖을 보는 사색적인 시선입니다" },
278
+ "eye-state-gazing-up": { label: "위를 응시", description: "위쪽 무언가를 향해 들린 눈입니다" },
279
+ "eye-state-gazing-down": { label: "아래를 응시", description: "시선이 떨어진 눈입니다" },
280
+ "eye-state-glassy": { label: "글래시", description: "촉촉이 젖은 눈물 어린 눈입니다" },
281
+
282
+ // -------------------- Facial Hair --------------------
283
+ "face-clean-shaven": { label: "말끔한 면도", description: "깨끗하게 면도한 얼굴입니다" },
284
+ "face-stubble": { label: "수염 자국", description: "옅은 수염 자국입니다" },
285
+ "face-mustache": { label: "콧수염", description: "콧수염입니다" },
286
+ "face-goatee": { label: "고티", description: "염소 수염입니다" },
287
+ "face-short-beard": { label: "짧은 수염", description: "짧게 다듬은 수염입니다" },
288
+ "face-full-beard": { label: "풀 비어드", description: "두껍고 풍성한 수염입니다" },
289
+
290
+ // -------------------- Skin Texture --------------------
291
+ "texture-smooth": { label: "매끄러운", description: "흠 없이 매끄러운 피부입니다" },
292
+ "texture-wrinkled": { label: "주름진", description: "깊은 주름이 있는 노화된 피부입니다" },
293
+ "texture-goosebumps": { label: "닭살", description: "피부에 솟아오른 닭살입니다" },
294
+ "texture-dewy": { label: "촉촉한", description: "빛나고 촉촉한 신선한 피부입니다" },
295
+ "texture-glistening": { label: "반짝이는", description: "땀이나 오일로 반짝이는 피부입니다" },
296
+ "texture-weathered": { label: "풍파를 겪은", description: "햇볕에 그을린 거친 피부입니다" },
297
+ "texture-porcelain": { label: "포슬린", description: "흠 없이 거의 반투명한 도자기 피부입니다" },
298
+ "texture-sun-kissed": { label: "선 키스드", description: "건강한 광채를 지닌 따뜻한 태닝 피부입니다" },
299
+ "texture-tanned": { label: "태닝된", description: "깊고 균일하게 태닝된 피부입니다" },
300
+ "texture-tan-lines": { label: "태닝 자국", description: "수영복으로 인한 태닝 자국이 보이는 피부입니다" },
301
+ "texture-freckled": { label: "주근깨가 있는", description: "뺨과 코에 주근깨가 있습니다" },
302
+ "texture-ruddy": { label: "발그레한", description: "분홍빛이 도는 뺨과 코입니다" },
303
+ "texture-ashen": { label: "창백한 / 핏기 없는", description: "차갑고 창백하며 핏기가 거의 없는 피부 톤입니다" },
304
+ "texture-oily": { label: "유분 / 광택", description: "T존에 약간 유분기가 있는 피부입니다" },
305
+ "texture-matte": { label: "매트", description: "모공 없는 매트한 마감입니다" },
306
+ "texture-blemished": { label: "블레미시", description: "잡티가 보이는 사실적인 피부 결함입니다" },
307
+ "texture-baby-soft": { label: "베이비 소프트", description: "매끄럽고 모공이 미세한 어린아이 같은 피부입니다" },
308
+ "texture-shower-fresh-wet": { label: "샤워 직후 젖은", description: "샤워 직후처럼 물방울이 맺힌 젖은 피부입니다" },
309
+
310
+ // -------------------- Distinctive Features --------------------
311
+ "feature-glasses": { label: "안경", description: "안경을 착용합니다" },
312
+ "feature-freckles": { label: "주근깨", description: "보이는 주근깨입니다" },
313
+ "feature-tattoos": { label: "타투", description: "보이는 타투입니다" },
314
+ "feature-scar": { label: "흉터", description: "얼굴 흉터입니다" },
315
+ "feature-dimples": { label: "보조개", description: "보조개가 있는 뺨입니다" },
316
+ "feature-piercing": { label: "피어싱", description: "보이는 피어싱입니다" },
317
+ "feature-birthmark": { label: "모반", description: "얼굴이나 어깨에 보이는 모반입니다" },
318
+ "feature-mole": { label: "점 / 뷰티 마크", description: "주로 윗입술 근처에 두드러진 점이 있습니다" },
319
+ "feature-gap-teeth": { label: "벌어진 앞니", description: "앞니 사이가 벌어졌습니다" },
320
+ "feature-aegyo-sal": { label: "애교살", description: "K-뷰티에서 사랑받는 통통한 애교살입니다" },
321
+ "feature-eye-bags": { label: "다크서클", description: "약간의 다크서클입니다" },
322
+ "feature-dimpled-chin": { label: "보조개 턱", description: "턱에 부드러운 보조개가 있습니다" },
323
+ "feature-cleft-chin": { label: "갈라진 턱", description: "또렷한 세로 골이 있는 턱입니다" },
324
+ "feature-heterochromia": { label: "이색홍채", description: "양쪽 홍채가 다른 색입니다" },
325
+ "feature-vitiligo": { label: "백반증", description: "탈색소된 피부 패치가 보입니다" },
326
+ "feature-sleeve-tattoo": { label: "슬리브 타투", description: "한 팔 전체를 덮는 타투 슬리브입니다" },
327
+ "feature-face-tattoo": { label: "얼굴 타투", description: "눈이나 광대뼈 근처의 작은 얼굴 타투입니다" },
328
+ "feature-hand-tattoos": { label: "손 타투", description: "주먹과 손가락의 타투입니다" },
329
+ "feature-visible-piercings": { label: "보이는 피어싱", description: "여러 보이는 피어싱 (셉텀, 코, 입술, 멀티 이어)입니다" },
330
+ "feature-bare-shoulders": { label: "맨 어깨", description: "어깨가 드러난 모습입니다" },
331
+ "feature-collarbone-visible": { label: "쇄골 노출", description: "또렷이 드러난 쇄골이 빛을 받습니다" },
332
+ "feature-midriff-visible": { label: "허리 노출", description: "상의와 하의 사이로 허리가 드러납니다" },
333
+ "feature-navel-visible": { label: "배꼽 노출", description: "맨 배에 배꼽이 보입니다" },
334
+ "feature-elongated-neck": { label: "긴 목", description: "백조 같은 긴 목입니다" },
335
+
336
+ // -------------------- Type (additional) --------------------
337
+ "femboy": { label: "팸보이", description: "부드러운 페미닌 무드의 마스큘린 타입, 젠더 플루이드 스타일링입니다" },
338
+ "twink": { label: "트윙크", description: "마르고 매끈하며 어려 보이는 게이 남성 타입입니다" },
339
+ "soft-butch": { label: "소프트 부치", description: "온화한 마스큘린 오브 센터 여성입니다" },
340
+ "tomboy": { label: "톰보이", description: "여성스러운 몸매에 보이시한 스타일링과 에너지를 더한 모습입니다" },
341
+ "thick": { label: "씩", description: "굴곡이 있는 풍만한 바디 포지티브 체형입니다" },
342
+ "bear": { label: "베어", description: "크고 수염이 있으며 털이 많은 마스큘린 타입입니다" },
343
+
344
+ // -------------------- Distinctive Features (additional) --------------------
345
+ "feature-back-tattoo": { label: "백 타투", description: "등 전체에 걸친 큰 타투 작품입니다" },
346
+ "feature-chest-tattoo": { label: "체스트 타투", description: "가슴 / 데콜테에 걸친 타투입니다" },
347
+ "feature-leg-tattoo": { label: "레그 타투", description: "다리 / 종아리 / 허벅지에 보이는 타투입니다" },
348
+ "feature-forearm-tattoo": { label: "포어암 타투", description: "팔뚝 안쪽 또는 바깥쪽의 타투입니다" },
349
+ "feature-ear-piercings": { label: "이어 피어싱", description: "여러 개를 쌓아 올린 귀 피어싱 (카르틸리지, 헬릭스, 콘치)입니다" },
350
+ "feature-lip-piercing": { label: "립 피어싱", description: "립 링 / 라브렛 스터드입니다" },
351
+ "feature-nostril-piercing": { label: "코 피어싱", description: "한쪽 콧방울 스터드 또는 링입니다" },
352
+
353
+ // -------------------- Eye Shape (additional) --------------------
354
+ "eye-double-eyelid": { label: "쌍꺼풀", description: "또렷한 윗눈꺼풀 라인입니다" },
355
+
356
+ // ----- New age entries -----
357
+ "age-toddler": { label: "유아", description: "2~3세 정도" },
358
+ "age-young-child": { label: "어린아이", description: "4~6세 정도" },
359
+ "age-pre-teen": { label: "10대 직전", description: "10~12세 정도" },
360
+ "age-early-teen": { label: "10대 초반", description: "13~15세 정도" },
361
+ "age-late-teen": { label: "10대 후반", description: "16~19세 정도" },
362
+ "age-early-20s": { label: "20대 초반", description: "20~23세 정도" },
363
+ "age-late-20s": { label: "20대 후반", description: "24~29세 정도" },
364
+ "age-custom": { label: "사용자 정의 나이...", description: "정확한 나이를 연 단위로 지정" },
365
+
366
+ // ----- Primitive / Wild -----
367
+ "caveman": { label: "원시인(남)", description: "석기 시대의 원시 남성" },
368
+ "cavewoman": { label: "원시인(여)", description: "석기 시대의 원시 여성" },
369
+ "apeman": { label: "원숭이 인간", description: "반인반원 하이브리드" },
370
+ "feral-wildman": { label: "야생 인간", description: "머리가 길게 자란 원시적 야생인" },
371
+ "neanderthal": { label: "네안데르탈인", description: "근현대 이전 인류 종" },
372
+
373
+ // ----- Fantasy -----
374
+ "elf-man": { label: "엘프(남)", description: "뾰족한 귀의 남성 인간형" },
375
+ "elf-woman": { label: "엘프(여)", description: "뾰족한 귀의 여성 인간형" },
376
+ "elf": { label: "엘프", description: "뾰족한 귀의 날렵한 인간형" },
377
+ "half-elf": { label: "하프엘프", description: "인간-엘프 혼혈" },
378
+ "dwarf": { label: "드워프", description: "다부지고 수염이 있는 인간형" },
379
+ "orc": { label: "오크", description: "송곳니를 가진 무거운 인간형" },
380
+ "goblin": { label: "고블린", description: "작고 장난기 많은 인간형" },
381
+ "tiefling": { label: "티플링", description: "뿔과 지옥의 혈통을 가진 인간형" },
382
+ "faun": { label: "파운 / 사티로스", description: "염소 다리와 뿔을 가진 인간형" },
383
+ "centaur": { label: "켄타우로스", description: "말 몸에 인간의 상반신" },
384
+ "vampire-man": { label: "뱀파이어(남)", description: "송곳니를 가진 창백한 남성 불사자" },
385
+ "vampire-woman": { label: "뱀파이어(여)", description: "송곳니를 가진 창백한 여성 불사자" },
386
+ "vampire": { label: "뱀파이어", description: "송곳니를 가진 창백한 불사자" },
387
+ "werewolf": { label: "늑대인간", description: "부분 변신한 라이칸트로프" },
388
+ "mermaid": { label: "인어(여)", description: "물고기 꼬리를 가진 여성 인간형" },
389
+ "merman": { label: "인어(남)", description: "물고기 꼬리를 가진 남성 인간형" },
390
+ "dragonkin": { label: "드래곤킨", description: "비늘이 있는 용 같은 인간형" },
391
+ "wizard": { label: "마법사(남)", description: "로브를 입은 남성 주문 시전자" },
392
+ "witch": { label: "마녀", description: "로브를 입은 여성 주문 시전자" },
393
+ "sorcerer": { label: "소서러", description: "흐르는 로브를 입은 마법 남성" },
394
+ "sorceress": { label: "소서리스", description: "흐르는 로브를 입은 마법 여성" },
395
+ "knight-man": { label: "기사(남)", description: "판금 갑옷을 입은 남성 전사" },
396
+ "knight-woman": { label: "기사(여)", description: "판금 갑옷을 입은 여성 전사" },
397
+ "knight": { label: "기사", description: "판금 갑옷을 입은 전사" },
398
+ "barbarian-man": { label: "바바리안(남)", description: "가죽을 두른 강인한 남성 전사" },
399
+ "barbarian-woman": { label: "바바리안(여)", description: "가죽을 두른 강인한 여성 전사" },
400
+ "barbarian": { label: "바바리안", description: "가죽을 두른 강인한 전사" },
401
+ "druid": { label: "드루이드", description: "자연과 결속된 신비주의자" },
402
+ "ranger": { label: "레인저", description: "망토를 두른 궁수 / 황야 정찰병" },
403
+ "necromancer": { label: "네크로맨서", description: "창백한 흑마법 시전자" },
404
+ "prince": { label: "왕자", description: "왕가의 젊은 남성" },
405
+ "princess": { label: "공주", description: "왕가의 젊은 여성" },
406
+
407
+ // ----- Mythic / Divine -----
408
+ "angel": { label: "천사", description: "날개 달린 신성한 인간형" },
409
+ "demon": { label: "악마", description: "뿔이 달린 지옥의 인간형" },
410
+ "ghost": { label: "유령", description: "반투명한 영적 형상" },
411
+ "valkyrie": { label: "발키리", description: "북유럽 전사 영혼 여성" },
412
+ "god": { label: "남신", description: "남성 신격" },
413
+ "goddess": { label: "여신", description: "여성 신격" },
414
+
415
+ // ----- Sci-Fi -----
416
+ "android-man": { label: "안드로이드(남)", description: "남성형 휴머노이드 로봇" },
417
+ "android-woman": { label: "안드로이드(여)", description: "여성형 휴머노이드 로봇" },
418
+ "android-neutral": { label: "안드로이드", description: "성별 미지정 휴머노이드 로봇" },
419
+ "cyborg-man": { label: "사이보그(남)", description: "남성형 인간-기계 하이브리드" },
420
+ "cyborg-woman": { label: "사이보그(여)", description: "여성형 인간-기계 하이브리드" },
421
+ "cyborg": { label: "사이보그", description: "인간-기계 하이브리드" },
422
+ "robot": { label: "로봇", description: "완전 기계식 휴머노이드" },
423
+ "alien": { label: "외계인", description: "비인간 휴머노이드" },
424
+ "astronaut": { label: "우주비행사", description: "우주복을 입은 우주 탐험가" },
425
+ "space-marine": { label: "스페이스 마린", description: "강화 갑옷을 입은 군인" },
426
+ "ai-hologram": { label: "AI 홀로그램", description: "체적 빛으로 만들어진 형상" },
427
+
428
+ // ----- Heroes & Villains -----
429
+ "superhero": { label: "슈퍼히어로", description: "마스크와 망토의 영웅" },
430
+ "superheroine": { label: "슈퍼히로인", description: "마스크와 망토의 여성 영웅" },
431
+ "masked-vigilante": { label: "복면 자경단원", description: "어두운 슈트의 영웅" },
432
+ "supervillain": { label: "슈퍼빌런", description: "연극적 악당 원형" },
433
+ "caped-crusader-man": { label: "케이프드 크루세이더(남)", description: "갑옷과 후드의 어두운 남성 영웅" },
434
+ "caped-crusader-woman": { label: "케이프드 크루세이더(여)", description: "갑옷과 후드의 어두운 여성 영웅" },
435
+ "caped-crusader": { label: "케이프드 크루세이더", description: "갑옷과 후드의 어두운 영웅" },
436
+ "super-soldier": { label: "슈퍼 솔저", description: "애국적 외골격 갑옷의 전사" },
437
+ "mutant": { label: "뮤턴트", description: "눈에 보이는 돌연변이를 가진 인간" },
438
+ "magical-girl": { label: "마법소녀", description: "변신하는 여주인공 원형" },
439
+ // ----- Anime / Anthro -----
440
+ "catgirl": { label: "캣걸", description: "고양이 귀와 꼬리를 가진 여자" },
441
+ "catboy": { label: "캣보이", description: "고양이 귀와 꼬리를 가진 남자" },
442
+ "anthro": { label: "수인 / 의인화 동물", description: "동물 머리의 이족 보행 인간형" },
443
+
444
+ // ----- Iconic / Public Domain -----
445
+ "sherlock-holmes": { label: "셜록 홈즈", description: "빅토리아 시대 자문 탐정" },
446
+ "dracula": { label: "드라큘라 백작", description: "스토커의 고딕 뱀파이어 백작" },
447
+ "frankenstein-monster": { label: "프랑켄슈타인의 괴물", description: "셸리의 되살아난 피조물" },
448
+ "phantom-opera": { label: "오페라의 유령", description: "르루의 가면 쓴 오페라 은둔자" },
449
+ "mr-hyde": { label: "하이드 씨", description: "스티븐슨의 괴물 같은 분신" },
450
+ "king-arthur": { label: "아서 왕", description: "전설적인 중세 왕" },
451
+ "merlin": { label: "멀린", description: "아서 왕의 마법사 조언자" },
452
+ "robin-hood": { label: "로빈 후드", description: "숲의 무법자 궁수" },
453
+ "joan-of-arc": { label: "잔 다르크", description: "갑옷의 중세 여전사" },
454
+ "cleopatra": { label: "클레오파트라", description: "이집트 최후의 파라오" },
455
+ "captain-nemo": { label: "네모 선장", description: "베른의 잠수함 선장" },
456
+ "alice-wonderland": { label: "이상한 나라의 앨리스", description: "캐럴의 이상한 나라 소녀" },
457
+ "peter-pan": { label: "피터 팬", description: "절대 자라지 않는 소년" },
458
+ "dorothy-oz": { label: "도로시(오즈)", description: "파란 깅엄 옷의 오즈 소녀" },
459
+ "tin-man": { label: "양철 나무꾼", description: "오즈의 양철 인형" },
460
+ "scarecrow-oz": { label: "허수아비(오즈)", description: "오즈의 짚 허수아비" },
461
+ "cowardly-lion": { label: "겁쟁이 사자", description: "오즈의 의인화 사자" },
462
+ "santa-claus": { label: "산타클로스", description: "크리스마스 선물을 주는 노인" },
463
+ "grim-reaper": { label: "그림 리퍼 / 사신", description: "죽음의 의인화" },
464
+ // ----- New Type — Warriors / Martial -----
465
+ "ninja": { label: "닌자", description: "은밀한 시노비 자객" },
466
+ "kunoichi": { label: "쿠노이치", description: "여성 닌자" },
467
+ "samurai-man": { label: "사무라이 (남자)", description: "갑옷 입은 일본 무사" },
468
+ "samurai-woman": { label: "사무라이 (여자)", description: "여자 사무라이 (온나무샤)" },
469
+ "samurai": { label: "사무라이", description: "갑옷 입은 일본 무사" },
470
+ "karate-fighter": { label: "가라테 수련자", description: "도복 차림의 가라테 수련자" },
471
+ "kung-fu-master": { label: "쿵푸 마스터", description: "중국 무술 고수" },
472
+ "shaolin-monk": { label: "소림승", description: "불교 전사 승려" },
473
+ "sumo-wrestler": { label: "스모 선수", description: "일본 스모 선수" },
474
+ "gladiator": { label: "검투사", description: "로마의 원형 경기장 전사" },
475
+ "spartan-warrior": { label: "스파르타 전사", description: "고대 그리스 중장 보병" },
476
+ "viking-warrior": { label: "바이킹 전사", description: "북유럽 약탈자" },
477
+ "mongol-warrior": { label: "몽골 전사", description: "초원의 기마 궁수" },
478
+ "centurion": { label: "백부장", description: "로마 군단 장교" },
479
+ "crusader": { label: "십자군 기사", description: "중세 십자군" },
480
+ "pirate": { label: "해적", description: "황금시대 해적" },
481
+ "musketeer": { label: "총사", description: "17세기 프랑스 검사" },
482
+
483
+ // ----- New Type — Professions / Roles -----
484
+ "police-officer": { label: "경찰관", description: "제복 입은 경찰관" },
485
+ "policeman": { label: "남자 경찰관", description: "남성 경찰관" },
486
+ "policewoman": { label: "여자 경찰관", description: "여성 경찰관" },
487
+ "firefighter": { label: "소방관", description: "방화복 차림의 소방관" },
488
+ "doctor": { label: "의사", description: "흰 가운의 의사" },
489
+ "surgeon": { label: "외과의", description: "수술실의 외과의사" },
490
+ "nurse": { label: "간호사", description: "병원 간호사" },
491
+ "chef": { label: "요리사", description: "유니폼 차림의 요리사" },
492
+ "teacher": { label: "교사", description: "교실의 교육자" },
493
+ "priest": { label: "신부", description: "가톨릭 성직자" },
494
+ "nun": { label: "수녀", description: "가톨릭 수녀" },
495
+ "soldier": { label: "군인", description: "현대 군인" },
496
+ "lawyer": { label: "변호사", description: "정장 차림의 변호사" },
497
+ "judge": { label: "판사", description: "법복 차림의 판사" },
498
+ "scientist": { label: "과학자", description: "흰 가운의 연구자" },
499
+ "pilot": { label: "조종사", description: "민간 항공기 조종사" },
500
+ "flight-attendant": { label: "승무원", description: "객실 승무원" },
501
+ "construction-worker": { label: "건설 노동자", description: "안전모 차림의 건설 노동자" },
502
+ "businessman": { label: "사업가 (남)", description: "정장 차림의 남성" },
503
+ "businesswoman": { label: "사업가 (여)", description: "정장 차림의 여성" },
504
+ "farmer": { label: "농부", description: "농업 종사자" },
505
+ "mechanic": { label: "정비사", description: "자동차/산업 정비사" },
506
+ "artist": { label: "예술가", description: "화가 / 시각예술가" },
507
+ "musician": { label: "음악가", description: "악기를 든 연주자" },
508
+ "athlete": { label: "운동선수", description: "프로 스포츠 선수" },
509
+ "detective": { label: "형사", description: "사복 형사" },
510
+ "journalist": { label: "기자", description: "수첩을 든 기자" },
511
+ "barista": { label: "바리스타", description: "카페 직원" },
512
+
513
+ // Regional Aesthetic
514
+ // ----- USA — Mainstream -----
515
+ "cali-beach": { label: "캘리포니아 비치", description: "느긋한 캘리포니아 해변 마을 미감" },
516
+ "valley-girl": { label: "밸리 걸", description: "남부 캘리포니아 밸리 미감 (여성)" },
517
+ "norcal-hippie": { label: "노캘 히피", description: "북부 캘리포니아 버클리 / 베이 에어리어 히피 미감" },
518
+ "boho-la": { label: "보호 LA", description: "로스앤젤레스 캐니언 보헤미안 미감 (여성)" },
519
+ "texas-cowgirl": { label: "텍사스 카우걸", description: "텍사스 서부 목장 미감 (여성)" },
520
+ "texas-cowboy": { label: "텍사스 카우보이", description: "텍사스 서부 목장 미감 (남성)" },
521
+ "southern-belle": { label: "서던 벨", description: "찰스턴 / 서배너 남북전쟁 이전 귀족 미감 (여성)" },
522
+ "southern-gentleman": { label: "서던 젠틀맨", description: "옛 남부 귀족 미감 (남성)" },
523
+ "miami-latina": { label: "마이애미 라티나", description: "사우스 비치 카리브-라틴 미감 (여성)" },
524
+ "miami-latino": { label: "마이애미 라티노", description: "사우스 비치 카리브-라틴 미감 (남성)" },
525
+ "hawaii-island": { label: "하와이 아일랜드", description: "폴리네시아-태평양 하와이 미감" },
526
+ "nyc-fashion": { label: "NYC 패션", description: "맨해튼 에디토리얼 패션 미감 (여성)" },
527
+ "nyc-sharp": { label: "NYC 샤프", description: "맨해튼 파워 테일러드 미감 (남성)" },
528
+ "brooklyn-hipster": { label: "브루클린 힙스터", description: "윌리엄스버그 크리에이티브 클래스 미감" },
529
+ "new-england-prep": { label: "뉴잉글랜드 프레피", description: "케이프 코드 / 낸터킷 올드머니 프레피 미감" },
530
+ "pnw-granola": { label: "PNW 그래놀라", description: "포틀랜드 / 시애틀 아웃도어 미감" },
531
+ "nashville-country": { label: "내슈빌 컨트리", description: "뮤직시티 모던 컨트리팝 미감 (여성)" },
532
+ "nashville-cowboy": { label: "내슈빌 카우보이", description: "뮤직시티 모던 카우보이 미감 (남성)" },
533
+ "vegas-glam": { label: "베이거스 글램", description: "라스베이거스 스트립 글래머 미감 (여성)" },
534
+ "vegas-suit": { label: "베이거스 슈트", description: "라스베이거스 스트립 슈트 미감 (남성)" },
535
+
536
+ // ----- USA — African-American -----
537
+ "harlem-classic": { label: "할렘 클래식", description: "흑인 뉴요커 헤리티지 미감, 재즈 시대의 우아함" },
538
+ "atl-southern": { label: "ATL 서던", description: "애틀랜타 흑인 남부 힙합 / R&B 미감" },
539
+ "nola-creole": { label: "NOLA 크리올", description: "뉴올리언스 루이지애나 프랑스-카리브-아프리카 미감" },
540
+ "dmv-go-go": { label: "DMV 고고", description: "DC / 메릴랜드 / 버지니아 흑인 DMV 고고 미감" },
541
+ "west-coast-hip-hop": { label: "웨스트 코스트", description: "사우스 센트럴 / 컴튼 웨스트 코스트 힙합 미감" },
542
+ "chicago-south-side": { label: "시카고 사우스사이드", description: "중서부 흑인 어반 시카고 미감" },
543
+
544
+ // ----- Europe -----
545
+ "parisienne": { label: "파리지엔느", description: "좌안 파리 프렌치 시크 미감 (여성)" },
546
+ "parisian-flaneur": { label: "파리지앙 플라뇌르", description: "좌안 파리 프렌치 시크 미감 (남성)" },
547
+ "milanese-fashion": { label: "밀라네제 패션", description: "이탈리아 밀라노 하이패션 미감" },
548
+ "sicilian-beach": { label: "시칠리아 비치", description: "지중해 남부 이탈리아 해변 미감" },
549
+ "madrileña": { label: "마드리레냐", description: "마드리드 스페인 미감 (여성)" },
550
+ "madrileño": { label: "마드리레뇨", description: "마드리드 스페인 미감 (남성)" },
551
+ "catalan-modern": { label: "카탈루냐 모던", description: "바르셀로나 지중해 디자인 미감" },
552
+ "greek-mediterranean": { label: "그리스 지중해", description: "에게해 섬 그리스 미감" },
553
+ "scandi-minimal": { label: "스칸디 미니멀", description: "북유럽 클린라인 미니멀 미감" },
554
+ "english-rose": { label: "잉글리시 로즈", description: "전원 잉글랜드 미감 (여성)" },
555
+ "london-prep": { label: "런던 프레피", description: "메이페어 / 첼시 정제된 영국 미감 (남성)" },
556
+ "manchester-indie": { label: "맨체스터 인디", description: "북잉글랜드 공연-비-노동계급 쿨 미감" },
557
+ "berlin-alt": { label: "베를린 얼터", description: "크로이츠베르크 테크노-아트 카운터컬처 미감" },
558
+ "munich-traditional": { label: "뮌헨 트래디셔널", description: "바이에른 옥토버페스트 전통 미감" },
559
+ "eastern-european-glam": { label: "동유럽 글램", description: "모스크바 / 키이우 윈터 글래머 미감 (여성)" },
560
+ "eastern-european-stoic": { label: "동유럽 스토익", description: "모스크바 / 키이우 풍파를 견딘 자신감 미감 (남성)" },
561
+
562
+ // ----- Asia -----
563
+ "tokyo-harajuku": { label: "도쿄 하라주쿠", description: "도쿄 발랄하고 표현력 있는 일본 스트리트 미감" },
564
+ "ginza-office": { label: "긴자 오피스", description: "도쿄 긴자 일본 코퍼레이트 엘레강스 미감" },
565
+ "shibuya-streetwear": { label: "시부야 스트리트웨어", description: "도쿄 시부야 스트리트 패션 미감" },
566
+ "osaka-everyday": { label: "오사카 에브리데이", description: "오사카 따뜻하고 캐주얼한 간사이 미감" },
567
+ "seoul-k-pop": { label: "서울 K-팝", description: "서울 한국 팝 정제된 미감" },
568
+ "gangnam-glam": { label: "강남 글램", description: "서울 강남 한국 럭셔리 디스트릭트 미감" },
569
+ "shanghai-modern": { label: "상하이 모던", description: "상하이 중국 메트로폴리탄 미감" },
570
+ "beijing-hutong": { label: "베이징 후퉁", description: "베이징 옛 사합원 전통-모던 융합 미감" },
571
+ "hong-kong-cinematic": { label: "홍콩 시네마틱", description: "홍콩 네온 누아르 왕가위 미감" },
572
+ "mumbai-bollywood": { label: "뭄바이 발리우드", description: "뭄바이 인도 영화 산업 미감" },
573
+ "south-india-traditional": { label: "남인도 전통", description: "타밀 / 케랄라 사원 도시 클래식 미감" },
574
+ "bangkok-street": { label: "방콕 스트리트", description: "방콕 태국 야시장 네온 어반 미감" },
575
+
576
+ // ----- Latin America -----
577
+ "carioca-rio": { label: "카리오카 (리우)", description: "리우데자네이루 해변과 파벨라 음악 브라질 미감" },
578
+ "paulista": { label: "파울리스타 (상파울루)", description: "상파울루 메트로폴리탄 브라질 크리에이티브 클래스 미감" },
579
+ "buenos-aires-tango": { label: "부에노스아이레스 탱고", description: "부에노스아이레스 레콜레타 / 산텔모 탱고 미감 (여성)" },
580
+ "porteño": { label: "포르테뇨", description: "부에노스아이레스 정제된 밀롱게로 미감 (남성)" },
581
+ "mexico-city-chic": { label: "멕시코시티 시크", description: "CDMX 로마 / 폴랑코 모던 멕시칸 미감" },
582
+ "chilango-traditional": { label: "칠랑고 트래디셔널", description: "멕시코시티 따뜻한 민속과 축제 미감" },
583
+ "bogota-cosmopolitan": { label: "보고타 코스모폴리탄", description: "보고타 콜롬비아 수도 정제된 안데스 미감" },
584
+
585
+ // ----- Middle East -----
586
+ "beirut-riviera": { label: "베이루트 리비에라", description: "레바논 지중해 코스모폴리탄 미감" },
587
+ "tel-aviv-beach": { label: "텔아비브 비치", description: "텔아비브 지중해 해안 도시 스타트업 에너지 미감" },
588
+ "jerusalem-stone": { label: "예루살렘 스톤", description: "예루살렘 구도시 석회암 헤리티지 미감" },
589
+ "sabra": { label: "사브라", description: "토착 이스라엘인의 직설적이고 따뜻한 사브라 미감" },
590
+ "dubai-modern": { label: "두바이 모던", description: "걸프 럭셔리 두바이 코스모폴리탄 에미리트 미감" },
591
+ "persian-glam": { label: "페르시안 글램", description: "이란 헤리티지와 글래머 페르시안 미감" },
592
+ "istanbul-bosphorus": { label: "이스탄불 보스포루스", description: "이스탄불 동서 융합 보스포루스 오스만-모던 미감" },
593
+
594
+ // ----- North Africa -----
595
+ "cairene-cosmopolitan": { label: "카이렌 코스모폴리탄", description: "카이로 이집트-아랍 메트로폴리탄 미감" },
596
+ "maghreb-coastal": { label: "마그레브 코스탈", description: "튀니스 / 알제 프랑스-지중해-북아프리카 식민 항구 미감" },
597
+ "marrakech-bohemian": { label: "마라케시 보헤미안", description: "마라케시 모로코 메디나의 따뜻한 향신료 미감" },
598
+
599
+ // ----- Sub-Saharan Africa -----
600
+ "lagos-afro-glam": { label: "라고스 아프로글램", description: "🇬🇧 라고스 나이지리아 영어권 서아프리카 메트로폴리탄 미감" },
601
+ "accra-afro-fashion": { label: "아크라 아프로패션", description: "🇬🇧 아크라 가나 영어권 서아프리카 켄테와 모던 융합 미감" },
602
+ "dakar-francophone": { label: "다카르 프랑코폰", description: "🇫🇷 다카르 세네갈 프랑스어권 서아프리카 해안 코스모폴리탄 미감" },
603
+ "abidjan-cosmopolitan": { label: "아비장 코스모폴리탄", description: "🇫🇷 아비장 코트디부아르 프랑스어권 서아프리카 어반 미감" },
604
+ "kinshasa-sape": { label: "킨샤사 SAPE", description: "🇫🇷 킨샤사 콩고 프랑스어권 중앙아프리카 SAPE 댄디 미감" },
605
+ "nairobi-cosmopolitan": { label: "나이로비 코스모폴리탄", description: "🇬🇧 나이로비 케냐 영어권 동아프리카 모던 어반 미감" },
606
+ "addis-habesha": { label: "아디스 하베샤", description: "아디스아바바 에티오피아 하베샤 고원 헤리티지 미감 (에티오피아는 식민 지배를 받지 않음)" },
607
+ "swahili-coast": { label: "스와힐리 코스트", description: "🇬🇧 잔지바르 / 몸바사 영어권 동아프리카 해안 스와힐리 미감" },
608
+ "johannesburg-urban": { label: "요하네스버그 어반", description: "🇬🇧 요하네스버그 남아프리카 영어권 남부아프리카 흑인 메트로폴리탄 미감" },
609
+ "cape-town-cosmopolitan": { label: "케이프타운 코스모폴리탄", description: "🇬🇧 케이프타운 남아프리카 영어권 남부아프리카 해안 도시 미감" },
610
+ "luanda-lusophone": { label: "루안다 루소폰", description: "🇵🇹 루안다 앙골라 포르투갈어권 남부아프리카 키좀바와 대서양 해안 미감" },
611
+
612
+ // ----- Oceania -----
613
+ "bondi-beach": { label: "본다이 비치", description: "본다이 호주 해안 솔트앤선 미감" },
614
+ "australian-outback": { label: "아웃백", description: "오스트레일리아 시골 아웃백 미감 (여성)" },
615
+ "outback-stockman": { label: "아웃백 스톡맨", description: "오스트레일리아 시골 아웃백 미감 (남성)" },
616
+ "auckland-coastal": { label: "오클랜드 코스탈", description: "오클랜드 뉴질랜드 항구 도시 태평양 미감" },
617
+
618
+ // Audit follow-up gaps (2026-05-06)
619
+ "androgynous": { label: "앤드로지너스", description: "남성성과 여성성을 의도적으로 섞은 외형입니다" },
620
+ "goth": { label: "고스", description: "고스 서브컬처 미감 — 어둡고 로맨틱하며 드라마틱합니다" },
621
+ "eye-droopy": { label: "처진 눈꺼풀", description: "눈꺼풀이 낮게 자리해 부드럽고 졸린 듯한 시선입니다" },
622
+ "lip-state-bold-black": { label: "볼드 블랙", description: "채도 높은 검정 립스틱 스테이트먼트 (고스 / 아방가르드)입니다" },
623
+ "lip-state-burgundy": { label: "버건디", description: "깊은 와인 레드 립스틱입니다" },
624
+ "lip-state-plum": { label: "플럼", description: "어두운 자줏빛 립스틱입니다" },
625
+ "lip-state-mauve": { label: "모브", description: "차분한 모브 / 더스티 핑크 립스틱입니다" },
626
+ "eyes-black": { label: "블랙", description: "갈색보다 더 짙은, 진정한 검은 홍채입니다" },
627
+ "skin-very-dark": { label: "매우 어두운 / 에보니", description: "스케일에서 가장 짙은, 매우 어두운 에보니 피부톤입니다" },
628
+ "texture-acne-scarred": { label: "여드름 흉터", description: "보이는 여드름 흉터 (블레미시와 구분 — 아문 흉터 패턴)입니다" },
629
+ "face-five-oclock-shadow": { label: "오후의 수염", description: "옅은 수염 자국보다 짙은 하루치 수염입니다" },
630
+ "feature-under-eye-circles": { label: "다크서클", description: "눈 아래의 은은한 다크서클 (부은 다크서클과 구분)입니다" },
631
+ "feature-fangs": { label: "송곳니", description: "보이는 송곳니 (뱀파이어 / 캐릭터 원형)입니다" },
632
+
633
+ // ----- 얼굴 구조: 광대 / 볼륨감 / 눈 / 코끝 / 입술 -----
634
+ "cheekbones-average": { label: "보통", description: "보통 정도의 광대 돌출입니다 (강조 없음)" },
635
+ "cheekbones-low": { label: "낮은", description: "낮고 평평한 광대입니다" },
636
+ "cheekbones-high-defined": { label: "높고 또렷한", description: "높고 뚜렷하게 또렷한 광대입니다" },
637
+ "cheekbones-sculpted": { label: "높고 조각 같은", description: "날카롭게 조각된 높은 광대입니다" },
638
+ "cheekbones-wide": { label: "넓은", description: "넓고 두드러진 광대입니다" },
639
+ "facial-fullness-average": { label: "보통", description: "보통 정도의 얼굴 볼륨감입니다" },
640
+ "facial-fullness-gaunt": { label: "야윈", description: "움푹 팬 볼, 매우 적은 얼굴 지방입니다" },
641
+ "facial-fullness-lean": { label: "갸름한", description: "적은 얼굴 지방, 광대 아래가 살짝 들어갑니다" },
642
+ "facial-fullness-full": { label: "도톰한", description: "부드럽고 통통한 볼입니다" },
643
+ "facial-fullness-round": { label: "둥근", description: "둥근 얼굴, 부드럽고 둥근 볼입니다" },
644
+ "eye-wide": { label: "큰", description: "크고 시원한 눈입니다" },
645
+ "eye-narrow": { label: "가는", description: "가늘고 길게 째진 눈입니다" },
646
+ "eyelid-standard": { label: "표준", description: "표준 윗눈꺼풀입니다" },
647
+ "canthal-neutral": { label: "중립", description: "중립적인 눈매 기울기입니다" },
648
+ "eye-spacing-average": { label: "보통", description: "보통 정도의 눈 간격입니다" },
649
+ "eyeset-average": { label: "보통", description: "보통 정도의 눈썹과 눈 사이 간격입니다" },
650
+ "eyeset-low": { label: "낮은 배치", description: "눈썹과 눈 사이 간격이 좁습니다 (hunter eyes)" },
651
+ "eyeset-high": { label: "높은 배치", description: "눈썹과 눈 사이 간격이 넉넉합니다 (doe eyes)" },
652
+ "nose-tip-natural": { label: "자연스러운", description: "자연스러운 코끝입니다 (강조 없음)" },
653
+ "nose-tip-refined": { label: "정제된", description: "정제되고 좁은 코끝입니다" },
654
+ "nose-tip-upturned": { label: "들린", description: "살짝 들린 코끝입니다" },
655
+ "nose-tip-rounded": { label: "둥근", description: "부드럽고 둥근 코끝입니다" },
656
+ "nose-tip-drooping": { label: "처진", description: "살짝 처져 아래를 향한 코끝입니다" },
657
+ "lips-full-lower": { label: "도톰한 아랫입술", description: "아랫입술이 더 도톰한 풍성한 입술입니다" },
658
+ "lips-natural": { label: "자연스러운", description: "자연스러운 입술 모양입니다" },
659
+ "lips-heart": { label: "하트형", description: "또렷한 큐피드 보우가 있는 하트 모양 입술입니다" },
660
+ }
661
+
662
+ export default map