@nodaro/prompts 1.49.0 → 1.50.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.
- package/dist/{catalog-packs-C--EzV3K.d.cts → catalog-packs-DeMcSVCR.d.cts} +1 -1
- package/dist/{catalog-packs-BzzZCjbz.d.ts → catalog-packs-DjqvicAR.d.ts} +1 -1
- package/dist/{chunk-RRHU6MD5.js → chunk-34JK2G34.js} +4 -4
- package/dist/{chunk-RRHU6MD5.js.map → chunk-34JK2G34.js.map} +1 -1
- package/dist/{chunk-4V4JJUEH.js → chunk-3XSB5YDY.js} +4 -4
- package/dist/chunk-3XSB5YDY.js.map +1 -0
- package/dist/{chunk-QN3OP6TG.js → chunk-5XPELUES.js} +4 -4
- package/dist/chunk-5XPELUES.js.map +1 -0
- package/dist/{chunk-3J52HGBL.js → chunk-BWDQEAX2.js} +4 -4
- package/dist/{chunk-3J52HGBL.js.map → chunk-BWDQEAX2.js.map} +1 -1
- package/dist/{chunk-MJ5OXUDF.js → chunk-C5LP7DAQ.js} +6 -6
- package/dist/{chunk-MJ5OXUDF.js.map → chunk-C5LP7DAQ.js.map} +1 -1
- package/dist/{chunk-PJPCNKEJ.js → chunk-DB6A5I6V.js} +3 -3
- package/dist/{chunk-PJPCNKEJ.js.map → chunk-DB6A5I6V.js.map} +1 -1
- package/dist/{chunk-FDTRN7OE.js → chunk-FEOVUTFC.js} +10 -7
- package/dist/{chunk-FDTRN7OE.js.map → chunk-FEOVUTFC.js.map} +1 -1
- package/dist/{chunk-WW7IHRIE.cjs → chunk-FFPFBNXH.cjs} +4 -4
- package/dist/chunk-FFPFBNXH.cjs.map +1 -0
- package/dist/{chunk-OXJ5GN57.cjs → chunk-HR4TFBU2.cjs} +35 -35
- package/dist/{chunk-OXJ5GN57.cjs.map → chunk-HR4TFBU2.cjs.map} +1 -1
- package/dist/{chunk-NBJR7JS4.cjs → chunk-IADAATZK.cjs} +49 -49
- package/dist/{chunk-NBJR7JS4.cjs.map → chunk-IADAATZK.cjs.map} +1 -1
- package/dist/{chunk-XVAVCHPJ.js → chunk-IXBTD2LW.js} +4 -4
- package/dist/{chunk-XVAVCHPJ.js.map → chunk-IXBTD2LW.js.map} +1 -1
- package/dist/{chunk-3HMMG6W4.cjs → chunk-JGEBO6L6.cjs} +8 -8
- package/dist/{chunk-3HMMG6W4.cjs.map → chunk-JGEBO6L6.cjs.map} +1 -1
- package/dist/{chunk-NET25TEQ.cjs → chunk-KYKCHOOS.cjs} +13 -13
- package/dist/{chunk-NET25TEQ.cjs.map → chunk-KYKCHOOS.cjs.map} +1 -1
- package/dist/{chunk-KBIA4R6X.cjs → chunk-MJIKM4YZ.cjs} +130 -127
- package/dist/{chunk-KBIA4R6X.cjs.map → chunk-MJIKM4YZ.cjs.map} +1 -1
- package/dist/chunk-MUTUHJIV.js +36 -0
- package/dist/chunk-MUTUHJIV.js.map +1 -0
- package/dist/chunk-PLQFXCBU.cjs +39 -0
- package/dist/chunk-PLQFXCBU.cjs.map +1 -0
- package/dist/{chunk-MGK6SFTV.cjs → chunk-RVBO63D5.cjs} +4 -4
- package/dist/{chunk-MGK6SFTV.cjs.map → chunk-RVBO63D5.cjs.map} +1 -1
- package/dist/{chunk-3AVLIA4B.cjs → chunk-TYJCCODP.cjs} +18 -18
- package/dist/{chunk-3AVLIA4B.cjs.map → chunk-TYJCCODP.cjs.map} +1 -1
- package/dist/{chunk-7C7XLZPU.js → chunk-VJYKE6AY.js} +3 -3
- package/dist/{chunk-7C7XLZPU.js.map → chunk-VJYKE6AY.js.map} +1 -1
- package/dist/{chunk-7VVVHIMH.cjs → chunk-VYCTRGJ7.cjs} +39 -39
- package/dist/{chunk-7VVVHIMH.cjs.map → chunk-VYCTRGJ7.cjs.map} +1 -1
- package/dist/{chunk-GTN3UO74.cjs → chunk-WLN2MJ7F.cjs} +7 -7
- package/dist/chunk-WLN2MJ7F.cjs.map +1 -0
- package/dist/{chunk-NRBO4I4G.js → chunk-ZZ6UOK2P.js} +4 -4
- package/dist/{chunk-NRBO4I4G.js.map → chunk-ZZ6UOK2P.js.map} +1 -1
- package/dist/entries/assembly.cjs +29 -29
- package/dist/entries/assembly.js +6 -6
- package/dist/entries/catalog-packs.d.cts +4 -4
- package/dist/entries/catalog-packs.d.ts +4 -4
- package/dist/entries/person.d.cts +3 -3
- package/dist/entries/person.d.ts +3 -3
- package/dist/entries/picker-art.cjs +28 -20
- package/dist/entries/picker-art.d.cts +13 -2
- package/dist/entries/picker-art.d.ts +13 -2
- package/dist/entries/picker-art.js +2 -2
- package/dist/entries/picker-catalogs.cjs +57 -57
- package/dist/entries/picker-catalogs.d.cts +5 -3
- package/dist/entries/picker-catalogs.d.ts +5 -3
- package/dist/entries/picker-catalogs.js +5 -5
- package/dist/entries/pickers.cjs +383 -383
- package/dist/entries/pickers.d.cts +7 -1
- package/dist/entries/pickers.d.ts +7 -1
- package/dist/entries/pickers.js +3 -3
- package/dist/entries/presets.cjs +35 -35
- package/dist/entries/presets.js +1 -1
- package/dist/entries/prompt-builder.cjs +76 -76
- package/dist/entries/prompt-builder.js +5 -5
- package/dist/{images-DrbQB9Yh.d.ts → images-ChAOLY5V.d.cts} +5 -4
- package/dist/{images-DrbQB9Yh.d.cts → images-ChAOLY5V.d.ts} +5 -4
- package/dist/index.cjs +597 -589
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +11 -11
- package/dist/{picker-catalogs-BylSIFKL.d.cts → picker-catalogs-DzLCu6qQ.d.cts} +1 -1
- package/dist/{picker-catalogs-DHRyjPXb.d.ts → picker-catalogs-SDSWrufc.d.ts} +1 -1
- package/package.json +2 -2
- package/src/__tests__/fixtures/root-exports.baseline.json +5 -0
- package/src/__tests__/picker-art-images.test.ts +40 -0
- package/src/__tests__/style-display-name.test.ts +153 -0
- package/src/__tests__/style-labels-offered-locales.test.ts +48 -0
- package/src/factory-presets/generate-image.ts +1 -1
- package/src/factory-presets/generate-video.ts +1 -1
- package/src/picker-analyzer-registry.ts +9 -2
- package/src/picker-art/images.ts +6 -5
- package/src/picker-art/index.ts +1 -0
- package/src/picker-art/restyle-previews.ts +53 -0
- package/src/setting.ts +1 -1
- package/src/style.ts +7 -1
- package/dist/chunk-4V4JJUEH.js.map +0 -1
- package/dist/chunk-GTN3UO74.cjs.map +0 -1
- package/dist/chunk-HOMR5XFP.js +0 -3
- package/dist/chunk-HOMR5XFP.js.map +0 -1
- package/dist/chunk-QN3OP6TG.js.map +0 -1
- package/dist/chunk-T4OJFIJK.cjs +0 -4
- package/dist/chunk-T4OJFIJK.cjs.map +0 -1
- package/dist/chunk-WW7IHRIE.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/read-node-direction.ts"],"names":["DIRECTION_FIELDS","DIRECTION_ID_MAX_CHARS","DIRECTION_ARRAY_CEILING","getRegisteredSubjectKeys","SUBJECT_CUSTOM_AGE_KEY","SUBJECT_ID_MAX_CHARS","SUBJECT_ARRAY_CEILING"],"mappings":"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","file":"chunk-NET25TEQ.cjs","sourcesContent":["/**\n * Narrow readers turning UNTRUSTED persisted node data (`workflows.nodes`\n * JSONB — import, MCP write, node preset, a Studio-emitted graph) into the\n * typed `subject` / `direction` / `structured` levers `assembleImageInput`\n * accepts.\n * `buildPayload` has no zod and workflow writes are\n * `z.record(z.string(), z.unknown())`, so this blob may have been written years\n * ago by any client.\n *\n * Used by ALL THREE image-assembly sites so what the canvas accepts cannot\n * drift between them: the frontend single-node executor (`execute-node.ts`),\n * the orchestrator (`payload-builder.ts`), and the config-panel final-prompt\n * preview (`build-image-assemble-input.ts`).\n *\n * `readDirectionFields` is DERIVED FROM `DIRECTION_FIELDS`, never a hand list:\n * a dimension added to the registry is honored here by construction, so the\n * reader can never silently drop a key the wire schema and the renderer both\n * know about. Anything unrecognised is DROPPED, never thrown on — a malformed\n * blob must not fail a canvas run, and an unknown catalog ID already degrades\n * to `\"\"` inside each `get*PromptHint`, so this validates SHAPE only.\n *\n * BOUNDS MATCH THE WIRE SCHEMA where both exist, by SHARED CONSTANT:\n * `DIRECTION_ID_MAX_CHARS` and `DIRECTION_ARRAY_CEILING` are the same two\n * literals the `generate-image` route's `directionSchema` enforces, imported\n * from the registry rather than re-typed here — a body the route accepts and a\n * node the canvas re-runs must not disagree about which strings are ids.\n *\n * DELIBERATELY STRICTER THAN THE WIRE SCHEMA on `structured` values: the\n * route's `structuredPromptFieldsSchema` declares every field as a bare\n * `z.string().optional()` (unbounded), while `MAX_STRUCTURED_VALUE_CHARS` below\n * bounds them at 200. Do not \"fix\" that asymmetry by loosening HERE — this\n * reads a blob any client may have written years ago, and the values land\n * verbatim in `jobs.input_data.prompt`. Tightening the ROUTE instead would be a\n * new 400 on currently-accepted input, so a >200-char structured value stored\n * on a node is dropped on a canvas run while `POST /v1/generate-image` still\n * renders it. That is the one known divergence; it is bounded to a field the\n * canvas UI never writes that long.\n *\n * RETURNS `undefined`, NEVER `{}`: an empty object would still be a *defined*\n * `direction`, and the call sites' `...(x !== undefined ? { x } : {})` spread\n * would then hand `assembleImageInput` a defined-but-empty lever. Returning\n * `undefined` keeps that spread honest and the exact no-op branch taken.\n */\nimport {\n DIRECTION_ARRAY_CEILING,\n DIRECTION_FIELDS,\n DIRECTION_ID_MAX_CHARS,\n type DirectionFields,\n} from \"./direction-registry.js\"\nimport {\n SUBJECT_ARRAY_CEILING,\n SUBJECT_CUSTOM_AGE_KEY,\n SUBJECT_ID_MAX_CHARS,\n getRegisteredSubjectKeys,\n type SubjectFields,\n} from \"./subject-registry.js\"\nimport type { StructuredPromptFields } from \"./prompt-builder-structured-fields.js\"\n\n/**\n * Read a node's stored cinematic-direction ids. Accepts a single id OR an array\n * on every key (multi-pick dimensions carry arrays; a single-pick key may\n * legitimately carry one).\n *\n * The SEMANTIC per-dimension cap stays the renderer's slice (`maxPicks`) — this\n * reader does not know a row's pick budget and must not guess it. But it DOES\n * bound cardinality at `DIRECTION_ARRAY_CEILING`, the same ceiling the wire\n * schema enforces: the value is untrusted persisted JSONB (a node blob is\n * validated only as `z.record(z.string(), z.unknown())` on write), and handing\n * an unbounded array to `renderDirectionHints` would put an `includes`-dedupe\n * scan in front of that slice. Keeping the FIRST `DIRECTION_ARRAY_CEILING`\n * survivors is what the wire door already does to the same input.\n *\n * Junk is filtered BEFORE the cap, so valid ids sitting behind malformed\n * entries survive rather than being crowded out by them.\n */\nexport function readDirectionFields(value: unknown): DirectionFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, string | string[]> = {}\n for (const spec of DIRECTION_FIELDS) {\n const v = src[spec.key]\n if (typeof v === \"string\") {\n if (v.length > 0 && v.length <= DIRECTION_ID_MAX_CHARS) out[spec.key] = v\n } else if (Array.isArray(v)) {\n const kept: string[] = []\n for (const x of v) {\n if (kept.length >= DIRECTION_ARRAY_CEILING) break\n if (typeof x === \"string\" && x.length > 0 && x.length <= DIRECTION_ID_MAX_CHARS) {\n kept.push(x)\n }\n }\n if (kept.length > 0) out[spec.key] = kept\n }\n }\n return Object.keys(out).length > 0 ? (out as DirectionFields) : undefined\n}\n\n// ── subject ──────────────────────────────────────────────────────────────────\n\n/**\n * Read a node's stored SUBJECT ids — the flat Person / Styling / prop bag the\n * `subject` channel carries. Same three contracts as `readDirectionFields`:\n * drop-never-throw, `undefined` never `{}`, and bounds shared with the wire\n * door by CONSTANT (`SUBJECT_ID_MAX_CHARS` / `SUBJECT_ARRAY_CEILING`, which are\n * defined AS the direction constants) so a body the route accepts and the same\n * node re-run from the canvas cannot disagree about which strings are ids.\n *\n * DERIVED from `getRegisteredSubjectKeys()`, never a hand-authored field list —\n * that is the whole lesson of `readStructuredFields` below, whose hand table is\n * only viable because `StructuredPromptFields` is a small hand-authored type.\n * The subject vocabulary is ~54 catalog-derived fields PLUS deployment-registered\n * pack dimensions unknown at compile time, so it is read from the registry at\n * call time. Iterating the KEY SET (never `Object.keys(value)`) is also what\n * keeps an adversarial blob's key count off the hot path.\n *\n * The SEMANTIC per-dimension cap stays the renderer's job\n * (`normalizeSubjectFields`), exactly as `maxPicks` does for direction: this\n * reader bounds cardinality only. `customAge` is the one number on the wire and\n * is passed through finite-only — the renderer clamps it.\n */\nexport function readSubjectFields(value: unknown): SubjectFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, string | string[] | number> = {}\n for (const key of getRegisteredSubjectKeys()) {\n const v = src[key]\n if (key === SUBJECT_CUSTOM_AGE_KEY) {\n if (typeof v === \"number\" && Number.isFinite(v)) out[key] = v\n continue\n }\n if (typeof v === \"string\") {\n if (v.length > 0 && v.length <= SUBJECT_ID_MAX_CHARS) out[key] = v\n } else if (Array.isArray(v)) {\n // Junk is filtered BEFORE the cap, so valid ids sitting behind malformed\n // entries survive rather than being crowded out by them.\n const kept: string[] = []\n for (const x of v) {\n if (kept.length >= SUBJECT_ARRAY_CEILING) break\n if (typeof x === \"string\" && x.length > 0 && x.length <= SUBJECT_ID_MAX_CHARS) {\n kept.push(x)\n }\n }\n if (kept.length > 0) out[key] = kept\n }\n }\n return Object.keys(out).length > 0 ? (out as SubjectFields) : undefined\n}\n\n// ── structured ───────────────────────────────────────────────────────────────\n\ntype FieldKind = \"string\" | \"number\" | \"gender\"\nconst GENDERS = [\"man\", \"woman\", \"child\", \"non-binary\"] as const\nconst MAX_STRUCTURED_VALUE_CHARS = 200\n\ntype Group = Exclude<keyof StructuredPromptFields, \"mood\">\ntype GroupFields<K extends Group> = Record<keyof NonNullable<StructuredPromptFields[K]>, FieldKind>\n\n/**\n * A FIELD-BY-FIELD table (not a registry walk) on purpose:\n * `StructuredPromptFields` is a small HAND-AUTHORED type, not catalog-derived,\n * and the table is what blocks `person: { age: \"drop table\" }` from rendering\n * verbatim into `jobs.input_data.prompt` — `renderStructuredFields` never\n * throws on junk, but it does render it. Totality is enforced by the\n * `GroupFields<K>` / `{ [K in Group]: … }` mapped types: a new field or group\n * on the published type fails to typecheck here.\n */\nconst PERSON_FIELDS: GroupFields<\"person\"> = {\n age: \"number\",\n gender: \"gender\",\n hair: \"string\",\n eyes: \"string\",\n expression: \"string\",\n profession: \"string\",\n warriorType: \"string\",\n}\nconst STYLING_FIELDS: GroupFields<\"styling\"> = {\n mood: \"string\",\n lighting: \"string\",\n aesthetic: \"string\",\n colorLook: \"string\",\n}\nconst SETTING_FIELDS: GroupFields<\"setting\"> = {\n era: \"string\",\n atmosphere: \"string\",\n backdrop: \"string\",\n}\nconst CAMERA_FIELDS: GroupFields<\"camera\"> = {\n framing: \"string\",\n motion: \"string\",\n format: \"string\",\n}\nconst LENS_FIELDS: GroupFields<\"lens\"> = { focalLength: \"string\", aperture: \"string\" }\n\nconst STRUCTURED_GROUPS: { [K in Group]: GroupFields<K> } = {\n person: PERSON_FIELDS,\n styling: STYLING_FIELDS,\n setting: SETTING_FIELDS,\n camera: CAMERA_FIELDS,\n lens: LENS_FIELDS,\n}\n\nfunction readField(v: unknown, kind: FieldKind): string | number | undefined {\n if (kind === \"number\") return typeof v === \"number\" && Number.isFinite(v) ? v : undefined\n if (typeof v !== \"string\" || v.length === 0 || v.length > MAX_STRUCTURED_VALUE_CHARS) {\n return undefined\n }\n if (kind === \"gender\") return (GENDERS as readonly string[]).includes(v) ? v : undefined\n return v\n}\n\n/** Read a node's stored Path-1 structured prompt fields. Same drop-never-throw\n * and `undefined`-never-`{}` contract as `readDirectionFields`. */\nexport function readStructuredFields(value: unknown): StructuredPromptFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, unknown> = {}\n for (const group of Object.keys(STRUCTURED_GROUPS) as Group[]) {\n const raw = src[group]\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) continue\n const rawRec = raw as Record<string, unknown>\n const kept: Record<string, unknown> = {}\n for (const [field, kind] of Object.entries(\n STRUCTURED_GROUPS[group] as Record<string, FieldKind>,\n )) {\n const v = readField(rawRec[field], kind)\n if (v !== undefined) kept[field] = v\n }\n if (Object.keys(kept).length > 0) out[group] = kept\n }\n const mood = readField(src.mood, \"string\")\n if (mood !== undefined) out.mood = mood\n return Object.keys(out).length > 0 ? (out as StructuredPromptFields) : undefined\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/read-node-direction.ts"],"names":["DIRECTION_FIELDS","DIRECTION_ID_MAX_CHARS","DIRECTION_ARRAY_CEILING","getRegisteredSubjectKeys","SUBJECT_CUSTOM_AGE_KEY","SUBJECT_ID_MAX_CHARS","SUBJECT_ARRAY_CEILING"],"mappings":"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","file":"chunk-KYKCHOOS.cjs","sourcesContent":["/**\n * Narrow readers turning UNTRUSTED persisted node data (`workflows.nodes`\n * JSONB — import, MCP write, node preset, a Studio-emitted graph) into the\n * typed `subject` / `direction` / `structured` levers `assembleImageInput`\n * accepts.\n * `buildPayload` has no zod and workflow writes are\n * `z.record(z.string(), z.unknown())`, so this blob may have been written years\n * ago by any client.\n *\n * Used by ALL THREE image-assembly sites so what the canvas accepts cannot\n * drift between them: the frontend single-node executor (`execute-node.ts`),\n * the orchestrator (`payload-builder.ts`), and the config-panel final-prompt\n * preview (`build-image-assemble-input.ts`).\n *\n * `readDirectionFields` is DERIVED FROM `DIRECTION_FIELDS`, never a hand list:\n * a dimension added to the registry is honored here by construction, so the\n * reader can never silently drop a key the wire schema and the renderer both\n * know about. Anything unrecognised is DROPPED, never thrown on — a malformed\n * blob must not fail a canvas run, and an unknown catalog ID already degrades\n * to `\"\"` inside each `get*PromptHint`, so this validates SHAPE only.\n *\n * BOUNDS MATCH THE WIRE SCHEMA where both exist, by SHARED CONSTANT:\n * `DIRECTION_ID_MAX_CHARS` and `DIRECTION_ARRAY_CEILING` are the same two\n * literals the `generate-image` route's `directionSchema` enforces, imported\n * from the registry rather than re-typed here — a body the route accepts and a\n * node the canvas re-runs must not disagree about which strings are ids.\n *\n * DELIBERATELY STRICTER THAN THE WIRE SCHEMA on `structured` values: the\n * route's `structuredPromptFieldsSchema` declares every field as a bare\n * `z.string().optional()` (unbounded), while `MAX_STRUCTURED_VALUE_CHARS` below\n * bounds them at 200. Do not \"fix\" that asymmetry by loosening HERE — this\n * reads a blob any client may have written years ago, and the values land\n * verbatim in `jobs.input_data.prompt`. Tightening the ROUTE instead would be a\n * new 400 on currently-accepted input, so a >200-char structured value stored\n * on a node is dropped on a canvas run while `POST /v1/generate-image` still\n * renders it. That is the one known divergence; it is bounded to a field the\n * canvas UI never writes that long.\n *\n * RETURNS `undefined`, NEVER `{}`: an empty object would still be a *defined*\n * `direction`, and the call sites' `...(x !== undefined ? { x } : {})` spread\n * would then hand `assembleImageInput` a defined-but-empty lever. Returning\n * `undefined` keeps that spread honest and the exact no-op branch taken.\n */\nimport {\n DIRECTION_ARRAY_CEILING,\n DIRECTION_FIELDS,\n DIRECTION_ID_MAX_CHARS,\n type DirectionFields,\n} from \"./direction-registry.js\"\nimport {\n SUBJECT_ARRAY_CEILING,\n SUBJECT_CUSTOM_AGE_KEY,\n SUBJECT_ID_MAX_CHARS,\n getRegisteredSubjectKeys,\n type SubjectFields,\n} from \"./subject-registry.js\"\nimport type { StructuredPromptFields } from \"./prompt-builder-structured-fields.js\"\n\n/**\n * Read a node's stored cinematic-direction ids. Accepts a single id OR an array\n * on every key (multi-pick dimensions carry arrays; a single-pick key may\n * legitimately carry one).\n *\n * The SEMANTIC per-dimension cap stays the renderer's slice (`maxPicks`) — this\n * reader does not know a row's pick budget and must not guess it. But it DOES\n * bound cardinality at `DIRECTION_ARRAY_CEILING`, the same ceiling the wire\n * schema enforces: the value is untrusted persisted JSONB (a node blob is\n * validated only as `z.record(z.string(), z.unknown())` on write), and handing\n * an unbounded array to `renderDirectionHints` would put an `includes`-dedupe\n * scan in front of that slice. Keeping the FIRST `DIRECTION_ARRAY_CEILING`\n * survivors is what the wire door already does to the same input.\n *\n * Junk is filtered BEFORE the cap, so valid ids sitting behind malformed\n * entries survive rather than being crowded out by them.\n */\nexport function readDirectionFields(value: unknown): DirectionFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, string | string[]> = {}\n for (const spec of DIRECTION_FIELDS) {\n const v = src[spec.key]\n if (typeof v === \"string\") {\n if (v.length > 0 && v.length <= DIRECTION_ID_MAX_CHARS) out[spec.key] = v\n } else if (Array.isArray(v)) {\n const kept: string[] = []\n for (const x of v) {\n if (kept.length >= DIRECTION_ARRAY_CEILING) break\n if (typeof x === \"string\" && x.length > 0 && x.length <= DIRECTION_ID_MAX_CHARS) {\n kept.push(x)\n }\n }\n if (kept.length > 0) out[spec.key] = kept\n }\n }\n return Object.keys(out).length > 0 ? (out as DirectionFields) : undefined\n}\n\n// ── subject ──────────────────────────────────────────────────────────────────\n\n/**\n * Read a node's stored SUBJECT ids — the flat Person / Styling / prop bag the\n * `subject` channel carries. Same three contracts as `readDirectionFields`:\n * drop-never-throw, `undefined` never `{}`, and bounds shared with the wire\n * door by CONSTANT (`SUBJECT_ID_MAX_CHARS` / `SUBJECT_ARRAY_CEILING`, which are\n * defined AS the direction constants) so a body the route accepts and the same\n * node re-run from the canvas cannot disagree about which strings are ids.\n *\n * DERIVED from `getRegisteredSubjectKeys()`, never a hand-authored field list —\n * that is the whole lesson of `readStructuredFields` below, whose hand table is\n * only viable because `StructuredPromptFields` is a small hand-authored type.\n * The subject vocabulary is ~54 catalog-derived fields PLUS deployment-registered\n * pack dimensions unknown at compile time, so it is read from the registry at\n * call time. Iterating the KEY SET (never `Object.keys(value)`) is also what\n * keeps an adversarial blob's key count off the hot path.\n *\n * The SEMANTIC per-dimension cap stays the renderer's job\n * (`normalizeSubjectFields`), exactly as `maxPicks` does for direction: this\n * reader bounds cardinality only. `customAge` is the one number on the wire and\n * is passed through finite-only — the renderer clamps it.\n */\nexport function readSubjectFields(value: unknown): SubjectFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, string | string[] | number> = {}\n for (const key of getRegisteredSubjectKeys()) {\n const v = src[key]\n if (key === SUBJECT_CUSTOM_AGE_KEY) {\n if (typeof v === \"number\" && Number.isFinite(v)) out[key] = v\n continue\n }\n if (typeof v === \"string\") {\n if (v.length > 0 && v.length <= SUBJECT_ID_MAX_CHARS) out[key] = v\n } else if (Array.isArray(v)) {\n // Junk is filtered BEFORE the cap, so valid ids sitting behind malformed\n // entries survive rather than being crowded out by them.\n const kept: string[] = []\n for (const x of v) {\n if (kept.length >= SUBJECT_ARRAY_CEILING) break\n if (typeof x === \"string\" && x.length > 0 && x.length <= SUBJECT_ID_MAX_CHARS) {\n kept.push(x)\n }\n }\n if (kept.length > 0) out[key] = kept\n }\n }\n return Object.keys(out).length > 0 ? (out as SubjectFields) : undefined\n}\n\n// ── structured ───────────────────────────────────────────────────────────────\n\ntype FieldKind = \"string\" | \"number\" | \"gender\"\nconst GENDERS = [\"man\", \"woman\", \"child\", \"non-binary\"] as const\nconst MAX_STRUCTURED_VALUE_CHARS = 200\n\ntype Group = Exclude<keyof StructuredPromptFields, \"mood\">\ntype GroupFields<K extends Group> = Record<keyof NonNullable<StructuredPromptFields[K]>, FieldKind>\n\n/**\n * A FIELD-BY-FIELD table (not a registry walk) on purpose:\n * `StructuredPromptFields` is a small HAND-AUTHORED type, not catalog-derived,\n * and the table is what blocks `person: { age: \"drop table\" }` from rendering\n * verbatim into `jobs.input_data.prompt` — `renderStructuredFields` never\n * throws on junk, but it does render it. Totality is enforced by the\n * `GroupFields<K>` / `{ [K in Group]: … }` mapped types: a new field or group\n * on the published type fails to typecheck here.\n */\nconst PERSON_FIELDS: GroupFields<\"person\"> = {\n age: \"number\",\n gender: \"gender\",\n hair: \"string\",\n eyes: \"string\",\n expression: \"string\",\n profession: \"string\",\n warriorType: \"string\",\n}\nconst STYLING_FIELDS: GroupFields<\"styling\"> = {\n mood: \"string\",\n lighting: \"string\",\n aesthetic: \"string\",\n colorLook: \"string\",\n}\nconst SETTING_FIELDS: GroupFields<\"setting\"> = {\n era: \"string\",\n atmosphere: \"string\",\n backdrop: \"string\",\n}\nconst CAMERA_FIELDS: GroupFields<\"camera\"> = {\n framing: \"string\",\n motion: \"string\",\n format: \"string\",\n}\nconst LENS_FIELDS: GroupFields<\"lens\"> = { focalLength: \"string\", aperture: \"string\" }\n\nconst STRUCTURED_GROUPS: { [K in Group]: GroupFields<K> } = {\n person: PERSON_FIELDS,\n styling: STYLING_FIELDS,\n setting: SETTING_FIELDS,\n camera: CAMERA_FIELDS,\n lens: LENS_FIELDS,\n}\n\nfunction readField(v: unknown, kind: FieldKind): string | number | undefined {\n if (kind === \"number\") return typeof v === \"number\" && Number.isFinite(v) ? v : undefined\n if (typeof v !== \"string\" || v.length === 0 || v.length > MAX_STRUCTURED_VALUE_CHARS) {\n return undefined\n }\n if (kind === \"gender\") return (GENDERS as readonly string[]).includes(v) ? v : undefined\n return v\n}\n\n/** Read a node's stored Path-1 structured prompt fields. Same drop-never-throw\n * and `undefined`-never-`{}` contract as `readDirectionFields`. */\nexport function readStructuredFields(value: unknown): StructuredPromptFields | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined\n const src = value as Record<string, unknown>\n const out: Record<string, unknown> = {}\n for (const group of Object.keys(STRUCTURED_GROUPS) as Group[]) {\n const raw = src[group]\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) continue\n const rawRec = raw as Record<string, unknown>\n const kept: Record<string, unknown> = {}\n for (const [field, kind] of Object.entries(\n STRUCTURED_GROUPS[group] as Record<string, FieldKind>,\n )) {\n const v = readField(rawRec[field], kind)\n if (v !== undefined) kept[field] = v\n }\n if (Object.keys(kept).length > 0) out[group] = kept\n }\n const mood = readField(src.mood, \"string\")\n if (mood !== undefined) out.mood = mood\n return Object.keys(out).length > 0 ? (out as StructuredPromptFields) : undefined\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkIADAATZK_cjs = require('./chunk-IADAATZK.cjs');
|
|
4
|
+
var chunkHR4TFBU2_cjs = require('./chunk-HR4TFBU2.cjs');
|
|
5
|
+
var chunkWLN2MJ7F_cjs = require('./chunk-WLN2MJ7F.cjs');
|
|
6
6
|
var chunkK6NT635Z_cjs = require('./chunk-K6NT635Z.cjs');
|
|
7
7
|
var chunkFY4AMIDB_cjs = require('./chunk-FY4AMIDB.cjs');
|
|
8
8
|
var chunkQ7SFCCGT_cjs = require('./chunk-Q7SFCCGT.cjs');
|
|
@@ -34,7 +34,7 @@ function fieldTable() {
|
|
|
34
34
|
m.set(field, catalogId);
|
|
35
35
|
if (!byField.has(field)) byField.set(field, catalogId);
|
|
36
36
|
};
|
|
37
|
-
for (const c of
|
|
37
|
+
for (const c of chunkWLN2MJ7F_cjs.PICKER_CATALOGS) {
|
|
38
38
|
if (c.valueField) put(c.nodeType, c.valueField, c.catalogId);
|
|
39
39
|
for (const d of c.dimensions ?? []) put(c.nodeType, d.field, c.catalogId);
|
|
40
40
|
for (const f of c.fields ?? []) put(c.nodeType, f, c.catalogId);
|
|
@@ -50,7 +50,7 @@ function composedIds(catalogId) {
|
|
|
50
50
|
if (!idsMemo || idsMemo.v !== v) idsMemo = { v, byCatalog: /* @__PURE__ */ new Map() };
|
|
51
51
|
const hit = idsMemo.byCatalog.get(catalogId);
|
|
52
52
|
if (hit) return hit;
|
|
53
|
-
const cat =
|
|
53
|
+
const cat = chunkWLN2MJ7F_cjs.getPickerCatalog(catalogId);
|
|
54
54
|
const ids = /* @__PURE__ */ new Set();
|
|
55
55
|
for (const o of cat?.options ?? []) ids.add(o.id);
|
|
56
56
|
for (const d of cat?.dimensions ?? []) for (const o of d.options) ids.add(o.id);
|
|
@@ -66,8 +66,8 @@ function catalogGuardActive() {
|
|
|
66
66
|
return chunkFY4AMIDB_cjs.getRegisteredCatalogPacks().length > 0;
|
|
67
67
|
}
|
|
68
68
|
function isOwnUserRef(field, id) {
|
|
69
|
-
const ref =
|
|
70
|
-
return ref !== null &&
|
|
69
|
+
const ref = chunkHR4TFBU2_cjs.parseUserDirectionRef(id);
|
|
70
|
+
return ref !== null && chunkHR4TFBU2_cjs.userRefKindOfDirectionKey(field) === ref.kind;
|
|
71
71
|
}
|
|
72
72
|
function checkRecord(nodeType, nodeId, data, fields, out, skip) {
|
|
73
73
|
for (const [field, catalogId] of fields) {
|
|
@@ -14627,6 +14627,9 @@ function date4(params) {
|
|
|
14627
14627
|
|
|
14628
14628
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14629
14629
|
config(en_default());
|
|
14630
|
+
function legendRow(e) {
|
|
14631
|
+
return { id: e.id, label: e.promptLabel ?? e.label, description: e.description };
|
|
14632
|
+
}
|
|
14630
14633
|
var PERSON_EXCLUDED = /* @__PURE__ */ new Set(["age-custom"]);
|
|
14631
14634
|
function tagDim(arr, dimension) {
|
|
14632
14635
|
return arr.map((e) => ({ id: e.id, label: e.label, description: e.description, dimension }));
|
|
@@ -14639,7 +14642,7 @@ var personCleanup = (patch, mode) => {
|
|
|
14639
14642
|
patch.customAge = void 0;
|
|
14640
14643
|
}
|
|
14641
14644
|
if (chunkK6NT635Z_cjs.isMinorAge(patch)) {
|
|
14642
|
-
const drop =
|
|
14645
|
+
const drop = chunkIADAATZK_cjs.getAdultOnlyIds();
|
|
14643
14646
|
for (const [k, v] of Object.entries(patch)) {
|
|
14644
14647
|
if (typeof v === "string" && drop.has(v)) patch[k] = void 0;
|
|
14645
14648
|
else if (Array.isArray(v)) patch[k] = v.filter((x) => !(typeof x === "string" && drop.has(x)));
|
|
@@ -14663,61 +14666,61 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14663
14666
|
kind: "discriminated",
|
|
14664
14667
|
toolName: "emit_styling",
|
|
14665
14668
|
discriminator: "dimension",
|
|
14666
|
-
order:
|
|
14667
|
-
fieldByKey:
|
|
14668
|
-
labels:
|
|
14669
|
-
entries:
|
|
14670
|
-
limitFn: (k) =>
|
|
14669
|
+
order: chunkWLN2MJ7F_cjs.STYLING_DIMENSION_ORDER,
|
|
14670
|
+
fieldByKey: chunkWLN2MJ7F_cjs.STYLING_FIELD_BY_DIMENSION,
|
|
14671
|
+
labels: chunkWLN2MJ7F_cjs.STYLING_DIMENSION_LABELS,
|
|
14672
|
+
entries: chunkWLN2MJ7F_cjs.STYLINGS,
|
|
14673
|
+
limitFn: (k) => chunkWLN2MJ7F_cjs.getStylingDimensionLimit(k)
|
|
14671
14674
|
},
|
|
14672
14675
|
framing: {
|
|
14673
14676
|
kind: "discriminated",
|
|
14674
14677
|
toolName: "emit_framing",
|
|
14675
14678
|
discriminator: "category",
|
|
14676
|
-
order:
|
|
14677
|
-
fieldByKey:
|
|
14678
|
-
labels:
|
|
14679
|
-
entries:
|
|
14680
|
-
limitFn: (k) =>
|
|
14679
|
+
order: chunkWLN2MJ7F_cjs.FRAMING_CATEGORY_ORDER,
|
|
14680
|
+
fieldByKey: chunkWLN2MJ7F_cjs.FRAMING_FIELD_BY_CATEGORY,
|
|
14681
|
+
labels: chunkWLN2MJ7F_cjs.FRAMING_CATEGORY_LABELS,
|
|
14682
|
+
entries: chunkWLN2MJ7F_cjs.FRAMINGS,
|
|
14683
|
+
limitFn: (k) => chunkWLN2MJ7F_cjs.getFramingCategoryLimit(k)
|
|
14681
14684
|
},
|
|
14682
14685
|
lens: {
|
|
14683
14686
|
kind: "flat",
|
|
14684
14687
|
toolName: "emit_lens",
|
|
14685
14688
|
field: "lens",
|
|
14686
14689
|
label: "Lens",
|
|
14687
|
-
entries:
|
|
14690
|
+
entries: chunkWLN2MJ7F_cjs.LENSES
|
|
14688
14691
|
},
|
|
14689
14692
|
"camera-format": {
|
|
14690
14693
|
kind: "flat",
|
|
14691
14694
|
toolName: "emit_camera_format",
|
|
14692
14695
|
field: "cameraFormat",
|
|
14693
14696
|
label: "Camera / Film Stock",
|
|
14694
|
-
entries:
|
|
14697
|
+
entries: chunkWLN2MJ7F_cjs.CAMERA_FORMATS
|
|
14695
14698
|
},
|
|
14696
14699
|
// ─── Text-to-picker expansion (Cine AI Fill): every remaining catalog ─────
|
|
14697
14700
|
// Flat single-value pickers — field names match the picker wiring's
|
|
14698
14701
|
// valueField (and the node-data shape the published-app input card writes).
|
|
14699
|
-
setting: { kind: "flat", toolName: "emit_setting", field: "setting", label: "Setting", entries:
|
|
14700
|
-
atmosphere: { kind: "flat", toolName: "emit_atmosphere", field: "atmosphere", label: "Atmosphere", entries:
|
|
14701
|
-
style: { kind: "flat", toolName: "emit_style", field: "style", label: "Style", entries:
|
|
14702
|
-
mood: { kind: "flat", toolName: "emit_mood", field: "mood", label: "Mood", entries:
|
|
14703
|
-
"color-look": { kind: "flat", toolName: "emit_color_look", field: "colorLook", label: "Color / Look", entries:
|
|
14704
|
-
photographer: { kind: "flat", toolName: "emit_photographer", field: "photographer", label: "Photographer / Artist", entries:
|
|
14705
|
-
aesthetic: { kind: "flat", toolName: "emit_aesthetic", field: "aesthetic", label: "Aesthetic / Microtrend", entries:
|
|
14706
|
-
era: { kind: "flat", toolName: "emit_era", field: "era", label: "Era / Period", entries:
|
|
14707
|
-
"photo-genre": { kind: "flat", toolName: "emit_photo_genre", field: "photoGenre", label: "Photo Genre", entries:
|
|
14708
|
-
backdrop: { kind: "flat", toolName: "emit_backdrop", field: "backdrop", label: "Backdrop", entries:
|
|
14709
|
-
"render-quality": { kind: "flat", toolName: "emit_render_quality", field: "renderQuality", label: "Render Quality", entries:
|
|
14710
|
-
"composition-effects": { kind: "flat", toolName: "emit_composition_effects", field: "compositionEffect", label: "Composition Effect", entries:
|
|
14711
|
-
"post-process-effects": { kind: "flat", toolName: "emit_post_process_effects", field: "postProcess", label: "Post-Process Effect", entries:
|
|
14712
|
-
"action-fx": { kind: "flat", toolName: "emit_action_fx", field: "actionFx", label: "Action FX", entries:
|
|
14713
|
-
"loop-subject": { kind: "flat", toolName: "emit_loop_subject", field: "loopSubject", label: "Loop Subject", entries:
|
|
14714
|
-
transition: { kind: "flat", toolName: "emit_transition", field: "transition", label: "Transition", entries:
|
|
14715
|
-
"character-fx": { kind: "flat", toolName: "emit_character_fx", field: "characterFx", label: "Character FX", entries:
|
|
14716
|
-
"character-motion": { kind: "flat", toolName: "emit_character_motion", field: "characterMotion", label: "Character Motion", entries:
|
|
14717
|
-
pose: { kind: "flat", toolName: "emit_pose", field: "pose", label: "Pose", entries:
|
|
14718
|
-
material: { kind: "flat", toolName: "emit_material", field: "material", label: "Material", entries:
|
|
14719
|
-
"held-prop": { kind: "flat", toolName: "emit_held_prop", field: "heldProp", label: "Held Prop", entries:
|
|
14720
|
-
"camera-motion": { kind: "flat", toolName: "emit_camera_motion", field: "cameraMotion", label: "Camera Motion", entries:
|
|
14702
|
+
setting: { kind: "flat", toolName: "emit_setting", field: "setting", label: "Setting", entries: chunkWLN2MJ7F_cjs.SETTINGS },
|
|
14703
|
+
atmosphere: { kind: "flat", toolName: "emit_atmosphere", field: "atmosphere", label: "Atmosphere", entries: chunkWLN2MJ7F_cjs.ATMOSPHERES },
|
|
14704
|
+
style: { kind: "flat", toolName: "emit_style", field: "style", label: "Style", entries: chunkWLN2MJ7F_cjs.STYLES },
|
|
14705
|
+
mood: { kind: "flat", toolName: "emit_mood", field: "mood", label: "Mood", entries: chunkWLN2MJ7F_cjs.MOODS },
|
|
14706
|
+
"color-look": { kind: "flat", toolName: "emit_color_look", field: "colorLook", label: "Color / Look", entries: chunkWLN2MJ7F_cjs.COLOR_LOOKS },
|
|
14707
|
+
photographer: { kind: "flat", toolName: "emit_photographer", field: "photographer", label: "Photographer / Artist", entries: chunkWLN2MJ7F_cjs.PHOTOGRAPHERS },
|
|
14708
|
+
aesthetic: { kind: "flat", toolName: "emit_aesthetic", field: "aesthetic", label: "Aesthetic / Microtrend", entries: chunkWLN2MJ7F_cjs.AESTHETICS },
|
|
14709
|
+
era: { kind: "flat", toolName: "emit_era", field: "era", label: "Era / Period", entries: chunkWLN2MJ7F_cjs.ERAS },
|
|
14710
|
+
"photo-genre": { kind: "flat", toolName: "emit_photo_genre", field: "photoGenre", label: "Photo Genre", entries: chunkWLN2MJ7F_cjs.PHOTO_GENRES },
|
|
14711
|
+
backdrop: { kind: "flat", toolName: "emit_backdrop", field: "backdrop", label: "Backdrop", entries: chunkWLN2MJ7F_cjs.BACKDROPS },
|
|
14712
|
+
"render-quality": { kind: "flat", toolName: "emit_render_quality", field: "renderQuality", label: "Render Quality", entries: chunkWLN2MJ7F_cjs.RENDER_QUALITIES },
|
|
14713
|
+
"composition-effects": { kind: "flat", toolName: "emit_composition_effects", field: "compositionEffect", label: "Composition Effect", entries: chunkWLN2MJ7F_cjs.COMPOSITION_EFFECTS },
|
|
14714
|
+
"post-process-effects": { kind: "flat", toolName: "emit_post_process_effects", field: "postProcess", label: "Post-Process Effect", entries: chunkWLN2MJ7F_cjs.POST_PROCESS_EFFECTS },
|
|
14715
|
+
"action-fx": { kind: "flat", toolName: "emit_action_fx", field: "actionFx", label: "Action FX", entries: chunkWLN2MJ7F_cjs.ACTION_FX },
|
|
14716
|
+
"loop-subject": { kind: "flat", toolName: "emit_loop_subject", field: "loopSubject", label: "Loop Subject", entries: chunkWLN2MJ7F_cjs.LOOP_SUBJECTS },
|
|
14717
|
+
transition: { kind: "flat", toolName: "emit_transition", field: "transition", label: "Transition", entries: chunkWLN2MJ7F_cjs.TRANSITIONS },
|
|
14718
|
+
"character-fx": { kind: "flat", toolName: "emit_character_fx", field: "characterFx", label: "Character FX", entries: chunkWLN2MJ7F_cjs.CHARACTER_FX },
|
|
14719
|
+
"character-motion": { kind: "flat", toolName: "emit_character_motion", field: "characterMotion", label: "Character Motion", entries: chunkWLN2MJ7F_cjs.CHARACTER_MOTIONS },
|
|
14720
|
+
pose: { kind: "flat", toolName: "emit_pose", field: "pose", label: "Pose", entries: chunkWLN2MJ7F_cjs.POSES },
|
|
14721
|
+
material: { kind: "flat", toolName: "emit_material", field: "material", label: "Material", entries: chunkWLN2MJ7F_cjs.MATERIALS },
|
|
14722
|
+
"held-prop": { kind: "flat", toolName: "emit_held_prop", field: "heldProp", label: "Held Prop", entries: chunkWLN2MJ7F_cjs.HELD_PROPS },
|
|
14723
|
+
"camera-motion": { kind: "flat", toolName: "emit_camera_motion", field: "cameraMotion", label: "Camera Motion", entries: chunkWLN2MJ7F_cjs.CAMERA_MOTIONS },
|
|
14721
14724
|
animal: { kind: "flat", toolName: "emit_animal", field: "animal", label: "Animal", entries: catalogs.ANIMALS },
|
|
14722
14725
|
vehicle: { kind: "flat", toolName: "emit_vehicle", field: "vehicle", label: "Vehicle", entries: catalogs.VEHICLES },
|
|
14723
14726
|
weapon: { kind: "flat", toolName: "emit_weapon", field: "weapon", label: "Weapon", entries: catalogs.WEAPONS },
|
|
@@ -14730,10 +14733,10 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14730
14733
|
kind: "discriminated",
|
|
14731
14734
|
toolName: "emit_lighting",
|
|
14732
14735
|
discriminator: "category",
|
|
14733
|
-
order:
|
|
14734
|
-
fieldByKey:
|
|
14735
|
-
labels:
|
|
14736
|
-
entries:
|
|
14736
|
+
order: chunkWLN2MJ7F_cjs.LIGHTING_CATEGORY_ORDER,
|
|
14737
|
+
fieldByKey: chunkWLN2MJ7F_cjs.LIGHTING_FIELD_BY_CATEGORY,
|
|
14738
|
+
labels: chunkWLN2MJ7F_cjs.LIGHTING_CATEGORY_LABELS,
|
|
14739
|
+
entries: chunkWLN2MJ7F_cjs.LIGHTINGS,
|
|
14737
14740
|
limitFn: () => 1
|
|
14738
14741
|
},
|
|
14739
14742
|
temporal: {
|
|
@@ -14743,7 +14746,7 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14743
14746
|
order: ["speed", "freeze", "direction", "shutter"],
|
|
14744
14747
|
fieldByKey: { speed: "temporalSpeed", freeze: "temporalFreeze", direction: "temporalDirection", shutter: "temporalShutter" },
|
|
14745
14748
|
labels: { speed: "Playback Speed", freeze: "Freeze", direction: "Direction", shutter: "Shutter" },
|
|
14746
|
-
entries:
|
|
14749
|
+
entries: chunkWLN2MJ7F_cjs.TEMPORALS,
|
|
14747
14750
|
limitFn: () => 1
|
|
14748
14751
|
},
|
|
14749
14752
|
"exposure-settings": {
|
|
@@ -14753,7 +14756,7 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14753
14756
|
order: ["aperture", "shutter-speed", "iso"],
|
|
14754
14757
|
fieldByKey: { aperture: "aperture", "shutter-speed": "shutterSpeed", iso: "isoValue" },
|
|
14755
14758
|
labels: { aperture: "Aperture", "shutter-speed": "Shutter Speed", iso: "ISO" },
|
|
14756
|
-
entries:
|
|
14759
|
+
entries: chunkWLN2MJ7F_cjs.EXPOSURE_SETTINGS,
|
|
14757
14760
|
limitFn: () => 1
|
|
14758
14761
|
},
|
|
14759
14762
|
"music-genre": {
|
|
@@ -14764,13 +14767,13 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14764
14767
|
fieldByKey: { genre: "genre", subgenre: "subgenre", era: "era" },
|
|
14765
14768
|
labels: { genre: "Genre", subgenre: "Subgenre", era: "Era" },
|
|
14766
14769
|
entries: [
|
|
14767
|
-
...tagDim(
|
|
14770
|
+
...tagDim(chunkWLN2MJ7F_cjs.MUSIC_GENRES, "genre"),
|
|
14768
14771
|
// Subgenres carry promptHint but no description — the hint doubles as
|
|
14769
14772
|
// the legend text (it describes the sound well enough for matching).
|
|
14770
|
-
...
|
|
14773
|
+
...chunkWLN2MJ7F_cjs.MUSIC_GENRES.flatMap(
|
|
14771
14774
|
(g) => g.subgenres.map((s) => ({ id: s.id, label: s.label, description: s.promptHint, dimension: "subgenre" }))
|
|
14772
14775
|
),
|
|
14773
|
-
...tagDim(
|
|
14776
|
+
...tagDim(chunkWLN2MJ7F_cjs.MUSIC_ERAS, "era")
|
|
14774
14777
|
],
|
|
14775
14778
|
limitFn: (k) => k === "genre" ? 2 : 1
|
|
14776
14779
|
},
|
|
@@ -14781,7 +14784,7 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14781
14784
|
order: ["energy", "emotion", "vibe"],
|
|
14782
14785
|
fieldByKey: { energy: "energy", emotion: "emotion", vibe: "vibe" },
|
|
14783
14786
|
labels: { energy: "Energy", emotion: "Emotion", vibe: "Vibe" },
|
|
14784
|
-
entries: [...tagDim(
|
|
14787
|
+
entries: [...tagDim(chunkWLN2MJ7F_cjs.MUSIC_ENERGIES, "energy"), ...tagDim(chunkWLN2MJ7F_cjs.MUSIC_EMOTIONS, "emotion"), ...tagDim(chunkWLN2MJ7F_cjs.MUSIC_VIBES, "vibe")],
|
|
14785
14788
|
limitFn: (k) => k === "energy" ? 1 : 2
|
|
14786
14789
|
},
|
|
14787
14790
|
instrumentation: {
|
|
@@ -14792,10 +14795,10 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14792
14795
|
fieldByKey: { instruments: "instruments", production: "production", vocalPresence: "vocalPresence", singingStyle: "singingStyle" },
|
|
14793
14796
|
labels: { instruments: "Instruments", production: "Production Style", vocalPresence: "Vocal Presence", singingStyle: "Singing Style" },
|
|
14794
14797
|
entries: [
|
|
14795
|
-
...tagDim(
|
|
14796
|
-
...tagDim(
|
|
14797
|
-
...tagDim(
|
|
14798
|
-
...tagDim(
|
|
14798
|
+
...tagDim(chunkWLN2MJ7F_cjs.INSTRUMENTS, "instruments"),
|
|
14799
|
+
...tagDim(chunkWLN2MJ7F_cjs.PRODUCTION_STYLES, "production"),
|
|
14800
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOCAL_PRESENCE, "vocalPresence"),
|
|
14801
|
+
...tagDim(chunkWLN2MJ7F_cjs.SINGING_STYLES, "singingStyle")
|
|
14799
14802
|
],
|
|
14800
14803
|
limitFn: (k) => k === "instruments" ? 3 : k === "production" ? 1 : 2
|
|
14801
14804
|
},
|
|
@@ -14807,11 +14810,11 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14807
14810
|
fieldByKey: { age: "age", gender: "gender", language: "language", accent: "accent", timbre: "timbre" },
|
|
14808
14811
|
labels: { age: "Age", gender: "Gender", language: "Language", accent: "Accent", timbre: "Timbre" },
|
|
14809
14812
|
entries: [
|
|
14810
|
-
...tagDim(
|
|
14811
|
-
...tagDim(
|
|
14812
|
-
...tagDim(
|
|
14813
|
-
...tagDim(
|
|
14814
|
-
...tagDim(
|
|
14813
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOICE_AGES, "age"),
|
|
14814
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOICE_GENDERS, "gender"),
|
|
14815
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOICE_LANGUAGES, "language"),
|
|
14816
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOICE_ACCENTS, "accent"),
|
|
14817
|
+
...tagDim(chunkWLN2MJ7F_cjs.VOICE_TIMBRES, "timbre")
|
|
14815
14818
|
],
|
|
14816
14819
|
limitFn: (k) => k === "language" ? 2 : 1
|
|
14817
14820
|
},
|
|
@@ -14822,7 +14825,7 @@ var PICKER_ANALYZER_REGISTRY = {
|
|
|
14822
14825
|
order: ["pace", "emotion", "archetype"],
|
|
14823
14826
|
fieldByKey: { pace: "pace", emotion: "emotion", archetype: "archetype" },
|
|
14824
14827
|
labels: { pace: "Pace", emotion: "Emotion", archetype: "Archetype" },
|
|
14825
|
-
entries: [...tagDim(
|
|
14828
|
+
entries: [...tagDim(chunkWLN2MJ7F_cjs.VOICE_PACES, "pace"), ...tagDim(chunkWLN2MJ7F_cjs.VOICE_EMOTIONS, "emotion"), ...tagDim(chunkWLN2MJ7F_cjs.VOICE_ARCHETYPES, "archetype")],
|
|
14826
14829
|
limitFn: () => 1
|
|
14827
14830
|
}
|
|
14828
14831
|
};
|
|
@@ -14852,7 +14855,7 @@ function buildPickerAnalyzerSpec(pickerType) {
|
|
|
14852
14855
|
label: d.label,
|
|
14853
14856
|
limit: 1,
|
|
14854
14857
|
entryIds: d.entries.map((e) => e.id),
|
|
14855
|
-
legend: d.entries.map(
|
|
14858
|
+
legend: d.entries.map(legendRow)
|
|
14856
14859
|
}
|
|
14857
14860
|
]
|
|
14858
14861
|
};
|
|
@@ -14867,7 +14870,7 @@ function buildPickerAnalyzerSpec(pickerType) {
|
|
|
14867
14870
|
label: d.labels[key] ?? key,
|
|
14868
14871
|
limit: d.limitFn(key),
|
|
14869
14872
|
entryIds: entries.map((e) => e.id),
|
|
14870
|
-
legend: entries.map(
|
|
14873
|
+
legend: entries.map(legendRow)
|
|
14871
14874
|
};
|
|
14872
14875
|
});
|
|
14873
14876
|
return { pickerType, toolName: d.toolName, dimensions, cleanup: d.cleanup };
|
|
@@ -15018,41 +15021,41 @@ function optionsByDiscriminator(arr, keyOf, fieldByKey) {
|
|
|
15018
15021
|
}
|
|
15019
15022
|
var SINGLE_PICKER_WIRING = [
|
|
15020
15023
|
// -------- "Look" family --------
|
|
15021
|
-
{ kind: "single", nodeType: "setting", label: "Setting", valueField: "setting", defaultValue: "forest", catalogId: "setting", entries: mapCat(
|
|
15022
|
-
{ kind: "single", nodeType: "atmosphere", label: "Atmosphere", valueField: "atmosphere", defaultValue: "clear", catalogId: "atmosphere", entries: mapCat(
|
|
15023
|
-
{ kind: "single", nodeType: "style", label: "Style", valueField: "style", defaultValue: "cinematic", catalogId: "style", entries: mapCat(
|
|
15024
|
-
{ kind: "single", nodeType: "color-look", label: "Color / Look", valueField: "colorLook", defaultValue: "warm", catalogId: "color-look", entries: mapCat(
|
|
15025
|
-
{ kind: "single", nodeType: "mood", label: "Mood", valueField: "mood", defaultValue: "calm", catalogId: "mood", entries: mapCat(
|
|
15026
|
-
{ kind: "single", nodeType: "photographer", label: "Photographer / Artist", valueField: "photographer", defaultValue: "tim-walker", catalogId: "photographer", entries: mapCat(
|
|
15027
|
-
{ kind: "single", nodeType: "aesthetic", label: "Aesthetic / Microtrend", valueField: "aesthetic", defaultValue: "y2k", catalogId: "aesthetic", entries: mapCat(
|
|
15028
|
-
{ kind: "single", nodeType: "era", label: "Era / Period", valueField: "era", defaultValue: "1990s-mall", catalogId: "era", entries: mapCat(
|
|
15029
|
-
{ kind: "single", nodeType: "photo-genre", label: "Photo Genre", valueField: "photoGenre", defaultValue: "fashion-editorial", catalogId: "photo-genre", entries: mapCat(
|
|
15030
|
-
{ kind: "single", nodeType: "backdrop", label: "Backdrop", valueField: "backdrop", defaultValue: "white-seamless", catalogId: "backdrop", entries: mapCat(
|
|
15031
|
-
{ kind: "single", nodeType: "render-quality", label: "Render Quality", valueField: "renderQuality", defaultValue: "raytracing", catalogId: "render-quality", entries: mapCat(
|
|
15024
|
+
{ kind: "single", nodeType: "setting", label: "Setting", valueField: "setting", defaultValue: "forest", catalogId: "setting", entries: mapCat(chunkWLN2MJ7F_cjs.SETTINGS, "category"), groupOrder: ["indoor", "urban", "nature", "fantastical"], groupLabels: chunkWLN2MJ7F_cjs.SETTING_CATEGORY_LABELS },
|
|
15025
|
+
{ kind: "single", nodeType: "atmosphere", label: "Atmosphere", valueField: "atmosphere", defaultValue: "clear", catalogId: "atmosphere", entries: mapCat(chunkWLN2MJ7F_cjs.ATMOSPHERES) },
|
|
15026
|
+
{ kind: "single", nodeType: "style", label: "Style", valueField: "style", defaultValue: "cinematic", catalogId: "style", entries: mapCat(chunkWLN2MJ7F_cjs.STYLES) },
|
|
15027
|
+
{ kind: "single", nodeType: "color-look", label: "Color / Look", valueField: "colorLook", defaultValue: "warm", catalogId: "color-look", entries: mapCat(chunkWLN2MJ7F_cjs.COLOR_LOOKS, "category"), groupOrder: chunkWLN2MJ7F_cjs.COLOR_LOOK_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.COLOR_LOOK_CATEGORY_LABELS },
|
|
15028
|
+
{ kind: "single", nodeType: "mood", label: "Mood", valueField: "mood", defaultValue: "calm", catalogId: "mood", entries: mapCat(chunkWLN2MJ7F_cjs.MOODS, "category"), groupOrder: chunkWLN2MJ7F_cjs.MOOD_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.MOOD_CATEGORY_LABELS },
|
|
15029
|
+
{ kind: "single", nodeType: "photographer", label: "Photographer / Artist", valueField: "photographer", defaultValue: "tim-walker", catalogId: "photographer", entries: mapCat(chunkWLN2MJ7F_cjs.PHOTOGRAPHERS, "category"), groupOrder: chunkWLN2MJ7F_cjs.PHOTOGRAPHER_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.PHOTOGRAPHER_CATEGORY_LABELS },
|
|
15030
|
+
{ kind: "single", nodeType: "aesthetic", label: "Aesthetic / Microtrend", valueField: "aesthetic", defaultValue: "y2k", catalogId: "aesthetic", entries: mapCat(chunkWLN2MJ7F_cjs.AESTHETICS, "category"), groupOrder: chunkWLN2MJ7F_cjs.AESTHETIC_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.AESTHETIC_CATEGORY_LABELS },
|
|
15031
|
+
{ kind: "single", nodeType: "era", label: "Era / Period", valueField: "era", defaultValue: "1990s-mall", catalogId: "era", entries: mapCat(chunkWLN2MJ7F_cjs.ERAS, "category"), groupOrder: chunkWLN2MJ7F_cjs.ERA_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.ERA_CATEGORY_LABELS },
|
|
15032
|
+
{ kind: "single", nodeType: "photo-genre", label: "Photo Genre", valueField: "photoGenre", defaultValue: "fashion-editorial", catalogId: "photo-genre", entries: mapCat(chunkWLN2MJ7F_cjs.PHOTO_GENRES, "category"), groupOrder: chunkWLN2MJ7F_cjs.PHOTO_GENRE_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.PHOTO_GENRE_CATEGORY_LABELS },
|
|
15033
|
+
{ kind: "single", nodeType: "backdrop", label: "Backdrop", valueField: "backdrop", defaultValue: "white-seamless", catalogId: "backdrop", entries: mapCat(chunkWLN2MJ7F_cjs.BACKDROPS, "category"), groupOrder: chunkWLN2MJ7F_cjs.BACKDROP_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.BACKDROP_CATEGORY_LABELS },
|
|
15034
|
+
{ kind: "single", nodeType: "render-quality", label: "Render Quality", valueField: "renderQuality", defaultValue: "raytracing", catalogId: "render-quality", entries: mapCat(chunkWLN2MJ7F_cjs.RENDER_QUALITIES) },
|
|
15032
15035
|
// No default effect — see the note in picker-catalogs.ts.
|
|
15033
|
-
{ kind: "single", nodeType: "composition-effects", label: "Composition Effect", valueField: "compositionEffect", defaultValue: "none", catalogId: "composition-effects", entries: mapCat(
|
|
15034
|
-
{ kind: "single", nodeType: "action-fx", label: "Action FX", valueField: "actionFx", defaultValue: "earthquake-tremor", catalogId: "action-fx", entries: mapCat(
|
|
15035
|
-
{ kind: "single", nodeType: "loop-subject", label: "Loop Subject", valueField: "loopSubject", defaultValue: "tunnel", catalogId: "loop-subject", entries: mapCat(
|
|
15036
|
-
{ kind: "single", nodeType: "post-process-effects", label: "Post-Process Effect", valueField: "postProcess", defaultValue: "vignette-soft", catalogId: "post-process-effects", entries: mapCat(
|
|
15036
|
+
{ kind: "single", nodeType: "composition-effects", label: "Composition Effect", valueField: "compositionEffect", defaultValue: "none", catalogId: "composition-effects", entries: mapCat(chunkWLN2MJ7F_cjs.COMPOSITION_EFFECTS) },
|
|
15037
|
+
{ kind: "single", nodeType: "action-fx", label: "Action FX", valueField: "actionFx", defaultValue: "earthquake-tremor", catalogId: "action-fx", entries: mapCat(chunkWLN2MJ7F_cjs.ACTION_FX, "category"), groupOrder: chunkWLN2MJ7F_cjs.ACTION_FX_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.ACTION_FX_CATEGORY_LABELS },
|
|
15038
|
+
{ kind: "single", nodeType: "loop-subject", label: "Loop Subject", valueField: "loopSubject", defaultValue: "tunnel", catalogId: "loop-subject", entries: mapCat(chunkWLN2MJ7F_cjs.LOOP_SUBJECTS, "category"), groupOrder: chunkWLN2MJ7F_cjs.LOOP_SUBJECT_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.LOOP_SUBJECT_CATEGORY_LABELS },
|
|
15039
|
+
{ kind: "single", nodeType: "post-process-effects", label: "Post-Process Effect", valueField: "postProcess", defaultValue: "vignette-soft", catalogId: "post-process-effects", entries: mapCat(chunkWLN2MJ7F_cjs.POST_PROCESS_EFFECTS) },
|
|
15037
15040
|
// -------- "Camera" family --------
|
|
15038
|
-
{ kind: "single", nodeType: "camera-motion", label: "Camera Motion", valueField: "cameraMotion", defaultValue: "static", catalogId: "camera-motions", entries: mapCat(
|
|
15039
|
-
{ kind: "single", nodeType: "lens", label: "Lens", valueField: "lens", defaultValue: "normal-50mm", catalogId: "lens", entries: mapCat(
|
|
15040
|
-
{ kind: "single", nodeType: "camera-format", label: "Camera / Film", valueField: "cameraFormat", defaultValue: "35mm-film", catalogId: "camera-format", entries: mapCat(
|
|
15041
|
-
{ kind: "single", nodeType: "transition", label: "Transition", valueField: "transition", defaultValue: "auto", catalogId: "transitions", entries: mapCat(
|
|
15042
|
-
{ kind: "single", nodeType: "character-fx", label: "Character FX", valueField: "characterFx", defaultValue: "auto", catalogId: "character-fx", entries: mapCat(
|
|
15043
|
-
{ kind: "single", nodeType: "character-motion", label: "Character Motion", valueField: "characterMotion", defaultValue: "auto", catalogId: "character-motion", entries: mapCat(
|
|
15041
|
+
{ kind: "single", nodeType: "camera-motion", label: "Camera Motion", valueField: "cameraMotion", defaultValue: "static", catalogId: "camera-motions", entries: mapCat(chunkWLN2MJ7F_cjs.CAMERA_MOTIONS, "category"), groupOrder: chunkWLN2MJ7F_cjs.CAMERA_MOTION_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.CAMERA_MOTION_CATEGORY_LABELS },
|
|
15042
|
+
{ kind: "single", nodeType: "lens", label: "Lens", valueField: "lens", defaultValue: "normal-50mm", catalogId: "lens", entries: mapCat(chunkWLN2MJ7F_cjs.LENSES) },
|
|
15043
|
+
{ kind: "single", nodeType: "camera-format", label: "Camera / Film", valueField: "cameraFormat", defaultValue: "35mm-film", catalogId: "camera-format", entries: mapCat(chunkWLN2MJ7F_cjs.CAMERA_FORMATS) },
|
|
15044
|
+
{ kind: "single", nodeType: "transition", label: "Transition", valueField: "transition", defaultValue: "auto", catalogId: "transitions", entries: mapCat(chunkWLN2MJ7F_cjs.TRANSITIONS, "category"), groupOrder: chunkWLN2MJ7F_cjs.TRANSITION_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.TRANSITION_CATEGORY_LABELS },
|
|
15045
|
+
{ kind: "single", nodeType: "character-fx", label: "Character FX", valueField: "characterFx", defaultValue: "auto", catalogId: "character-fx", entries: mapCat(chunkWLN2MJ7F_cjs.CHARACTER_FX, "category"), groupOrder: chunkWLN2MJ7F_cjs.CHARACTER_FX_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.CHARACTER_FX_CATEGORY_LABELS },
|
|
15046
|
+
{ kind: "single", nodeType: "character-motion", label: "Character Motion", valueField: "characterMotion", defaultValue: "auto", catalogId: "character-motion", entries: mapCat(chunkWLN2MJ7F_cjs.CHARACTER_MOTIONS, "category"), groupOrder: chunkWLN2MJ7F_cjs.CHARACTER_MOTION_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.CHARACTER_MOTION_CATEGORY_LABELS },
|
|
15044
15047
|
// -------- "Subject / Object" family --------
|
|
15045
|
-
{ kind: "single", nodeType: "pose", label: "Pose", valueField: "pose", defaultValue: "standing-upright", catalogId: "pose", entries: mapCat(
|
|
15046
|
-
{ kind: "single", nodeType: "material", label: "Material", valueField: "material", defaultValue: "silk", catalogId: "materials", entries: mapCat(
|
|
15048
|
+
{ kind: "single", nodeType: "pose", label: "Pose", valueField: "pose", defaultValue: "standing-upright", catalogId: "pose", entries: mapCat(chunkWLN2MJ7F_cjs.POSES, "category"), groupOrder: chunkWLN2MJ7F_cjs.POSE_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.POSE_CATEGORY_LABELS },
|
|
15049
|
+
{ kind: "single", nodeType: "material", label: "Material", valueField: "material", defaultValue: "silk", catalogId: "materials", entries: mapCat(chunkWLN2MJ7F_cjs.MATERIALS, "category"), groupOrder: chunkWLN2MJ7F_cjs.MATERIAL_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.MATERIAL_CATEGORY_LABELS },
|
|
15047
15050
|
{ kind: "single", nodeType: "animal", label: "Animal", valueField: "animal", defaultValue: "dog-golden-retriever", catalogId: "animals", entries: mapCat(catalogs.ANIMALS, "subcategory"), groupOrder: catalogs.ANIMAL_SUBCATEGORY_ORDER, groupLabels: catalogs.ANIMAL_SUBCATEGORY_LABELS },
|
|
15048
15051
|
{ kind: "single", nodeType: "vehicle", label: "Vehicle", valueField: "vehicle", defaultValue: "sedan", catalogId: "vehicles", entries: mapCat(catalogs.VEHICLES, "subcategory"), groupOrder: catalogs.VEHICLE_SUBCATEGORY_ORDER, groupLabels: catalogs.VEHICLE_SUBCATEGORY_LABELS },
|
|
15049
15052
|
{ kind: "single", nodeType: "weapon", label: "Weapon", valueField: "weapon", defaultValue: "katana", catalogId: "weapons", entries: mapCat(catalogs.WEAPONS, "subcategory"), groupOrder: catalogs.WEAPON_SUBCATEGORY_ORDER, groupLabels: catalogs.WEAPON_SUBCATEGORY_LABELS },
|
|
15050
15053
|
{ kind: "single", nodeType: "furniture", label: "Furniture", valueField: "furniture", defaultValue: "sofa", catalogId: "furniture", entries: mapCat(catalogs.FURNITURE, "subcategory"), groupOrder: catalogs.FURNITURE_SUBCATEGORY_ORDER, groupLabels: catalogs.FURNITURE_SUBCATEGORY_LABELS },
|
|
15051
|
-
{ kind: "single", nodeType: "held-prop", label: "Held Prop", valueField: "heldProp", defaultValue: "smartphone", catalogId: "held-prop", entries: mapCat(
|
|
15054
|
+
{ kind: "single", nodeType: "held-prop", label: "Held Prop", valueField: "heldProp", defaultValue: "smartphone", catalogId: "held-prop", entries: mapCat(chunkWLN2MJ7F_cjs.HELD_PROPS, "category"), groupOrder: chunkWLN2MJ7F_cjs.HELD_PROP_CATEGORY_ORDER, groupLabels: chunkWLN2MJ7F_cjs.HELD_PROP_CATEGORY_LABELS }
|
|
15052
15055
|
];
|
|
15053
|
-
var STYLING_FIELDS =
|
|
15056
|
+
var STYLING_FIELDS = chunkWLN2MJ7F_cjs.STYLING_DIMENSION_ORDER.map((d) => chunkWLN2MJ7F_cjs.STYLING_FIELD_BY_DIMENSION[d]);
|
|
15054
15057
|
var PERSON_FIELDS = chunkK6NT635Z_cjs.PERSON_DIMENSION_ORDER.map((d) => chunkK6NT635Z_cjs.PERSON_FIELD_BY_DIMENSION[d]);
|
|
15055
|
-
var LIGHTING_FIELDS =
|
|
15058
|
+
var LIGHTING_FIELDS = chunkWLN2MJ7F_cjs.LIGHTING_CATEGORY_ORDER.map((c) => chunkWLN2MJ7F_cjs.LIGHTING_FIELD_BY_CATEGORY[c]);
|
|
15056
15059
|
var TEMPORAL_FIELD_BY_CATEGORY = {
|
|
15057
15060
|
speed: "temporalSpeed",
|
|
15058
15061
|
freeze: "temporalFreeze",
|
|
@@ -15071,8 +15074,8 @@ var MULTI_PICKER_WIRING = [
|
|
|
15071
15074
|
label: "Framing",
|
|
15072
15075
|
fields: ["shotSize", "angle", "coverage", "composition", "vantage"],
|
|
15073
15076
|
catalogId: "framing",
|
|
15074
|
-
catalogEntries: flatCat(
|
|
15075
|
-
fieldOptions: optionsByDiscriminator(
|
|
15077
|
+
catalogEntries: flatCat(chunkWLN2MJ7F_cjs.FRAMINGS),
|
|
15078
|
+
fieldOptions: optionsByDiscriminator(chunkWLN2MJ7F_cjs.FRAMINGS, (e) => e.category, chunkWLN2MJ7F_cjs.FRAMING_FIELD_BY_CATEGORY)
|
|
15076
15079
|
},
|
|
15077
15080
|
{
|
|
15078
15081
|
kind: "multi",
|
|
@@ -15080,8 +15083,8 @@ var MULTI_PICKER_WIRING = [
|
|
|
15080
15083
|
label: "Lighting",
|
|
15081
15084
|
fields: LIGHTING_FIELDS,
|
|
15082
15085
|
catalogId: "lighting",
|
|
15083
|
-
catalogEntries: flatCat(
|
|
15084
|
-
fieldOptions: optionsByDiscriminator(
|
|
15086
|
+
catalogEntries: flatCat(chunkWLN2MJ7F_cjs.LIGHTINGS),
|
|
15087
|
+
fieldOptions: optionsByDiscriminator(chunkWLN2MJ7F_cjs.LIGHTINGS, (e) => e.category, chunkWLN2MJ7F_cjs.LIGHTING_FIELD_BY_CATEGORY)
|
|
15085
15088
|
},
|
|
15086
15089
|
{
|
|
15087
15090
|
kind: "multi",
|
|
@@ -15098,8 +15101,8 @@ var MULTI_PICKER_WIRING = [
|
|
|
15098
15101
|
label: "Styling",
|
|
15099
15102
|
fields: STYLING_FIELDS,
|
|
15100
15103
|
catalogId: "styling",
|
|
15101
|
-
catalogEntries: flatCat(
|
|
15102
|
-
fieldOptions: optionsByDiscriminator(
|
|
15104
|
+
catalogEntries: flatCat(chunkWLN2MJ7F_cjs.STYLINGS),
|
|
15105
|
+
fieldOptions: optionsByDiscriminator(chunkWLN2MJ7F_cjs.STYLINGS, (e) => e.dimension, chunkWLN2MJ7F_cjs.STYLING_FIELD_BY_DIMENSION)
|
|
15103
15106
|
},
|
|
15104
15107
|
{
|
|
15105
15108
|
kind: "multi",
|
|
@@ -15107,8 +15110,8 @@ var MULTI_PICKER_WIRING = [
|
|
|
15107
15110
|
label: "Temporal",
|
|
15108
15111
|
fields: ["temporalSpeed", "temporalFreeze", "temporalDirection", "temporalShutter"],
|
|
15109
15112
|
catalogId: "temporal",
|
|
15110
|
-
catalogEntries: flatCat(
|
|
15111
|
-
fieldOptions: optionsByDiscriminator(
|
|
15113
|
+
catalogEntries: flatCat(chunkWLN2MJ7F_cjs.TEMPORALS),
|
|
15114
|
+
fieldOptions: optionsByDiscriminator(chunkWLN2MJ7F_cjs.TEMPORALS, (e) => e.category, TEMPORAL_FIELD_BY_CATEGORY)
|
|
15112
15115
|
},
|
|
15113
15116
|
{
|
|
15114
15117
|
kind: "multi",
|
|
@@ -15116,8 +15119,8 @@ var MULTI_PICKER_WIRING = [
|
|
|
15116
15119
|
label: "Exposure Settings",
|
|
15117
15120
|
fields: ["aperture", "shutterSpeed", "isoValue"],
|
|
15118
15121
|
catalogId: "exposure-settings",
|
|
15119
|
-
catalogEntries: flatCat(
|
|
15120
|
-
fieldOptions: optionsByDiscriminator(
|
|
15122
|
+
catalogEntries: flatCat(chunkWLN2MJ7F_cjs.EXPOSURE_SETTINGS),
|
|
15123
|
+
fieldOptions: optionsByDiscriminator(chunkWLN2MJ7F_cjs.EXPOSURE_SETTINGS, (e) => e.category, EXPOSURE_FIELD_BY_CATEGORY)
|
|
15121
15124
|
},
|
|
15122
15125
|
// -------- "Sound" family --------
|
|
15123
15126
|
// Music Genre catalog is hierarchical: flatten genres + every subgenre +
|
|
@@ -15129,14 +15132,14 @@ var MULTI_PICKER_WIRING = [
|
|
|
15129
15132
|
fields: ["genre", "subgenre", "era"],
|
|
15130
15133
|
catalogId: "music-genre",
|
|
15131
15134
|
catalogEntries: [
|
|
15132
|
-
...flatCat(
|
|
15133
|
-
...
|
|
15134
|
-
...flatCat(
|
|
15135
|
+
...flatCat(chunkWLN2MJ7F_cjs.MUSIC_GENRES),
|
|
15136
|
+
...chunkWLN2MJ7F_cjs.MUSIC_GENRES.flatMap((g) => g.subgenres.map((s) => ({ id: s.id, label: s.label }))),
|
|
15137
|
+
...flatCat(chunkWLN2MJ7F_cjs.MUSIC_ERAS)
|
|
15135
15138
|
],
|
|
15136
15139
|
fieldOptions: {
|
|
15137
|
-
genre: flatCat(
|
|
15138
|
-
subgenre:
|
|
15139
|
-
era: flatCat(
|
|
15140
|
+
genre: flatCat(chunkWLN2MJ7F_cjs.MUSIC_GENRES),
|
|
15141
|
+
subgenre: chunkWLN2MJ7F_cjs.MUSIC_GENRES.flatMap((g) => g.subgenres.map((s) => ({ id: s.id, label: s.label }))),
|
|
15142
|
+
era: flatCat(chunkWLN2MJ7F_cjs.MUSIC_ERAS)
|
|
15140
15143
|
}
|
|
15141
15144
|
},
|
|
15142
15145
|
{
|
|
@@ -15145,11 +15148,11 @@ var MULTI_PICKER_WIRING = [
|
|
|
15145
15148
|
label: "Music Mood",
|
|
15146
15149
|
fields: ["energy", "emotion", "vibe"],
|
|
15147
15150
|
catalogId: "music-mood",
|
|
15148
|
-
catalogEntries: [...flatCat(
|
|
15151
|
+
catalogEntries: [...flatCat(chunkWLN2MJ7F_cjs.MUSIC_ENERGIES), ...flatCat(chunkWLN2MJ7F_cjs.MUSIC_EMOTIONS), ...flatCat(chunkWLN2MJ7F_cjs.MUSIC_VIBES)],
|
|
15149
15152
|
fieldOptions: {
|
|
15150
|
-
energy: flatCat(
|
|
15151
|
-
emotion: flatCat(
|
|
15152
|
-
vibe: flatCat(
|
|
15153
|
+
energy: flatCat(chunkWLN2MJ7F_cjs.MUSIC_ENERGIES),
|
|
15154
|
+
emotion: flatCat(chunkWLN2MJ7F_cjs.MUSIC_EMOTIONS),
|
|
15155
|
+
vibe: flatCat(chunkWLN2MJ7F_cjs.MUSIC_VIBES)
|
|
15153
15156
|
}
|
|
15154
15157
|
},
|
|
15155
15158
|
{
|
|
@@ -15158,12 +15161,12 @@ var MULTI_PICKER_WIRING = [
|
|
|
15158
15161
|
label: "Instrumentation",
|
|
15159
15162
|
fields: ["instruments", "production", "vocalPresence", "singingStyle"],
|
|
15160
15163
|
catalogId: "instrumentation",
|
|
15161
|
-
catalogEntries: [...flatCat(
|
|
15164
|
+
catalogEntries: [...flatCat(chunkWLN2MJ7F_cjs.INSTRUMENTS), ...flatCat(chunkWLN2MJ7F_cjs.PRODUCTION_STYLES), ...flatCat(chunkWLN2MJ7F_cjs.VOCAL_PRESENCE), ...flatCat(chunkWLN2MJ7F_cjs.SINGING_STYLES)],
|
|
15162
15165
|
fieldOptions: {
|
|
15163
|
-
instruments: flatCat(
|
|
15164
|
-
production: flatCat(
|
|
15165
|
-
vocalPresence: flatCat(
|
|
15166
|
-
singingStyle: flatCat(
|
|
15166
|
+
instruments: flatCat(chunkWLN2MJ7F_cjs.INSTRUMENTS),
|
|
15167
|
+
production: flatCat(chunkWLN2MJ7F_cjs.PRODUCTION_STYLES),
|
|
15168
|
+
vocalPresence: flatCat(chunkWLN2MJ7F_cjs.VOCAL_PRESENCE),
|
|
15169
|
+
singingStyle: flatCat(chunkWLN2MJ7F_cjs.SINGING_STYLES)
|
|
15167
15170
|
}
|
|
15168
15171
|
},
|
|
15169
15172
|
{
|
|
@@ -15172,13 +15175,13 @@ var MULTI_PICKER_WIRING = [
|
|
|
15172
15175
|
label: "Voice Character",
|
|
15173
15176
|
fields: ["age", "gender", "language", "accent", "timbre"],
|
|
15174
15177
|
catalogId: "voice-character",
|
|
15175
|
-
catalogEntries: [...flatCat(
|
|
15178
|
+
catalogEntries: [...flatCat(chunkWLN2MJ7F_cjs.VOICE_AGES), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_GENDERS), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_LANGUAGES), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_ACCENTS), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_TIMBRES)],
|
|
15176
15179
|
fieldOptions: {
|
|
15177
|
-
age: flatCat(
|
|
15178
|
-
gender: flatCat(
|
|
15179
|
-
language: flatCat(
|
|
15180
|
-
accent: flatCat(
|
|
15181
|
-
timbre: flatCat(
|
|
15180
|
+
age: flatCat(chunkWLN2MJ7F_cjs.VOICE_AGES),
|
|
15181
|
+
gender: flatCat(chunkWLN2MJ7F_cjs.VOICE_GENDERS),
|
|
15182
|
+
language: flatCat(chunkWLN2MJ7F_cjs.VOICE_LANGUAGES),
|
|
15183
|
+
accent: flatCat(chunkWLN2MJ7F_cjs.VOICE_ACCENTS),
|
|
15184
|
+
timbre: flatCat(chunkWLN2MJ7F_cjs.VOICE_TIMBRES)
|
|
15182
15185
|
}
|
|
15183
15186
|
},
|
|
15184
15187
|
{
|
|
@@ -15187,11 +15190,11 @@ var MULTI_PICKER_WIRING = [
|
|
|
15187
15190
|
label: "Voice Delivery",
|
|
15188
15191
|
fields: ["pace", "emotion", "archetype"],
|
|
15189
15192
|
catalogId: "voice-delivery",
|
|
15190
|
-
catalogEntries: [...flatCat(
|
|
15193
|
+
catalogEntries: [...flatCat(chunkWLN2MJ7F_cjs.VOICE_PACES), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_EMOTIONS), ...flatCat(chunkWLN2MJ7F_cjs.VOICE_ARCHETYPES)],
|
|
15191
15194
|
fieldOptions: {
|
|
15192
|
-
pace: flatCat(
|
|
15193
|
-
emotion: flatCat(
|
|
15194
|
-
archetype: flatCat(
|
|
15195
|
+
pace: flatCat(chunkWLN2MJ7F_cjs.VOICE_PACES),
|
|
15196
|
+
emotion: flatCat(chunkWLN2MJ7F_cjs.VOICE_EMOTIONS),
|
|
15197
|
+
archetype: flatCat(chunkWLN2MJ7F_cjs.VOICE_ARCHETYPES)
|
|
15195
15198
|
}
|
|
15196
15199
|
}
|
|
15197
15200
|
];
|
|
@@ -15227,5 +15230,5 @@ exports.getPickerAnalyzer = getPickerAnalyzer;
|
|
|
15227
15230
|
exports.getPickerWiring = getPickerWiring;
|
|
15228
15231
|
exports.isAnalyzablePicker = isAnalyzablePicker;
|
|
15229
15232
|
exports.pickerFanoutTargets = pickerFanoutTargets;
|
|
15230
|
-
//# sourceMappingURL=chunk-
|
|
15231
|
-
//# sourceMappingURL=chunk-
|
|
15233
|
+
//# sourceMappingURL=chunk-MJIKM4YZ.cjs.map
|
|
15234
|
+
//# sourceMappingURL=chunk-MJIKM4YZ.cjs.map
|