@3driseai/3drise-core 1.0.21 → 1.0.22
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/autoAnimate/composer.d.ts +6 -0
- package/dist/autoAnimate/composer.d.ts.map +1 -1
- package/dist/autoAnimate/composer.js +4 -3
- package/dist/autoAnimate/describeScene.js +1 -1
- package/dist/catalog/catalogInfo.d.ts +22 -0
- package/dist/catalog/catalogInfo.d.ts.map +1 -0
- package/dist/catalog/catalogInfo.js +204 -0
- package/dist/catalog/index.d.ts +3 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog/objectCatalog.d.ts +33 -0
- package/dist/catalog/objectCatalog.d.ts.map +1 -0
- package/dist/catalog/objectCatalog.js +99 -0
- package/dist/data/allMaterials.js +2 -2
- package/dist/data/environmentDefaults.d.ts +10 -0
- package/dist/data/environmentDefaults.d.ts.map +1 -0
- package/dist/data/environmentDefaults.js +126 -0
- package/dist/data/gridsDefaults.d.ts +2 -0
- package/dist/data/gridsDefaults.d.ts.map +1 -1
- package/dist/data/gridsDefaults.js +57 -0
- package/dist/data/index.d.ts +4 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +4 -0
- package/dist/data/landDefaults.d.ts +26 -0
- package/dist/data/landDefaults.d.ts.map +1 -0
- package/dist/data/landDefaults.js +76 -0
- package/dist/data/spaceDefaults.d.ts +10 -0
- package/dist/data/spaceDefaults.d.ts.map +1 -0
- package/dist/data/spaceDefaults.js +46 -0
- package/dist/data/textDefaults.d.ts +16 -0
- package/dist/data/textDefaults.d.ts.map +1 -0
- package/dist/data/textDefaults.js +199 -0
- package/dist/environment/oceanConfigs.d.ts +5 -4
- package/dist/environment/oceanConfigs.d.ts.map +1 -1
- package/dist/environment/oceanConfigs.js +2 -2
- package/dist/environment/terrainConfigs.d.ts +78 -0
- package/dist/environment/terrainConfigs.d.ts.map +1 -1
- package/dist/environment/terrainConfigs.js +72 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/properties/registry.d.ts +10 -1
- package/dist/properties/registry.d.ts.map +1 -1
- package/dist/properties/registry.js +60 -9
- package/dist/properties/tables/environmentProperties.d.ts +9 -0
- package/dist/properties/tables/environmentProperties.d.ts.map +1 -0
- package/dist/properties/tables/environmentProperties.js +127 -0
- package/dist/properties/tables/gridProperties.d.ts.map +1 -1
- package/dist/properties/tables/gridProperties.js +117 -93
- package/dist/properties/tables/index.d.ts +4 -0
- package/dist/properties/tables/index.d.ts.map +1 -1
- package/dist/properties/tables/index.js +4 -0
- package/dist/properties/tables/landProperties.d.ts +5 -0
- package/dist/properties/tables/landProperties.d.ts.map +1 -0
- package/dist/properties/tables/landProperties.js +24 -0
- package/dist/properties/tables/optionalProperties.d.ts +1 -2
- package/dist/properties/tables/optionalProperties.d.ts.map +1 -1
- package/dist/properties/tables/optionalProperties.js +21 -0
- package/dist/properties/tables/spaceProperties.d.ts +8 -0
- package/dist/properties/tables/spaceProperties.d.ts.map +1 -0
- package/dist/properties/tables/spaceProperties.js +42 -0
- package/dist/properties/tables/textProperties.d.ts +4 -0
- package/dist/properties/tables/textProperties.d.ts.map +1 -0
- package/dist/properties/tables/textProperties.js +361 -0
- package/dist/properties/types.d.ts +1 -1
- package/dist/properties/types.d.ts.map +1 -1
- package/dist/services/MaterialRegistry.d.ts.map +1 -1
- package/dist/services/MaterialRegistry.js +2 -0
- package/dist/services/SkySystemManager.d.ts +22 -0
- package/dist/services/SkySystemManager.d.ts.map +1 -1
- package/dist/services/SkySystemManager.js +50 -18
- package/dist/services/TextureResolver.d.ts.map +1 -1
- package/dist/services/TextureResolver.js +22 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/shaders/SkyboxMaterial.js +3 -3
- package/dist/shaders/StarsMaterial.d.ts +5 -0
- package/dist/shaders/StarsMaterial.d.ts.map +1 -1
- package/dist/shaders/StarsMaterial.js +59 -57
- package/dist/types/actions.d.ts +6 -5
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/commands.d.ts +61 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +1 -0
- package/dist/types/environment.d.ts +34 -1
- package/dist/types/environment.d.ts.map +1 -1
- package/dist/types/environment.js +15 -0
- package/dist/types/environmentObjects.d.ts +152 -0
- package/dist/types/environmentObjects.d.ts.map +1 -0
- package/dist/types/environmentObjects.js +10 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/landObjects.d.ts +15 -0
- package/dist/types/landObjects.d.ts.map +1 -0
- package/dist/types/landObjects.js +1 -0
- package/dist/types/objectSettings.d.ts +187 -16
- package/dist/types/objectSettings.d.ts.map +1 -1
- package/dist/types/objectsConfigs.d.ts +0 -3
- package/dist/types/objectsConfigs.d.ts.map +1 -1
- package/dist/types/scene3d.d.ts +8 -5
- package/dist/types/scene3d.d.ts.map +1 -1
- package/dist/types/spaceObjects.d.ts +65 -0
- package/dist/types/spaceObjects.d.ts.map +1 -0
- package/dist/types/spaceObjects.js +11 -0
- package/dist/types/textObjects.d.ts +352 -0
- package/dist/types/textObjects.d.ts.map +1 -0
- package/dist/types/textObjects.js +14 -0
- package/dist/types/types.d.ts +3 -6
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/users.d.ts +3 -1
- package/dist/types/users.d.ts.map +1 -1
- package/dist/types/users.js +2 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +4 -0
- package/dist/ui/uiBindings.d.ts +45 -0
- package/dist/ui/uiBindings.d.ts.map +1 -0
- package/dist/ui/uiBindings.js +172 -0
- package/dist/ui/uiKeys.d.ts +14 -0
- package/dist/ui/uiKeys.d.ts.map +1 -0
- package/dist/ui/uiKeys.js +22 -0
- package/dist/ui/uiSanitize.d.ts +18 -0
- package/dist/ui/uiSanitize.d.ts.map +1 -0
- package/dist/ui/uiSanitize.js +251 -0
- package/dist/ui/uiSpec.d.ts +116 -0
- package/dist/ui/uiSpec.d.ts.map +1 -0
- package/dist/ui/uiSpec.js +173 -0
- package/dist/utils/environmentMigration.d.ts +3 -0
- package/dist/utils/environmentMigration.d.ts.map +1 -0
- package/dist/utils/environmentMigration.js +50 -0
- package/dist/utils/generativeAnimatable.d.ts +1 -1
- package/dist/utils/generativeAnimatable.d.ts.map +1 -1
- package/dist/utils/generativeAnimatable.js +12 -0
- package/dist/utils/getAnimatableProperties.d.ts +1 -1
- package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
- package/dist/utils/getAnimatableProperties.js +1 -1
- package/dist/utils/gridMigration.d.ts +3 -0
- package/dist/utils/gridMigration.d.ts.map +1 -0
- package/dist/utils/gridMigration.js +34 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/objectEffects.d.ts +24 -2
- package/dist/utils/objectEffects.d.ts.map +1 -1
- package/dist/utils/objectEffects.js +29 -2
- package/dist/utils/objectMigration.d.ts +9 -0
- package/dist/utils/objectMigration.d.ts.map +1 -0
- package/dist/utils/objectMigration.js +12 -0
- package/dist/utils/skyPhase.d.ts +61 -0
- package/dist/utils/skyPhase.d.ts.map +1 -0
- package/dist/utils/skyPhase.js +93 -0
- package/dist/utils/spaceMigration.d.ts +3 -0
- package/dist/utils/spaceMigration.d.ts.map +1 -0
- package/dist/utils/spaceMigration.js +46 -0
- package/dist/utils/sunUtils.d.ts +26 -1
- package/dist/utils/sunUtils.d.ts.map +1 -1
- package/dist/utils/sunUtils.js +37 -6
- package/package.json +1 -1
|
@@ -19,6 +19,12 @@ export interface GenerateOptions {
|
|
|
19
19
|
analyze?: AnalyzeOptions;
|
|
20
20
|
/** Start the sequence when the published project loads. */
|
|
21
21
|
autoplay?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Animate objects that still have temp ids. Safe since the save rewrites every temp id
|
|
24
|
+
* in a batch (data-center assignBatchIds + client tempIdRemap), clip tracks included —
|
|
25
|
+
* the scene agent creates and animates objects in one request.
|
|
26
|
+
*/
|
|
27
|
+
includeUnsaved?: boolean;
|
|
22
28
|
}
|
|
23
29
|
export interface GenerateResult {
|
|
24
30
|
clips: DraftClip[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/autoAnimate/composer.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAuB,aAAa,EAA0B,MAAM,SAAS,CAAC;AACrG,OAAO,EAEkF,KAAK,SAAS,EACtG,MAAM,WAAW,CAAC;AACnB,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAA+B,UAAU,EAAE,YAAY,EAAM,MAAM,SAAS,CAAC;AAEzG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,wFAAwF;IACxF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/autoAnimate/composer.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAuB,aAAa,EAA0B,MAAM,SAAS,CAAC;AACrG,OAAO,EAEkF,KAAK,SAAS,EACtG,MAAM,WAAW,CAAC;AACnB,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAA+B,UAAU,EAAE,YAAY,EAAM,MAAM,SAAS,CAAC;AAEzG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,wFAAwF;IACxF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B;AAUD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,GAAG,cAAc,CA6N7F"}
|
|
@@ -90,9 +90,10 @@ export function generateAnimation(input, options) {
|
|
|
90
90
|
const hero = profile.heroId ? byId.get(profile.heroId) ?? null : null;
|
|
91
91
|
const animated = new Set();
|
|
92
92
|
/** A new object may move unless it or one of its ancestors / descendants already does. */
|
|
93
|
-
const
|
|
93
|
+
const usable = (p) => p.saved || !!options.includeUnsaved;
|
|
94
|
+
const canAnimate = (p) => usable(p) && p.visible && !animated.has(p.id) && !ancestors(p).some(a => animated.has(a)) &&
|
|
94
95
|
![...animated].some(id => ancestors(byId.get(id)).includes(p.id));
|
|
95
|
-
if (hero && hero
|
|
96
|
+
if (hero && usable(hero))
|
|
96
97
|
animated.add(hero.id);
|
|
97
98
|
const groups = [];
|
|
98
99
|
for (const g of profile.groups) {
|
|
@@ -110,7 +111,7 @@ export function generateAnimation(input, options) {
|
|
|
110
111
|
.filter(p => (p.role === 'standalone' || p.role === 'member') && canAnimate(p))
|
|
111
112
|
.sort((a, b) => a.bounds.center[0] - b.bounds.center[0]);
|
|
112
113
|
standalone.forEach(p => animated.add(p.id));
|
|
113
|
-
const lights = profile.objects.filter(p => p.role === 'light' && p
|
|
114
|
+
const lights = profile.objects.filter(p => p.role === 'light' && usable(p) && p.capabilities.config.includes('intensity'));
|
|
114
115
|
const center = hero ? hero.bounds.center : profile.bounds.center;
|
|
115
116
|
// =========================================================================================
|
|
116
117
|
if (options.template === 'ambient') {
|
|
@@ -34,7 +34,7 @@ const roundValue = (v) => (Array.isArray(v) ? v.map(r) : typeof v === 'number' ?
|
|
|
34
34
|
/** Registry kinds the AI can write; strings, vec2 and textures are not offered. */
|
|
35
35
|
const PROP_KINDS = new Set(['vec3', 'number', 'color', 'boolean', 'select']);
|
|
36
36
|
/** Families whose set-only properties go out as patch (transform / material / edges / shadow are not offered). */
|
|
37
|
-
const PATCH_DOMAINS = new Set(['light', 'particles', 'effect', 'grid', 'rain', 'clouds', 'config', 'sky', 'cirrus', 'ocean', 'terrain']);
|
|
37
|
+
const PATCH_DOMAINS = new Set(['light', 'particles', 'effect', 'grid', 'environment', 'space', 'land', 'text', 'rain', 'clouds', 'config', 'sky', 'cirrus', 'ocean', 'terrain']);
|
|
38
38
|
const toProp = (p) => {
|
|
39
39
|
if (!PROP_KINDS.has(p.kind))
|
|
40
40
|
return null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface CatalogTypeInfo {
|
|
2
|
+
key: string;
|
|
3
|
+
legacyId?: string;
|
|
4
|
+
description: string;
|
|
5
|
+
icon: string;
|
|
6
|
+
order: number;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
defaultVariant?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface CatalogVariantInfo {
|
|
11
|
+
key: string;
|
|
12
|
+
legacyId?: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
tags: string[];
|
|
16
|
+
transform?: Record<string, unknown>;
|
|
17
|
+
material?: Record<string, unknown>;
|
|
18
|
+
config?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export declare const CATALOG_TYPES: CatalogTypeInfo[];
|
|
21
|
+
export declare const CATALOG_VARIANTS: Record<string, CatalogVariantInfo[]>;
|
|
22
|
+
//# sourceMappingURL=catalogInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogInfo.d.ts","sourceRoot":"","sources":["../../src/catalog/catalogInfo.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC/H;AACD,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7G;AAED,eAAO,MAAM,aAAa,EAAE,eAAe,EAc1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CA6KjE,CAAC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// catalogInfo — what the registry tables do not say about an object
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// Per type and per variant: the words the Add menu and the AI choose by (description,
|
|
6
|
+
// tags), the display name, and the transform / material a variant starts with.
|
|
7
|
+
// Configs live in the registry's DEFAULT_* tables (effects, particles, grids, lights,
|
|
8
|
+
// environment, space); only mesh, gallery and text variants carry their config here,
|
|
9
|
+
// because those families have no defaults table.
|
|
10
|
+
//
|
|
11
|
+
// `key` is permanent (it is what scenes store in config.type / shapeType / layout).
|
|
12
|
+
// `legacyId` is the row id the DB catalog used, kept so templates (objectTypeId) and
|
|
13
|
+
// existing ?variantId= links keep resolving. New entries have none.
|
|
14
|
+
//
|
|
15
|
+
// Generated 2026-10-04 from the DB export (properties/typesAndVatiants.json); edit by hand from now on.
|
|
16
|
+
export const CATALOG_TYPES = [
|
|
17
|
+
{ key: "model", legacyId: "f817e85d-6t78-11f1-8573-00163e32d101", description: "Import a 3d model", icon: "cube", order: 0, enabled: true },
|
|
18
|
+
{ key: "group", legacyId: "f7536fd7-6a68-11f1-8573-00163e32d101", description: "An empty container that parents other objects so they move or scale together.", icon: "box", order: 1, enabled: true },
|
|
19
|
+
{ key: "mesh", legacyId: "f794c9f2-6a68-11f1-8573-00163e32d101", description: "A primitive 3D shape (box, sphere, cylinder, etc.). The most common object type for general geometry.", icon: "cube", order: 2, enabled: true, defaultVariant: "box" },
|
|
20
|
+
{ key: "grid", legacyId: "f732d206-6a68-11f1-8573-00163e32d101", description: "A grid overlay (cells and sections), typically on the ground plane.", icon: "calculator", order: 3, enabled: true },
|
|
21
|
+
{ key: "light", legacyId: "f7745031-6a68-11f1-8573-00163e32d101", description: "A light source illuminating the scene. Choose the kind based on directionality and falloff.", icon: "lightbulb", order: 4, enabled: true },
|
|
22
|
+
{ key: "environment", legacyId: "f6f1a6a4-6a68-11f1-8573-00163e32d101", description: "Environmental elements from the world", icon: "globe", order: 5, enabled: true },
|
|
23
|
+
{ key: "gallery", legacyId: "f71242f6-6a68-11f1-8573-00163e32d101", description: "A layout that arranges multiple image frames in 3D space.", icon: "images", order: 6, enabled: true, defaultVariant: "tiles" },
|
|
24
|
+
{ key: "effect", legacyId: "f6d118fe-6a68-11f1-8573-00163e32d101", description: "Generative visual effects that add geometry or particles around a focal point.", icon: "palette", order: 7, enabled: true, defaultVariant: "aura" },
|
|
25
|
+
{ key: "particles", legacyId: "f7b5bfba-6a68-11f1-8573-00163e32d101", description: "A particle system arranged in a configurable shape. Use for swarms, sparks, dust, dotted shapes.", icon: "sparkles", order: 8, enabled: true },
|
|
26
|
+
{ key: "path", legacyId: "f7d663ca-6a68-11f1-8573-00163e32d101", description: "A 3D spline or path that other objects can follow.", icon: "draw-polygon", order: 9, enabled: false },
|
|
27
|
+
{ key: "space", legacyId: "f7f6f91b-6a68-11f1-8573-00163e32d101", description: "Elements from space", icon: "planet-ringed", order: 10, enabled: true },
|
|
28
|
+
{ key: "text", legacyId: "e841a567-7fb1-49ac-9d90-eb26a414b07f", description: "2d text, 3d text and more", icon: "font", order: 11, enabled: true },
|
|
29
|
+
{ key: "land", description: "Placeable patches of terrain - mountains, hills, dunes, canyon - sized and moved like any object, as many as you like. For the scene's one endless ground use the environment terrain.", icon: "mountain", order: 12, enabled: true, defaultVariant: "hills" },
|
|
30
|
+
];
|
|
31
|
+
export const CATALOG_VARIANTS = {
|
|
32
|
+
mesh: [
|
|
33
|
+
{ key: "box", legacyId: "6220eea0-6a6f-11f1-8573-00163e32d101", name: "box", description: "Rectangular box / cube. Use for crates, walls, blocks, cubes.", tags: ["box", "cube", "block", "crate", "rectangular", "cuboid"], config: { size: [1, 1, 1], type: "box" } },
|
|
34
|
+
{ key: "capsule", legacyId: "62e393d2-6a6f-11f1-8573-00163e32d101", name: "capsule", description: "Cylinder with hemispherical caps. Use for pills, character bodies, rounded poles.", tags: ["capsule", "pill", "tablet", "rounded-pole", "pod"], config: { type: "capsule", length: 1, radius: 0.3, capSegments: 4, radialSegments: 8 } },
|
|
35
|
+
{ key: "club", legacyId: "2c66d079-8c55-420f-b531-1dc3c65cad2d", name: "club", description: "Club mesh", tags: ["club", "card"], config: { type: "club" } },
|
|
36
|
+
{ key: "cone", legacyId: "62822c80-6a6f-11f1-8573-00163e32d101", name: "cone", description: "Pointed cone. Use for traffic cones, spires, ice-cream cones, witch hats.", tags: ["cone", "tip", "point", "spire", "traffic-cone", "horn"], config: { type: "cone", height: 1, radius: 0.5, radialSegments: 32 } },
|
|
37
|
+
{ key: "cylinder", legacyId: "6261af4d-6a6f-11f1-8573-00163e32d101", name: "cylinder", description: "Cylinder (pipe / tube / column). Use for poles, columns, cans, pipes.", tags: ["cylinder", "pipe", "tube", "column", "can", "pole", "barrel"], config: { type: "cylinder", height: 1, radiusTop: 0.5, radiusBottom: 0.5, radialSegments: 32 } },
|
|
38
|
+
{ key: "diamond", legacyId: "ee01c9cc-3158-4b25-85b5-d90b12156744", name: "diamond", description: "Diamond mesh", tags: ["diamond", "card"], config: { type: "diamond" } },
|
|
39
|
+
{ key: "dodecahedron", legacyId: "6386f7f9-6a6f-11f1-8573-00163e32d101", name: "dodecahedron", description: "12-sided polyhedron with pentagonal faces. Use for d12 dice, faceted gemstones.", tags: ["dodecahedron", "d12", "12-sided", "pentagonal"], config: { type: "dodecahedron", detail: 0, radius: 0.5 } },
|
|
40
|
+
{ key: "droplet", legacyId: "893650d6-a3cf-4a52-b5b0-3eb178ea001b", name: "droplet", description: "Droplet mesh", tags: ["droplet", "drop"], config: { type: "droplet", taper: 1, width: 0.5 } },
|
|
41
|
+
{ key: "gear", legacyId: "7ef0a81c-addc-4a02-9110-389eb834db34", name: "gear", description: "Gear shape mesh", tags: ["gear", "cog"], config: { hole: 0.16, type: "gear", inner: 0.38, outer: 0.5, teeth: 12 } },
|
|
42
|
+
{ key: "heart", legacyId: "ca82412a-145e-49c7-95d8-b2940be39aa4", name: "heart", description: "simple heart mesh", tags: [], config: { type: "heart", bevelSize: 0.03, bevelSegments: 3, curveSegments: 64, bevelThickness: 0.03 } },
|
|
43
|
+
{ key: "icosahedron", legacyId: "6324647d-6a6f-11f1-8573-00163e32d101", name: "icosahedron", description: "20-sided polyhedron. Use for d20 dice, geodesic forms, faceted gems.", tags: ["icosahedron", "d20", "20-sided", "geodesic", "faceted"], config: { type: "icosahedron", detail: 0, radius: 0.5 } },
|
|
44
|
+
{ key: "infinity", legacyId: "3d7311ca-b7a8-4027-b207-50b21c3d6b4c", name: "infinity", description: "Infinity mesh", tags: ["infinity"], config: { type: "infinity", waist: 0.14, samples: 220, thickness: 0.12 } },
|
|
45
|
+
{ key: "lightning", legacyId: "c9466069-c8c4-40c2-a8bb-7f3d7f2b4659", name: "lightning", description: "Lightning mesh", tags: ["lightning"], config: { type: "lightning", width: 0.6, height: 1 } },
|
|
46
|
+
{ key: "octahedron", legacyId: "6344f7d9-6a6f-11f1-8573-00163e32d101", name: "octahedron", description: "8-sided polyhedron (two pyramids back-to-back). Use for d8 dice, crystals, faceted diamonds.", tags: ["octahedron", "d8", "8-sided", "diamond-shape", "bipyramid"], config: { type: "octahedron", detail: 0, radius: 0.5 } },
|
|
47
|
+
{ key: "pawPrint", legacyId: "40a127e2-7c11-4b66-9b6d-7b88e21727c1", name: "paw print", description: "Dog paw print", tags: ["paw", "dog"], config: { type: "pawPrint" } },
|
|
48
|
+
{ key: "plane", legacyId: "62c2dad5-6a6f-11f1-8573-00163e32d101", name: "plane", description: "Flat 2D rectangle. Use for ground, floors, walls, screens, ceilings.", tags: ["plane", "flat", "ground", "floor", "wall", "screen", "ceiling", "sheet"], config: { size: [1, 1], type: "plane", widthSegments: 1, heightSegments: 1 } },
|
|
49
|
+
{ key: "point", legacyId: "63a733f3-6a6f-11f1-8573-00163e32d101", name: "point", description: "A rendered point (single vertex). Use for star markers, light positions, debug dots.", tags: ["point", "dot", "marker", "vertex"], config: { type: "point", radius: 0.1 } },
|
|
50
|
+
{ key: "polygon", legacyId: "25e32476-9177-4124-89d6-248167466ae1", name: "polygon", description: "dynamic polygon", tags: ["shape", "polygone"], config: { type: "polygon", sides: 5 } },
|
|
51
|
+
{ key: "ring", legacyId: "6303fbff-6a6f-11f1-8573-00163e32d101", name: "ring", description: "Flat ring (annulus). Use for halos, washers, planetary rings, dartboards.", tags: ["ring", "annulus", "halo", "washer", "flat-ring"], config: { type: "ring", innerRadius: 0.3, outerRadius: 0.8, phiSegments: 8, thetaSegments: 32 } },
|
|
52
|
+
{ key: "shield", legacyId: "4a058c73-605d-4d25-9860-67cfda992f20", name: "shield", description: "Shield mesh", tags: ["shield"], config: { type: "shield", width: 0.8 } },
|
|
53
|
+
{ key: "spade", legacyId: "299f856b-2ec2-4453-a6ba-275bc8db9c1e", name: "spade", description: "Spade mesh", tags: ["spade", "card"], config: { type: "spade" } },
|
|
54
|
+
{ key: "sparkle", legacyId: "5b4e7ffb-e9af-41a6-9869-aa435184b28f", name: "sparkle", description: "Sparkle mesh", tags: ["sparkle", "magic"], config: { type: "sparkle", inner: 0.14, outer: 0.5, points: 4 } },
|
|
55
|
+
{ key: "sphere", legacyId: "62416655-6a6f-11f1-8573-00163e32d101", name: "sphere", description: "Round 3D sphere. Use for balls, planets, orbs, bubbles.", tags: ["sphere", "ball", "orb", "globe", "planet", "round", "bubble"], config: { type: "sphere", radius: 0.5, widthSegments: 32, heightSegments: 32 } },
|
|
56
|
+
{ key: "star", legacyId: "70406ce5-c25a-4190-9f1f-73932187ec34", name: "star", description: "star mesh", tags: [], config: { type: "star", inner: 0.2, outer: 0.5, points: 5, curveSegments: 64 } },
|
|
57
|
+
{ key: "superformula", legacyId: "cd64b779-69da-4afa-98d5-683b48511568", name: "super formula", description: "Super formula mesh", tags: [], config: { type: "superformula", twist1: 0.3, twist2: 0.3, samples: 256, stretchX: 1, stretchY: 1, symmetry: 6, roundness: 0.3 } },
|
|
58
|
+
{ key: "tetrahedron", legacyId: "636570a9-6a6f-11f1-8573-00163e32d101", name: "tetrahedron", description: "4-sided polyhedron (triangular pyramid). Use for d4 dice, simple pyramids, sharp spikes.", tags: ["tetrahedron", "d4", "4-sided", "pyramid", "spike", "triangular-pyramid"], config: { type: "tetrahedron", detail: 0, radius: 0.5 } },
|
|
59
|
+
{ key: "torus", legacyId: "62a28904-6a6f-11f1-8573-00163e32d101", name: "torus", description: "Donut shape — a ring with thickness. Use for donuts, rings, tubes-as-loops.", tags: ["torus", "donut", "doughnut", "ring-thick", "loop"], config: { tube: 0.2, type: "torus", radius: 0.5, radialSegments: 16, tubularSegments: 100 } },
|
|
60
|
+
],
|
|
61
|
+
grid: [
|
|
62
|
+
{ key: "advancedGrid", legacyId: "71h8sjh8-6a6f-gu85-8573-00163e32d101", name: "advanced grid", description: "A Grid with shader material , animation and noise effects.", tags: ["grid"] },
|
|
63
|
+
{ key: "basic", legacyId: "71b9euh8-6a6f-11f1-8573-00163e32d101", name: "basic grid", description: "Basic grid with cells and sections", tags: ["grid"], material: { materialType: "basic", materialVariant: "Standard", materialDefaults: { color: "#ffffff", opacity: 1, emissive: "#000000", metalness: 0.5, roughness: 0.5, wireframe: false, flatShading: false, transparent: false, envMapIntensity: 1, emissiveIntensity: 1 } } },
|
|
64
|
+
{ key: "chladniGrid", legacyId: "4d9d1ee0-86d0-4838-8fee-da969f809fb8", name: "chladniGrid", description: "Vibrating Chladni plates: sand settles on the nodal lines of a standing wave that drifts between resonances. Use for sound, music, science and meditative floors.", tags: ["chladni", "cymatics", "standing-wave", "sound", "vibration", "sand", "floor"] },
|
|
65
|
+
{ key: "circuitGrid", legacyId: "b8d25bcf-f52c-4778-88d4-208593c7c4db", name: "circuit grid", description: "Beautifull circuit grid", tags: [] },
|
|
66
|
+
{ key: "contourGrid", legacyId: "fe6ddcc2-b7cc-4c6c-bc57-54f3e5f88329", name: "contour grid", description: "Dazzling contour grid", tags: [] },
|
|
67
|
+
{ key: "flowNetGrid", legacyId: "57e3786c-9f26-4fa0-8902-f8a5e45a59d0", name: "flowNetGrid", description: "A potential-flow net around a cylinder: streamlines and equipotentials cross at right angles and bend around the obstacle. Use for aerodynamic, fluid and engineering floors.", tags: ["flow-net", "potential-flow", "streamlines", "fluid", "aerodynamics", "conformal", "floor"] },
|
|
68
|
+
{ key: "fractalGrid", legacyId: "5f4a64fb-119a-4ae7-a939-79861bce2fed", name: "fractal grid", description: "Fractal base grid", tags: [] },
|
|
69
|
+
{ key: "girihGrid", legacyId: "a378585a-6698-4fef-be85-f7cdc74f8192", name: "girihGrid", description: "Islamic star-and-rosette strapwork built by Hankin polygons-in-contact: rays leave every edge midpoint at the contact angle and close into interlaced stars. Use for ornament, palace, mosaic and ritual floors.", tags: ["girih", "islamic", "star-pattern", "strapwork", "hankin", "tiling", "ornament", "floor"] },
|
|
70
|
+
{ key: "gravWaveGrid", legacyId: "1781ba3e-73a3-443a-8e38-53c865cc7a01", name: "gravWaveGrid", description: "A spacetime lattice around an inspiralling black-hole binary: the wells pinch the grid and chirping quadrupole waves spiral outward until the merger rings down. Use for space, physics and sci-fi floors.", tags: ["gravitational-waves", "black-holes", "binary", "spacetime", "relativity", "chirp", "space", "floor"] },
|
|
71
|
+
{ key: "hexGrid", legacyId: "65e8d204-fecc-4178-902e-93777ef1cee8", name: "hex grid", description: "honeycomb grid", tags: ["grid", "hex"] },
|
|
72
|
+
{ key: "hyperbolicGrid", legacyId: "80740e5a-2d0b-42a3-be4b-67f3b545fd2b", name: "hyperbolicGrid", description: "An Escher-style {p,q} tiling of the Poincaré disk that glides through itself; tiles shrink endlessly toward the rim. Use for mystical, mathematical and portal floors.", tags: ["hyperbolic", "poincare-disk", "escher", "tiling", "non-euclidean", "portal", "floor"] },
|
|
73
|
+
{ key: "moireGrid", legacyId: "28472d4c-12b5-4ab2-81eb-495114a877e4", name: "moire grid", description: "Moire", tags: [] },
|
|
74
|
+
{ key: "quasiGrid", legacyId: "0fb6e4ea-be1e-48fd-b224-3c36ceebce2e", name: "quas grid", description: "Quas grid", tags: [] },
|
|
75
|
+
{ key: "radarGrid", legacyId: "54ca235e-1493-40b1-ac71-d0ae92865f14", name: "radar grid", description: "cool radar grid", tags: [] },
|
|
76
|
+
{ key: "reactionDiffusionGrid", legacyId: "eb14f6ad-d376-4108-8fe3-1bd716486a82", name: "reactionDiffusionGrid", description: "A living Gray-Scott reaction-diffusion field: coral, labyrinths and dividing spots grow across the plane and never settle. Use for organic, biological and alien floors.", tags: ["reaction-diffusion", "gray-scott", "turing-pattern", "coral", "organic", "morphogenesis", "floor"] },
|
|
77
|
+
{ key: "voronoiGrid", legacyId: "c7f4b4a7-6280-4543-8e3d-7c969b19eeb3", name: "voronoid grid", description: "Voronoid grid", tags: [] },
|
|
78
|
+
{ key: "wallpaperGrid", legacyId: "2ef1e024-f425-4728-8e4c-23710e0d414c", name: "wallpaperGrid", description: "Kaleidoscope patterns with the exact symmetry of the 17 wallpaper groups, drifting and cycling from one group to the next. Use for tiled, ornamental, crystal and mosaic floors.", tags: ["wallpaper-group", "symmetry", "kaleidoscope", "crystallography", "tiling", "ornament", "mosaic", "floor"] },
|
|
79
|
+
{ key: "lensingGrid", name: "Lensing Grid", description: "A square lattice seen through a point-mass gravitational lens: Einstein ring, inverted inner image and a dark shadow. Use for space, sci-fi and cosmic floors.", tags: ["gravitational-lensing", "einstein-ring", "space", "physics", "lattice", "sci-fi-floor"] },
|
|
80
|
+
{ key: "conformalGrid", name: "Conformal Grid", description: "A square lattice pulled through ideal-flow potentials (spinning cylinder, vortex, source-sink); colour is flow speed and dye rides the streamlines. Use for science and tech scenes.", tags: ["conformal-map", "potential-flow", "streamlines", "magnus-effect", "fluid", "science"] },
|
|
81
|
+
{ key: "truchetGrid", name: "Truchet Grid", description: "Smith quarter-circle Truchet tiles forming endless two-coloured loops; tiles turn to re-route the paths and comets travel them. Use for playful, retro and generative floors.", tags: ["truchet", "tiling", "loops", "generative", "retro", "maze"] },
|
|
82
|
+
{ key: "phyllotaxisGrid", name: "Phyllotaxis Grid", description: "Vogel sunflower florets at the golden angle, lit domes coloured by age, each carrying one of 21 marks opened by bloom rings. Use for organic, botanical and premium floors.", tags: ["phyllotaxis", "golden-angle", "sunflower", "fibonacci", "voronoi", "organic"] },
|
|
83
|
+
{ key: "parastichyGrid", name: "Parastichy Grid", description: "The sunflower's crossed Fibonacci spirals (21 × 13, cut into triangles by the 8-family) as a grid, with light running inward. Use for organic and sacred-geometry scenes.", tags: ["parastichy", "fibonacci", "spirals", "golden-angle", "sacred-geometry", "organic"] },
|
|
84
|
+
{ key: "apollonianGrid", name: "Apollonian Grid", description: "An Apollonian gasket of tangent circles built by circle inversion, re-balanced by a slow Möbius flow. Use for jewel-like, mathematical and luxury scenes.", tags: ["apollonian-gasket", "circle-inversion", "fractal", "mobius", "jewel", "mathematical"] },
|
|
85
|
+
{ key: "hilbertGrid", name: "Hilbert Grid", description: "A closed Moore curve (four Hilbert curves) threading every cell, with glowing data signals circulating along it. Use for tech, data and circuit floors.", tags: ["hilbert-curve", "space-filling-curve", "moore-curve", "data", "circuit", "tech-floor"] },
|
|
86
|
+
],
|
|
87
|
+
light: [
|
|
88
|
+
{ key: "directional", legacyId: "63e7a86b-6a6f-11f1-8573-00163e32d101", name: "directional", description: "Parallel rays from one direction (like the sun). Use for sunlight, moonlight, key light.", tags: ["directional", "sunlight", "moonlight", "key-light", "parallel"] },
|
|
89
|
+
{ key: "fluorescentTube", legacyId: "17bbdfdc-1718-4caf-8123-f8fb85ff1dee", name: "fluorescent", description: "A fluorescent tube", tags: [] },
|
|
90
|
+
{ key: "ledArray", legacyId: "40544400-910b-4b96-b098-f733e0e2b1a1", name: "Led", description: "A let array", tags: [] },
|
|
91
|
+
{ key: "lightBulb", legacyId: "07365d40-5914-4185-8823-a53b69710742", name: "light bulb", description: "A bulb mesh with point light init", tags: [] },
|
|
92
|
+
{ key: "point", legacyId: "640811a5-6a6f-11f1-8573-00163e32d101", name: "point", description: "Omnidirectional light from a single point. Use for bulbs, lamps, candles, fires.", tags: ["point", "bulb", "lamp", "candle", "omni", "omnidirectional"] },
|
|
93
|
+
{ key: "spot", legacyId: "642839df-6a6f-11f1-8573-00163e32d101", name: "spot", description: "Cone-shaped beam from a point. Use for flashlights, stage spotlights, headlights, focused beams.", tags: ["spot", "spotlight", "flashlight", "beam", "cone-light", "headlight", "stage-light"] },
|
|
94
|
+
{ key: "spotBeam", legacyId: "1960e9ac-721d-47b6-8c78-820e4d624bf9", name: "Spot Beam", description: "Spot beam with beautiful configurable beams and light effect", tags: [] },
|
|
95
|
+
{ key: "ambient", name: "Ambient Light", description: "Even light from every direction with no source and no shadows. Use to lift dark areas or set an overall tint; pair with a key light.", tags: ["ambient", "fill", "global", "soft"] },
|
|
96
|
+
{ key: "candle", name: "Candle", description: "A candle with a flickering flame that casts warm, moving light on its surroundings. Use for cosy, intimate and night scenes.", tags: ["candle", "flame", "warm", "flicker", "cosy", "night"] },
|
|
97
|
+
],
|
|
98
|
+
environment: [
|
|
99
|
+
{ key: "rain", legacyId: "69ddf885-6a6f-11f1-8573-00163e32d101", name: "Rain", description: "Rain streaks falling through the object's volume, pushed sideways by the wind and scattered by turbulence. Use for rainy, moody and weather scenes.", tags: ["rain", "weather", "precipitation", "water", "storm"], transform: { scale: [100, 100, 100] } },
|
|
100
|
+
{ key: "snow", name: "Snow", description: "Snowfall with physical flakes: size-dependent terminal fall, helical flutter and tumbling dendrite crystals that glint in the sun, swept by travelling gusts and snow bands. The cursor is a gust, a shelter or a warm hand. Use for winter and weather scenes.", tags: ["snow", "winter", "weather", "flakes", "blizzard", "cold"], transform: { scale: [100, 40, 100] } },
|
|
101
|
+
{ key: "sandstorm", name: "Sandstorm", description: "A haboob: billowing dust under a scale-height profile, gust fronts that roll downwind as towering walls, and saltating grains streaking along the ground, lit by forward-scattered sun. The cursor is a windbreak, a dust devil or a gust. Use for desert, ash and Mars scenes.", tags: ["sandstorm", "desert", "dust", "haboob", "weather", "wind"], transform: { scale: [150, 50, 150] } },
|
|
102
|
+
{ key: "rainbow", name: "Rainbow", description: "A single physical rainbow on its own: water dispersion and an Airy profile with supernumerary fringes, centred opposite the sun and seen through the object’s volume. The cursor sprays, clears or polarises it. Use for after-rain and hopeful scenes.", tags: ["rainbow", "optics", "sky", "weather", "dispersion", "interactive"], transform: { scale: [240, 90, 240] } },
|
|
103
|
+
{ key: "tornado", name: "Tornado", description: "A standalone tornado as a Rankine vortex: a condensation funnel on a wandering, rope-like axis with helical streaks that wind by differential rotation and climb on the updraft, and ground dust spiralling in and swirling up a sheath around it. The cursor steers it, feeds it or bends it with a gust. Use for storm and drama scenes.", tags: ["tornado", "twister", "vortex", "storm", "weather", "wind"], transform: { scale: [160, 90, 160] } },
|
|
104
|
+
{ key: "thunderstorm", name: "Thunderstorm", description: "A thunderstorm without the rain (rain is its own object): dark storm curtains drifting on the wind, and lightning arriving as a Poisson process of multi-stroke flashes that light the curtains and the whole scene. The cursor calls a strike or clears the murk. Use for storm, noir and dramatic scenes.", tags: ["thunderstorm", "lightning", "storm", "weather", "dramatic"], transform: { scale: [140, 60, 140] } },
|
|
105
|
+
],
|
|
106
|
+
gallery: [
|
|
107
|
+
{ key: "arc", legacyId: "68da2961-6a6f-11f1-8573-00163e32d101", name: "arc", description: "Frames along an arc segment. Use for partial-curve panoramas, theater-row layouts.", tags: ["arc", "curve", "partial-circle", "panorama", "theater"], config: { layout: "arc", radius: 3, arcAngle: 180, numImages: 8, geometryType: "none" } },
|
|
108
|
+
{ key: "box", legacyId: "68992683-6a6f-11f1-8573-00163e32d101", name: "box", description: "Frames mounted on the inside or outside faces of a cube. Use for room-like installations.", tags: ["box", "cube", "cubic", "room", "six-sided"], config: { size: 4, layout: "box", geometryType: "none" } },
|
|
109
|
+
{ key: "circular", legacyId: "67b5fc4d-6a6f-11f1-8573-00163e32d101", name: "circular", description: "Frames arranged on a flat circle facing inward. Use for carousels, ceremonial arrangements.", tags: ["circular", "circle", "carousel", "ring-of-frames", "round"], config: { layout: "circular", radius: 3, numImages: 8, geometryType: "none" } },
|
|
110
|
+
{ key: "fan", legacyId: "6878e8dd-6a6f-11f1-8573-00163e32d101", name: "fan", description: "Frames fanned out from a common origin. Use for splayed-card layouts, paper-fan visuals.", tags: ["fan", "splay", "spread", "paper-fan"], config: { layout: "fan", radius: 3, arcAngle: 60, numImages: 5, geometryType: "none" } },
|
|
111
|
+
{ key: "helix", legacyId: "6837b8c7-6a6f-11f1-8573-00163e32d101", name: "helix", description: "Frames spiraling vertically like a DNA strand. Use for tall, twisting columns of images.", tags: ["helix", "twist", "spiral-column", "tall-spiral"], config: { layout: "helix", radius: 2, numImages: 16, rotations: 3, geometryType: "none", heightIncrement: 0.5 } },
|
|
112
|
+
{ key: "horizontal", legacyId: "67755522-6a6f-11f1-8573-00163e32d101", name: "horizontal", description: "Single horizontal line of frames. Use for film strips, timelines, horizontal showcases.", tags: ["horizontal", "row", "strip", "line", "timeline"], config: { layout: "horizontal", spacing: 1.5, numImages: 8, geometryType: "none" } },
|
|
113
|
+
{ key: "pyramid", legacyId: "685868c7-6a6f-11f1-8573-00163e32d101", name: "pyramid", description: "Layered tapering layout, wide at the base. Use for hierarchies, leaderboards, monuments.", tags: ["pyramid", "tiered", "hierarchy", "monument", "tapered"], config: { layers: 4, layout: "pyramid", spacing: 1.2, geometryType: "none" } },
|
|
114
|
+
{ key: "random", legacyId: "693be3c0-6a6f-11f1-8573-00163e32d101", name: "random", description: "Fully random positions and rotations. Use for fully unpredictable arrangements.", tags: ["random", "unpredictable", "chaos"], config: { bounds: 5, layout: "random", numImages: 12, geometryType: "none" } },
|
|
115
|
+
{ key: "scattered", legacyId: "673449be-6a6f-11f1-8573-00163e32d101", name: "scattered", description: "Randomly positioned frames within a bounded volume. Use for organic or chaotic arrangements.", tags: ["scattered", "random", "chaotic", "organic"], config: { bounds: 5, layout: "scattered", numImages: 12, geometryType: "none" } },
|
|
116
|
+
{ key: "sphere", legacyId: "68b9a578-6a6f-11f1-8573-00163e32d101", name: "sphere", description: "Frames distributed on a sphere's surface. Use for planetarium-like or 360 layouts.", tags: ["sphere", "planetarium", "360", "spherical-shell"], config: { layout: "sphere", radius: 3, numImages: 12, geometryType: "none" } },
|
|
117
|
+
{ key: "spiral", legacyId: "67d66db1-6a6f-11f1-8573-00163e32d101", name: "spiral", description: "Frames following a flat or 3D spiral. Use for dramatic, hypnotic, fibonacci-like layouts.", tags: ["spiral", "fibonacci", "swirl", "hypnotic"], config: { layout: "spiral", radius: 3, numImages: 16, rotations: 2, geometryType: "none", heightIncrement: 0.3 } },
|
|
118
|
+
{ key: "tiles", legacyId: "6754c10f-6a6f-11f1-8573-00163e32d101", name: "tiles", description: "Grid of evenly-spaced rows and columns. Default arrangement - neat and predictable.", tags: ["tiles", "grid", "rows", "columns", "matrix", "wall"], config: { layout: "tiles", columns: 4, spacing: 1.2, geometryType: "none" } },
|
|
119
|
+
{ key: "tunnel", legacyId: "68172ccd-6a6f-11f1-8573-00163e32d101", name: "tunnel", description: "Frames forming a cylindrical tunnel the camera can fly through. Use for immersive walk-throughs.", tags: ["tunnel", "cylinder-of-frames", "fly-through", "immersive"], config: { depth: 8, layout: "tunnel", radius: 3, numImages: 12, geometryType: "none" } },
|
|
120
|
+
{ key: "tunnelPyramid", legacyId: "68fadd52-6a6f-11f1-8573-00163e32d101", name: "tunnelPyramid", description: "A tunnel layout where each ring tapers - pyramid-shaped tunnel.", tags: ["tunnel-pyramid", "tapered-tunnel", "cone-tunnel"], config: { depth: 8, layout: "tunnelPyramid", radius: 3, numImages: 12, scaleFactor: 0.7, geometryType: "none" } },
|
|
121
|
+
{ key: "tunnelWave", legacyId: "691b51a2-6a6f-11f1-8573-00163e32d101", name: "tunnelWave", description: "A tunnel layout where the rings undulate - wavy tunnel.", tags: ["tunnel-wave", "wavy-tunnel", "rippling-tunnel"], config: { depth: 8, layout: "tunnelWave", radius: 3, amplitude: 0.5, frequency: 1, numImages: 12, geometryType: "none" } },
|
|
122
|
+
{ key: "vertical", legacyId: "6795bf88-6a6f-11f1-8573-00163e32d101", name: "vertical", description: "Single vertical line of frames. Use for stacked feeds, scrolling columns, totem layouts.", tags: ["vertical", "column", "stack", "totem", "feed"], config: { layout: "vertical", spacing: 1.5, numImages: 8, geometryType: "none" } },
|
|
123
|
+
{ key: "wave", legacyId: "67f698ab-6a6f-11f1-8573-00163e32d101", name: "wave", description: "Frames following a sinusoidal undulating surface. Use for flowing, ocean-like layouts.", tags: ["wave", "undulating", "sinusoidal", "flowing", "ocean"], config: { layout: "wave", spacing: 1.5, amplitude: 1, frequency: 1, numImages: 10, geometryType: "none" } },
|
|
124
|
+
],
|
|
125
|
+
effect: [
|
|
126
|
+
{ key: "aura", legacyId: "64899c43-6a6f-11f1-8573-00163e32d101", name: "aura", description: "Soft pulsing glow shell around the object. Use for magical, mystical, holy effects.", tags: ["aura", "glow", "halo", "magical", "mystical", "holy", "energy-field"] },
|
|
127
|
+
{ key: "aurora", legacyId: "658e490f-6a6f-11f1-8573-00163e32d101", name: "aurora", description: "Flowing color ribbons (northern lights). Use for polar, atmospheric, magical-curtain effects.", tags: ["aurora", "northern-lights", "borealis", "ribbons", "polar", "curtain"] },
|
|
128
|
+
{ key: "blackHole", legacyId: "65ef19e3-6a6f-11f1-8573-00163e32d101", name: "blackHole", description: "A ray-traced Schwarzschild black hole: gravitational lensing, photon ring and a Doppler-beamed accretion disk with relativistic jets. Use for space, gravity and cosmic scenes.", tags: ["black-hole", "gravitational-lensing", "accretion-disk", "relativity", "space", "cosmic", "singularity"] },
|
|
129
|
+
{ key: "bubbles", legacyId: "6691dc69-6a6f-11f1-8573-00163e32d101", name: "bubbles", description: "Rising translucent spheres that pop. Use for underwater scenes, carbonation, magical effects.", tags: ["bubbles", "underwater", "carbonation", "magical", "rising-spheres"] },
|
|
130
|
+
{ key: "constellation", legacyId: "64ca584a-6a6f-11f1-8573-00163e32d101", name: "constellation", description: "Orbiting stars connected by faint lines, twinkling. Use for space, cosmic, network visuals.", tags: ["constellation", "stars", "network", "cosmic", "connections", "twinkle"] },
|
|
131
|
+
{ key: "dandelionSeeds", legacyId: "30699f79-a7cb-4467-9be9-a62f383865ea", name: "dandelionSeeds", description: "Dandelion seeds let go of the head one by one and drift away: a high-drag pappus gives them a slow terminal fall, and curl-noise wind with updrafts carries them. Use for meadow, summer, wish, gentle scenes.", tags: ["dandelion", "seeds", "wind", "pappus", "drift", "nature", "summer", "delicate"] },
|
|
132
|
+
{ key: "dataStream", legacyId: "64aa0aa2-6a6f-11f1-8573-00163e32d101", name: "dataStream", description: "Spiraling particle stream flowing inward or outward. Use for sci-fi tech, energy flow, data viz.", tags: ["data-stream", "spiral", "flow", "sci-fi", "energy-flow", "particles"] },
|
|
133
|
+
{ key: "dnaHelix", legacyId: "652ba4dc-6a6f-11f1-8573-00163e32d101", name: "dnaHelix", description: "Double/triple strand helix of particles. Use for biology, genetics, twisted-strand visuals.", tags: ["dna", "helix", "genetics", "biology", "double-helix", "strand"] },
|
|
134
|
+
{ key: "fallingLeaves", legacyId: "6e3021e3-e8ca-425b-9a25-87f9c275bede", name: "fallingLeaves", description: "Leaves drifting past the object, each one integrating the Andersen-Pesavento-Wang falling-plate equations, so they flutter, glide and tumble like real leaves.", tags: ["leaves", "autumn", "falling", "flutter", "tumble", "aerodynamics", "nature", "wind"] },
|
|
135
|
+
{ key: "fieldLines", legacyId: "b13bcdc8-604d-4f92-87a2-4720ddbfd0c7", name: "fieldLines", description: "Analytic magnetic dipole field lines around the object, with trapped particles bouncing between mirror points like the Van Allen belts. Use for sci-fi planets, energy cores, magnetism.", tags: ["magnetic-field", "dipole", "field-lines", "magnetosphere", "plasma", "sci-fi", "planet"] },
|
|
136
|
+
{ key: "fire", legacyId: "6713eed1-6a6f-11f1-8573-00163e32d101", name: "fire", description: "Flame particles rising upward with hot-to-cool color gradient. Use for fire, torches, flames.", tags: ["fire", "flame", "torch", "burning", "flames", "hot"] },
|
|
137
|
+
{ key: "fireflySwarm", legacyId: "597b83ee-029f-4773-a99b-c1a1c972077d", name: "fireflySwarm", description: "Kuramoto-coupled fireflies drifting on a divergence-free flow: random blinking slowly locks into sync, with ripples of light rolling through the swarm. Use for night, garden, forest, magical scenes.", tags: ["fireflies", "synchrony", "kuramoto", "night", "glow", "swarm", "nature", "magic"] },
|
|
138
|
+
{ key: "flares", legacyId: "66f35ba4-6a6f-11f1-8573-00163e32d101", name: "flares", description: "Radiating lens flares with glow. Use for bright lights, magical shines, cinematic effects.", tags: ["flares", "lens-flare", "glow", "bright", "cinematic", "shines"] },
|
|
139
|
+
{ key: "forcefield", legacyId: "65ae8d09-6a6f-11f1-8573-00163e32d101", name: "forcefield", description: "Hex-pattern energy shield around the object. Use for shields, barriers, sci-fi protection.", tags: ["forcefield", "shield", "barrier", "hex-grid", "protection", "energy-shield"] },
|
|
140
|
+
{ key: "galaxy", legacyId: "f350de8e-9e27-4a98-a72f-585d3755ae18", name: "galaxy", description: "A spiral galaxy from density-wave theory: nested elliptical orbits twist into arms, lit by young blue stars, dust lanes and a warm bulge. Use for space, cosmic, sci-fi scenes.", tags: ["galaxy", "spiral-arms", "density-wave", "stars", "space", "cosmic", "milky-way"] },
|
|
141
|
+
{ key: "glyphs", legacyId: "66b20df3-6a6f-11f1-8573-00163e32d101", name: "glyphs", description: "Floating symbols or runes circling the object. Use for magic, arcane, mystical effects.", tags: ["glyphs", "runes", "magic", "arcane", "mystical", "floating-symbols"] },
|
|
142
|
+
{ key: "harmonicShell", legacyId: "a8b1296d-6a22-4bf3-98ff-6183b0d9ae62", name: "harmonicShell", description: "An iridescent soap-film shell shaped by morphing spherical harmonics, with glowing nodal lines. Use for energy shields, magic, vibration, organic sci-fi.", tags: ["spherical-harmonics", "iridescent", "thin-film", "shell", "cymatics", "shield", "bubble"] },
|
|
143
|
+
{ key: "hologram", legacyId: "64eafe9e-6a6f-11f1-8573-00163e32d101", name: "hologram", description: "Scanline + glitch overlay. Use for futuristic UI, projections, sci-fi displays.", tags: ["hologram", "scanline", "glitch", "sci-fi", "projection", "futuristic", "display"] },
|
|
144
|
+
{ key: "iceCrystals", legacyId: "660ff268-6a6f-11f1-8573-00163e32d101", name: "iceCrystals", description: "Six-fold snow crystals grow as frost on the object, from hexagonal plates to feathery dendrites, with facets that glint and drifting diamond dust. Use for winter, frost, cold magic.", tags: ["ice", "snowflake", "frost", "dendrite", "crystal", "winter", "diamond-dust"] },
|
|
145
|
+
{ key: "iceHalo", legacyId: "071f0dd3-708e-448c-817f-3f05348f788c", name: "iceHalo", description: "Atmospheric ice optics around the object as a light source: a dispersed 22° halo, sun dogs, a parhelic circle and a light pillar. Use for cold skies, suns, lamps, magic light.", tags: ["halo", "ice-crystals", "sun-dog", "parhelion", "refraction", "atmosphere", "winter", "light"] },
|
|
146
|
+
{ key: "lichtenberg", legacyId: "529f0fbe-1f82-465c-b435-0464c655c9ef", name: "lichtenberg", description: "A Lichtenberg figure grown by the dielectric breakdown model: a glowing fern of electricity creeps over the surface, holds, fades and regrows. Use for energy, sci-fi, power and lightning scenes.", tags: ["lichtenberg", "lightning", "electric", "dielectric-breakdown", "fractal", "branching", "energy", "sci-fi"] },
|
|
147
|
+
{ key: "lightning", legacyId: "656dd599-6a6f-11f1-8573-00163e32d101", name: "lightning", description: "Branching electric bolts striking the object. Use for storms, electricity, tesla effects.", tags: ["lightning", "electric", "bolt", "tesla", "storm", "spark", "electricity"] },
|
|
148
|
+
{ key: "molecules", legacyId: "6448c429-6a6f-11f1-8573-00163e32d101", name: "molecules", description: "A molecule drawn as quantum electron clouds: hydrogen orbitals that morph from 1s to 4f, ligands arranged by the Thomson problem and bonding density. Use for chemistry, science, atomic visuals.", tags: ["molecule", "atomic-orbitals", "electron-cloud", "quantum", "chemistry", "vsepr", "science"] },
|
|
149
|
+
{ key: "murmuration", legacyId: "0836c9fa-2db8-4322-a4d0-8828408fcd92", name: "murmuration", description: "A starling murmuration: thousands of boids with topological neighbours swirl around a drifting roost, folding into dense, wave-like sheets. Use for dusk, wildlife, flocking, atmospheric scenes.", tags: ["birds", "flock", "boids", "murmuration", "starlings", "swarm", "nature", "dusk"] },
|
|
150
|
+
{ key: "neuralNetwork", legacyId: "65ced02b-6a6f-11f1-8573-00163e32d101", name: "neuralNetwork", description: "Pulsing nodes connected by signal lines. Use for AI, brain, network visualizations.", tags: ["neural-network", "brain", "ai", "nodes", "synapses", "network"] },
|
|
151
|
+
{ key: "orb", legacyId: "654c4539-6a6f-11f1-8573-00163e32d101", name: "orb", description: "Glowing sphere with layered shells and corona. Use for energy balls, plasma, magical orbs.", tags: ["orb", "energy-ball", "plasma", "glow-sphere", "magical-sphere"] },
|
|
152
|
+
{ key: "planetaryRings", legacyId: "2aa62adc-1e85-42fc-890b-0245225e8a3a", name: "planetaryRings", description: "A Saturn-like ring system: Keplerian shear shapes icy clumps, resonant moons open gaps and spiral density waves, and the planet casts a soft shadow. Use for planets, sci-fi, space scenes.", tags: ["rings", "saturn", "planet", "kepler", "resonance", "density-wave", "space", "ice"] },
|
|
153
|
+
{ key: "portal", legacyId: "650b5518-6a6f-11f1-8573-00163e32d101", name: "portal", description: "A wormhole funnel shaped like Flamm's paraboloid: a lensed view into another universe, Keplerian swirl and infalling, blueshifting matter. Use for portals, sci-fi gates, rifts.", tags: ["portal", "wormhole", "gravitational-lensing", "rift", "vortex", "sci-fi", "gate"] },
|
|
154
|
+
{ key: "shockwave", legacyId: "64691d20-6a6f-11f1-8573-00163e32d101", name: "shockwave", description: "A Sedov–Taylor blast wave: a razor-bright front over a compressed shell that bursts out, slows and cools, raising dust and a brief condensation dome. Use for explosions, impacts, sci-fi pulses.", tags: ["shockwave", "blast-wave", "explosion", "sedov-taylor", "impact", "pulse", "dust"] },
|
|
155
|
+
{ key: "smokeRibbon", legacyId: "71b9euh8-6a6f-gu85-8573-00163e32d101", name: "smoke ribbon", description: "Smoke ribbon effect ", tags: ["smoke"] },
|
|
156
|
+
{ key: "smokePlume", legacyId: "663032c6-6a6f-11f1-8573-00163e32d101", name: "smokePlume", description: "A buoyant plume following Morton-Taylor-Turner theory, with curl-noise billows, lit puffs and an optional hot base and crosswind. Use for chimneys, fires, volcanoes, engines.", tags: ["smoke", "plume", "billow", "chimney", "volcano", "turbulence", "fire-smoke"] },
|
|
157
|
+
{ key: "smokeRing", legacyId: "6670f97d-6a6f-11f1-8573-00163e32d101", name: "smokeRing", description: "Physically simulated vortex rings: smoke spins around each core, rings slow as they grow, wobble with age, and pairs leapfrog through each other. Use for cannons, dragons, magic, calm loops.", tags: ["smoke-ring", "vortex-ring", "leapfrog", "fluid", "cannon", "dragon-breath", "vapor"] },
|
|
158
|
+
{ key: "sparklesBurst", legacyId: "66d2768f-6a6f-11f1-8573-00163e32d101", name: "sparklesBurst", description: "Exploding burst of sparkling particles. Use for magical impacts, celebrations, starbursts.", tags: ["sparkles", "burst", "explosion", "celebration", "starburst", "magic-impact"] },
|
|
159
|
+
{ key: "strangeAttractor", legacyId: "0f6a3028-30d9-42e6-be8f-094a83dfa6f3", name: "strangeAttractor", description: "Glowing trails of a Lorenz, Aizawa or Thomas strange attractor, integrated with RK4; neighbouring strands drift apart. Use for chaos, science, data art, energy.", tags: ["strange-attractor", "lorenz", "chaos", "butterfly-effect", "trails", "math-art", "sci-fi"] },
|
|
160
|
+
{ key: "volumetricFog", legacyId: "665099e0-6a6f-11f1-8573-00163e32d101", name: "volumetricFog", description: "Ray-marched ground fog around the object: domain-warped density, Beer-Lambert light, self-shadowing and forward scattering toward the light. Use for mist, swamps, mystery, dawn.", tags: ["fog", "mist", "volumetric", "raymarching", "atmosphere", "haze", "ground-fog"] },
|
|
161
|
+
{ key: "waterCaustics", legacyId: "057b1128-2007-4c4e-abed-a15432ad9a0e", name: "waterCaustics", description: "Sunlight refracted through a rippling water surface: Snell refraction focuses the light into a caustic web on the floor and over the object, with depth blur and chromatic fringes.", tags: ["caustics", "water", "refraction", "snell", "pool", "underwater", "light", "ripples"] },
|
|
162
|
+
],
|
|
163
|
+
particles: [
|
|
164
|
+
{ key: "bioluminescentWake", legacyId: "4745f1dc-293a-462c-af90-a65c4431dfbc", name: "bioluminescentWake", description: "Bioluminescent plankton that flash when the water shears: swell orbits, excitable cells that tire and recover, moon glitter; the cursor is a hand, falling pebbles or a hunting fish. Use for night sea and fantasy scenes.", tags: ["bioluminescence", "plankton", "ocean", "night", "excitable-medium", "waves", "water", "interactive"] },
|
|
165
|
+
{ key: "brownianDust", legacyId: "8403f5f9-288e-45f7-ac7a-eb5eb8e026a0", name: "brownianDust", description: "Dust drifting in window light: Langevin motion in Kolmogorov turbulence, mullion shadows, forward scattering, glints and bokeh; the cursor is a hand, a torch or a charged rod. Use for interiors and cinematic scenes.", tags: ["dust", "sunbeam", "god-rays", "brownian-motion", "turbulence", "bokeh", "interior", "interactive"] },
|
|
166
|
+
{ key: "chladniSand", legacyId: "e90f8357-35d1-4c8f-96e6-e0ef3deae93c", name: "chladniSand", description: "Sand on an invisible vibrating plate: resonant plate modes throw grains onto the nodal lines, drawing Chladni figures that form and re-form; the cursor bows, touches or taps the plate. Use for science, sound and abstract scenes.", tags: ["chladni", "cymatics", "sand", "standing-waves", "sound", "science", "interactive"] },
|
|
167
|
+
{ key: "electronOrbitals", legacyId: "231d241f-56df-41bd-8775-6b509dd7bcbc", name: "electronOrbitals", description: "A hydrogen electron cloud as Bohmian trajectories: a superposition of two orbitals breathing at the Bohr frequency, coloured by quantum phase; the cursor is a photon, a magnet or a detector. Use for science and tech scenes.", tags: ["quantum", "hydrogen", "orbital", "bohmian", "wavefunction", "atom", "science", "interactive"] },
|
|
168
|
+
{ key: "faradayPowder", legacyId: "50c6a7bf-a41d-49a4-833d-03a65eec2167", name: "faradayPowder", description: "Glowing powder on an invisible vibrating plate: acoustic streaming gathers it into swirling heaps at the antinodes, hotter where the plate moves most; the cursor bows, touches or taps the plate. Use for abstract, sound and fire-like scenes.", tags: ["faraday", "cymatics", "powder", "acoustic-streaming", "glow", "abstract", "interactive"] },
|
|
169
|
+
{ key: "grinderSparks", legacyId: "353bb96c-eb55-45d1-a1a3-d7a520551786", name: "grinderSparks", description: "Slow-motion grinder sparks: drag-limited ballistics, radiative cooling on the blackbody scale, carbon bursts, floor bounces and reflections; the cursor moves the grinder, aims the spray or sweeps the air. Use for industrial and cinematic scenes.", tags: ["sparks", "grinder", "metal", "blackbody", "industrial", "fire", "cinematic", "interactive"] },
|
|
170
|
+
{ key: "magneticBottle", legacyId: "bcd97785-b50c-4ad4-ad49-d7e10a8c90b1", name: "magneticBottle", description: "Charged particles woven over any mesh shape: counter-rotating constant-bearing spirals that tighten into glowing tips, in two exact family colours; the cursor pinches, drifts or heats the orbits. Use for sci-fi and tech scenes.", tags: ["magnetic-mirror", "plasma", "spiral", "vortex", "shapes", "physics", "sci-fi", "interactive"] },
|
|
171
|
+
{ key: "neonRain", legacyId: "510b1475-71fb-4670-97ee-9cc659597038", name: "neonRain", description: "Night rain lit by neon: Marshall–Palmer drops at terminal velocity, gusting sheets, splash crowns and rim drips, each drop lit like a tiny lens; the cursor is an umbrella, a gust or a headlight. Use for city, noir and cinematic scenes.", tags: ["rain", "neon", "night", "city", "splash", "weather", "cinematic", "interactive"] },
|
|
172
|
+
{ key: "shapeBurst", legacyId: "2843a44a-017f-48b3-bddb-1bc86d891d3b", name: "shapeBurst", description: "Bursts of charged particles that spiral out in a magnetic field and land exactly on a mesh shape, white-hot cooling to two family colours, then dissolve; the cursor detonates, curls or pulls them. Use for reveals, logos and impact moments.", tags: ["burst", "explosion", "reveal", "spirals", "shapes", "magnetic-field", "motion", "interactive"] },
|
|
173
|
+
{ key: "shapeFlow", legacyId: "b4387e34-4641-4731-bcf3-430b16fe53d7", name: "shapeFlow", description: "A wind tunnel of particle streams flowing round an invisible mesh shape: divergence-free flow, wake eddies, streaklines coloured by pressure; the cursor is a second obstacle, a jet or a vortex. Use for tech, aero and product scenes.", tags: ["flow", "wind-tunnel", "streamlines", "aerodynamics", "shapes", "fluid", "science", "interactive"] },
|
|
174
|
+
{ key: "tidalStream", legacyId: "2ecba95c-bb82-42cf-9400-94f53cc579fa", name: "tidalStream", description: "A spiral galaxy shredding dwarf satellites into tidal streams: symplectic orbits, density-wave arms, Doppler-shifted blackbody stars; the cursor is a subhalo, black hole or spectroscope. Use for space scenes.", tags: ["galaxy", "tidal-stream", "n-body", "gravitational-lensing", "black-hole", "doppler", "space", "interactive"] },
|
|
175
|
+
],
|
|
176
|
+
land: [
|
|
177
|
+
{ key: "mountains", name: "Mountains", description: "A placeable patch of mountain land: ridged, eroded peaks with slope rock and a snow line, easing down to its base at the edge. Footprint is the object's scale. Use for alpine backdrops, islands of peaks and dioramas.", tags: ["land", "terrain", "mountains", "peaks", "alpine", "landscape"], transform: { scale: [5, 1, 5] } },
|
|
178
|
+
{ key: "hills", name: "Hills", description: "A placeable patch of rolling hills: soft, domain-warped downland under grass and meadow, easing down to its base at the edge. Footprint is the object's scale. Use for countryside, parks and gentle dioramas.", tags: ["land", "terrain", "hills", "meadow", "countryside", "landscape"], transform: { scale: [5, 1, 5] } },
|
|
179
|
+
{ key: "dunes", name: "Dunes", description: "A placeable patch of sand dunes: asymmetric wind-driven ridges with gentle windward and steep slip faces, easing down to its base at the edge. Footprint is the object's scale. Use for desert spots, beaches and Mars scenes.", tags: ["land", "terrain", "dunes", "desert", "sand", "landscape"], transform: { scale: [5, 1, 5] } },
|
|
180
|
+
{ key: "canyon", name: "Canyon", description: "A placeable patch of canyon country: stratified mesas cut by a branching incised channel network, easing down to its base at the edge. Footprint is the object's scale. Use for red-rock deserts, western and Mars scenes.", tags: ["land", "terrain", "canyon", "mesa", "desert", "landscape"], transform: { scale: [5, 1, 5] } },
|
|
181
|
+
],
|
|
182
|
+
space: [
|
|
183
|
+
{ key: "earth", legacyId: "697c7295-6a6f-11f1-8573-00163e32d101", name: "earth", description: "Full earth component", tags: ["earth", "planet", "globe", "world"] },
|
|
184
|
+
{ key: "shootingStars", legacyId: "69bd554e-6a6f-11f1-8573-00163e32d101", name: "shootingStars", description: "Add shooting stars", tags: ["shooting", "stars", "meteors", "comets"] },
|
|
185
|
+
{ key: "solarSystem", legacyId: "699cc11f-6a6f-11f1-8573-00163e32d101", name: "solarSystem", description: "Sun, planets and moons", tags: ["solar", "system", "planets", "sun", "celestial"] },
|
|
186
|
+
{ key: "stars", legacyId: "695c418b-6a6f-11f1-8573-00163e32d101", name: "stars", description: "Stars scattered in the sky", tags: ["stars", "sky", "celestial", "night", "background"], transform: { scale: [500, 500, 500] }, material: { materialType: "particles" } },
|
|
187
|
+
],
|
|
188
|
+
text: [
|
|
189
|
+
{ key: "2dText", legacyId: "6e49e604-3007-4505-bd87-5e31b1393d94", name: "2d text", description: "2d 'bitmap' text", tags: ["text"], config: { text: "Hello", renderMode: "bitmap" } },
|
|
190
|
+
{ key: "3dText", legacyId: "992fe6fa-0d34-4d07-a600-0acee0c881fa", name: "3d text", description: "3d text", tags: ["text"], config: { text: "Hello", renderMode: "text3d" } },
|
|
191
|
+
{ key: "handwriting", name: "Handwriting", description: "A pen writes the text in single strokes, slowing in tight curves where the ink pools and drying from wet sheen to rest colour; a faint sheen drifts over the dry ink. Use for signatures, titles and invitations.", tags: ["handwriting", "ink", "pen", "stroke", "script", "signature", "text"] },
|
|
192
|
+
{ key: "neonTube", name: "Neon Tube", description: "Letter outlines as glass neon tubing: a gas discharge ignites each contour, stuttering before it settles into a steady hum with slow breathing and the odd micro-dip. Use for signs, nightlife and retro titles.", tags: ["neon", "tube", "glow", "sign", "outline", "retro", "text"] },
|
|
193
|
+
{ key: "fourierSketch", name: "Fourier Sketch", description: "Each letter is traced by a chain of rotating circles whose radii are its Fourier coefficients; more terms sharpen the form, and glints keep circling the finished contours. Use for science, math and generative titles.", tags: ["fourier", "epicycle", "circles", "sketch", "trace", "maths", "text"] },
|
|
194
|
+
{ key: "frostGrowth", name: "Frost Growth", description: "Dendritic hoarfrost nucleates in competing crystal grains on the letter outlines, each with its own six-fold lattice and bright boundary seams, then throws prismatic glints. Use for winter, cold-brand and fantasy titles.", tags: ["frost", "ice", "crystal", "dendrite", "winter", "cold", "hoarfrost"] },
|
|
195
|
+
{ key: "plasmaDischarge", name: "Plasma Discharge", description: "Electrical breakdown along the letter contours: a white-hot arc channel with a violet halo, fractal streamers forking outward, current pulses and breathing branches. Use for sci-fi, energy and tech titles.", tags: ["plasma", "electric", "lightning", "lichtenberg", "tesla", "discharge", "glow"] },
|
|
196
|
+
{ key: "burnAway", name: "Burn Away", description: "Letters cut from singed cream paper with smouldering embers; the erase is a combustion front travelling along the strokes leaving glowing edge, cracked char and ash. Use for dramatic reveals, titles and storytelling.", tags: ["paper", "burn", "fire", "ember", "char", "ash", "parchment", "dramatic"] },
|
|
197
|
+
{ key: "lightPainting", name: "Light Painting", description: "A long-exposure photograph of a handheld light writing in the dark: trail brightness follows 1/pen speed, colour cools from hot to warm, and a sparkler throws ballistic sparks. Use for night-photo titles, signatures and festive reveals.", tags: ["light-painting", "long-exposure", "sparkler", "handwriting", "night", "glow", "photo"] },
|
|
198
|
+
{ key: "constellation", name: "Constellation", description: "Pen strokes become a planetarium star plate: blackbody-coloured stars with Kepler binaries, tapered chart lines and faint dust stars. Use for space, astronomy, night-sky and elegant title cards.", tags: ["constellation", "stars", "star-chart", "binary-star", "astronomy", "night-sky", "planetarium", "space"] },
|
|
199
|
+
{ key: "inkBleed", name: "Ink Bleed", description: "Fountain-pen ink soaking into fibrous paper: a wetting front feathers along the fibres, dye separates into a coloured fringe and dries to a darker rim. Use for letters, journals and artisanal titles.", tags: ["ink", "bleed", "paper", "fountain-pen", "handwriting", "calligraphy", "organic"] },
|
|
200
|
+
{ key: "liquidMetal", name: "Liquid Metal", description: "Letters as puddles of mercury: a surface-tension meniscus mirrors a drifting studio with Fresnel chrome reflections and slow ripples. Use for premium logos, tech and product titles.", tags: ["metal", "chrome", "mercury", "liquid", "reflection", "fresnel", "luxury"] },
|
|
201
|
+
{ key: "embroidery", name: "Embroidery", description: "Hand-embroidered lettering that picks satin, stem stitch, couching and French knots per stroke, with silk thread sheen under a moving light on puckered linen. Use for monograms, heritage brands and textile titles.", tags: ["embroidery", "satin-stitch", "thread", "silk", "textile", "sewing", "stitch"] },
|
|
202
|
+
{ key: "chalkboard", name: "Chalkboard", description: "Single-stroke chalk on slate: pressure-dependent deposit on a fixed grainy board with powdery halo, falling dust at the pen and a felt-smudge erase leaving ghosts. Use for classrooms, menus and hand-made titles.", tags: ["chalk", "chalkboard", "slate", "handwriting", "classroom", "dust", "smudge", "grain"] },
|
|
203
|
+
],
|
|
204
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface CatalogObjectType {
|
|
2
|
+
id: string;
|
|
3
|
+
objectTypeName: string;
|
|
4
|
+
description: string;
|
|
5
|
+
defaultVariant: string | null;
|
|
6
|
+
iconName: string;
|
|
7
|
+
order: number;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface CatalogObjectVariant {
|
|
11
|
+
id: string;
|
|
12
|
+
/** Permanent: what scenes store in config.type / shapeType / layout. */
|
|
13
|
+
key: string;
|
|
14
|
+
objectTypeId: string;
|
|
15
|
+
objectTypeName: string;
|
|
16
|
+
/** Display name. */
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
tags: string[];
|
|
20
|
+
/** Other names it was known by (the DB catalog's names), for old callers like the v2 AI. */
|
|
21
|
+
aliases?: string[];
|
|
22
|
+
defaultSettings: {
|
|
23
|
+
config: Record<string, unknown>;
|
|
24
|
+
transform?: Record<string, unknown>;
|
|
25
|
+
material?: Record<string, unknown>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Every type and variant. Built once; treat the result as read-only. */
|
|
29
|
+
export declare function objectCatalog(): {
|
|
30
|
+
types: CatalogObjectType[];
|
|
31
|
+
variants: CatalogObjectVariant[];
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=objectCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectCatalog.d.ts","sourceRoot":"","sources":["../../src/catalog/objectCatalog.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACjI;AAuBD,yEAAyE;AACzE,wBAAgB,aAAa,IAAI;IAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAuDhG"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// objectCatalog — every object type and variant, from the registry
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// The one list the studio's Add menu and the AI read. It holds no data of its
|
|
6
|
+
// own: variants come from the registry's defaults tables (a key added there shows
|
|
7
|
+
// up here), words and starting transform / material from ./catalogInfo.
|
|
8
|
+
//
|
|
9
|
+
// registry families effect, particles, grid, light, environment, space, text
|
|
10
|
+
// → one variant per key of the defaults table (config = that default)
|
|
11
|
+
// curated families mesh, gallery → the entries in catalogInfo (configs there); text is both: its curated 2d / 3d
|
|
12
|
+
// entries (they carry a config) stay, then one variant per animated look in the registry
|
|
13
|
+
// no variants group, model, path
|
|
14
|
+
//
|
|
15
|
+
// Output keeps the shapes the client already uses (ObjectTypeItem /
|
|
16
|
+
// ObjectVariantItem), plus a permanent `key` on each variant.
|
|
17
|
+
import { DEFAULT_GENERATIVE_EFFECTS, GENERATIVE_EFFECT_LABELS } from '../data/effectsDefaults.js';
|
|
18
|
+
import { DEFAULT_GENERATIVE_PARTICLES, GENERATIVE_PARTICLES_LABELS } from '../data/particlesDefaults.js';
|
|
19
|
+
import { DEFAULT_GRIDS, GRID_LABELS } from '../data/gridsDefaults.js';
|
|
20
|
+
import { DEFAULT_LIGHTS, LIGHT_LABELS } from '../data/lightsDefaults.js';
|
|
21
|
+
import { DEFAULT_SPACE_OBJECTS, SPACE_OBJECT_LABELS } from '../data/spaceDefaults.js';
|
|
22
|
+
import { DEFAULT_ENVIRONMENT_OBJECTS, ENVIRONMENT_OBJECT_LABELS } from '../data/environmentDefaults.js';
|
|
23
|
+
import { DEFAULT_LAND_OBJECTS, LAND_OBJECT_LABELS } from '../data/landDefaults.js';
|
|
24
|
+
import { DEFAULT_TEXT_OBJECTS, TEXT_OBJECT_LABELS } from '../data/textDefaults.js';
|
|
25
|
+
import { CATALOG_TYPES, CATALOG_VARIANTS } from './catalogInfo.js';
|
|
26
|
+
/** Families whose variants ARE the keys of a registry defaults table. */
|
|
27
|
+
const REGISTRY_FAMILIES = {
|
|
28
|
+
effect: { defaults: DEFAULT_GENERATIVE_EFFECTS, labels: GENERATIVE_EFFECT_LABELS },
|
|
29
|
+
particles: { defaults: DEFAULT_GENERATIVE_PARTICLES, labels: GENERATIVE_PARTICLES_LABELS },
|
|
30
|
+
grid: { defaults: DEFAULT_GRIDS, labels: GRID_LABELS },
|
|
31
|
+
light: { defaults: DEFAULT_LIGHTS, labels: LIGHT_LABELS },
|
|
32
|
+
space: { defaults: DEFAULT_SPACE_OBJECTS, labels: SPACE_OBJECT_LABELS },
|
|
33
|
+
environment: { defaults: DEFAULT_ENVIRONMENT_OBJECTS, labels: ENVIRONMENT_OBJECT_LABELS },
|
|
34
|
+
land: { defaults: DEFAULT_LAND_OBJECTS, labels: LAND_OBJECT_LABELS },
|
|
35
|
+
text: { defaults: DEFAULT_TEXT_OBJECTS, labels: TEXT_OBJECT_LABELS, keepCurated: true },
|
|
36
|
+
};
|
|
37
|
+
/** 'paw print' → 'Paw Print', 'tunnelPyramid' → 'Tunnel Pyramid'. */
|
|
38
|
+
const titleCase = (s) => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/(^|\s)\S/g, c => c.toUpperCase());
|
|
39
|
+
const clone = (v) => JSON.parse(JSON.stringify(v));
|
|
40
|
+
let cache = null;
|
|
41
|
+
/** Every type and variant. Built once; treat the result as read-only. */
|
|
42
|
+
export function objectCatalog() {
|
|
43
|
+
if (cache)
|
|
44
|
+
return cache;
|
|
45
|
+
const types = [...CATALOG_TYPES]
|
|
46
|
+
.sort((a, b) => a.order - b.order)
|
|
47
|
+
.map(t => ({
|
|
48
|
+
id: t.legacyId ?? t.key,
|
|
49
|
+
objectTypeName: t.key,
|
|
50
|
+
description: t.description,
|
|
51
|
+
defaultVariant: t.defaultVariant ?? null,
|
|
52
|
+
iconName: t.icon,
|
|
53
|
+
order: t.order,
|
|
54
|
+
enabled: t.enabled,
|
|
55
|
+
}));
|
|
56
|
+
const typeId = new Map(types.map(t => [t.objectTypeName, t.id]));
|
|
57
|
+
const variants = [];
|
|
58
|
+
const push = (type, key, name, info, config) => {
|
|
59
|
+
variants.push({
|
|
60
|
+
id: info?.legacyId ?? `${type}/${key}`,
|
|
61
|
+
key,
|
|
62
|
+
objectTypeId: typeId.get(type) ?? type,
|
|
63
|
+
objectTypeName: type,
|
|
64
|
+
name,
|
|
65
|
+
description: info?.description ?? name,
|
|
66
|
+
tags: info?.tags ?? [],
|
|
67
|
+
...(info?.name && info.name !== name && info.name !== key ? { aliases: [info.name] } : {}),
|
|
68
|
+
defaultSettings: {
|
|
69
|
+
config: clone(config),
|
|
70
|
+
...(info?.transform ? { transform: clone(info.transform) } : {}),
|
|
71
|
+
...(info?.material ? { material: clone(info.material) } : {}),
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
for (const t of types) {
|
|
76
|
+
const type = t.objectTypeName;
|
|
77
|
+
const infos = CATALOG_VARIANTS[type] ?? [];
|
|
78
|
+
const infoBy = new Map(infos.map(i => [i.key, i]));
|
|
79
|
+
const family = REGISTRY_FAMILIES[type];
|
|
80
|
+
if (family) {
|
|
81
|
+
if (family.keepCurated)
|
|
82
|
+
for (const info of infos)
|
|
83
|
+
if (info.config && !(info.key in family.defaults))
|
|
84
|
+
push(type, info.key, titleCase(info.name), info, info.config);
|
|
85
|
+
// Catalog order first (what was curated), then any key only the registry has.
|
|
86
|
+
const keys = [...infos.map(i => i.key).filter(k => k in family.defaults),
|
|
87
|
+
...Object.keys(family.defaults).filter(k => !infoBy.has(k))];
|
|
88
|
+
for (const key of keys) {
|
|
89
|
+
push(type, key, family.labels[key] ?? titleCase(infoBy.get(key)?.name ?? key), infoBy.get(key), family.defaults[key]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
for (const info of infos)
|
|
94
|
+
push(type, info.key, titleCase(info.name), info, info.config ?? {});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
cache = { types, variants };
|
|
98
|
+
return cache;
|
|
99
|
+
}
|
|
@@ -91,7 +91,7 @@ const materials = {
|
|
|
91
91
|
'Product visualization',
|
|
92
92
|
'Outdoor environments and terrain',
|
|
93
93
|
],
|
|
94
|
-
textureProperties: ['map', 'normalMap', 'bumpMap', 'aoMap', 'alphaMap', 'displacementMap', 'envMap'],
|
|
94
|
+
textureProperties: ['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'bumpMap', 'aoMap', 'alphaMap', 'displacementMap', 'emissiveMap', 'envMap'],
|
|
95
95
|
defaultSettings: {
|
|
96
96
|
color: "#ffffff",
|
|
97
97
|
roughness: 0.5,
|
|
@@ -131,7 +131,7 @@ const materials = {
|
|
|
131
131
|
'High-end product visualization',
|
|
132
132
|
'Photorealistic rendering',
|
|
133
133
|
],
|
|
134
|
-
textureProperties: ['map', 'normalMap', 'alphaMap', 'envMap'],
|
|
134
|
+
textureProperties: ['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'bumpMap', 'aoMap', 'alphaMap', 'displacementMap', 'emissiveMap', 'envMap'],
|
|
135
135
|
defaultSettings: {
|
|
136
136
|
color: "#ffffff",
|
|
137
137
|
roughness: 0.5,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EnvironmentObjectConfig, EnvironmentObjectType } from "../types";
|
|
2
|
+
export declare const DEFAULT_ENVIRONMENT_OBJECTS: Record<EnvironmentObjectType, EnvironmentObjectConfig>;
|
|
3
|
+
export declare const ENVIRONMENT_OBJECT_LABELS: Record<EnvironmentObjectType, string>;
|
|
4
|
+
export declare const ENVIRONMENT_OBJECTS_ANIMATABLE: Record<EnvironmentObjectType, {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}[]>;
|
|
8
|
+
/** True when the config is one of the environment objects. */
|
|
9
|
+
export declare function isEnvironmentObjectConfig(config: unknown): config is EnvironmentObjectConfig;
|
|
10
|
+
//# sourceMappingURL=environmentDefaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentDefaults.d.ts","sourceRoot":"","sources":["../../src/data/environmentDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAY/E,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAO9F,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAO3E,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CA+F5G,CAAC;AAEF,8DAA8D;AAC9D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,uBAAuB,CAG5F"}
|