// src/presets/curated.ts
//
// The 7 device-curated factory presets (Johannes' hand-tuned starter set), brought into the web SSOT
// so they render in the web app, bake to thumbnails, and embed as `builtin:<id>`. The params are the
// resolved values from apple/PhysarumApp/Resources/Factory/factory.json (already runtime-validated
// against the web preset schema). The cast is safe on this validated data; the source arrays are RGB
// triples / 3x3 matrices that widen to number[] under JSON. Regenerate when the factory set changes.
import type { Preset } from '~/engine/types';
export const CURATED_PRESETS: Preset[] = [
{
id: 'aurora',
name: 'Aurora',
builtIn: true,
tags: ['ethereal', 'flowing'],
tagSignal: 'phosphor',
params: {
spawnPattern: 'ring',
decayRate: 0.98873454,
exposure: 0.5653752,
blendMode: 'additive',
bloomThreshold: 1.0814632,
species: [
{
color: [0.73605376, 0.48979276, 0.044757396],
moveSpeed: 0.64337194,
sensorDistance: 27.356153,
populationShare: 0.5902689,
depositAmount: 6.5200467,
turnSpeed: 0.3309331,
sensorAngle: 0.6322222,
},
{
color: [0.46563697, 0.0004808749, 0.72578],
moveSpeed: 0.70342654,
sensorDistance: 27.356153,
populationShare: 0.9930387,
depositAmount: 7.534308,
turnSpeed: 0.3412099,
sensorAngle: 0.6322222,
},
{
moveSpeed: 1.7901369,
color: [0.78555197, 0.15478781, 0.021439508],
turnSpeed: 0.53114754,
depositAmount: 8.979657,
sensorAngle: 0.6322222,
populationShare: 0.9371802,
sensorDistance: 27.356153,
},
],
bloomIntensity: 0.30265224,
vignette: 0.37809283,
rhythmAmplitude: 0.29695362,
interactionMatrix: [
[1.016628, 0.32234582, -1.5307459],
[0.59072554, 0.99257, -0.47360986],
[0.24983515, 0.5551907, 1.1715275],
],
saturation: 1.375664,
fadeStrength: 0.10369688,
chaosStrength: 1.909645,
audioReactive: {
gain: 1,
autoGain: false,
routes: [],
enabled: false,
},
chaosInterval: 71,
trailSaturation: 142.04756,
headIntensity: 0,
simSpeed: 2,
backgroundColor: [0.003752647, 0.0033203736, 0.0047917427],
feedbackAmount: 0.43143198,
diffusionFreq: 3,
kaleidoscope: 0,
contrast: 1.2654614,
agentCount: 79493,
},
},
{
id: 'terminal-haze',
name: 'Terminal Haze',
builtIn: true,
tags: ['structured', 'mono'],
tagSignal: 'phosphor',
params: {
chaosInterval: 29,
contrast: 1.0320601,
bloomThreshold: 0.17404182,
chaosStrength: 0.036239468,
rhythmAmplitude: 0.08320421,
trailSaturation: 133.16748,
species: [
{
populationShare: 0.92893535,
color: [0.46652016, 0.7942236, 0.40071595],
sensorDistance: 19.225368,
moveSpeed: 1.0194142,
turnSpeed: 0.38617703,
sensorAngle: 0.7953866,
depositAmount: 8.955558,
},
{
populationShare: 0.2912641,
color: [0.2670638, 0.5473876, 0.076421954],
sensorDistance: 29.441628,
moveSpeed: 1.0194142,
turnSpeed: 0.40449184,
sensorAngle: 0.75543195,
depositAmount: 9.496066,
},
{
populationShare: 0.5671881,
color: [0.10202113, 0.49903965, 0.2188591],
sensorDistance: 26.442642,
moveSpeed: 1.0194142,
turnSpeed: 0.25334403,
sensorAngle: 0.75543195,
depositAmount: 8.454129,
},
],
fadeStrength: 0.05408936,
feedbackAmount: 0.1463991,
decayRate: 0.9605718,
bloomIntensity: 1.8750434,
agentCount: 166338,
diffusionFreq: 2,
vignette: 0.2869309,
headIntensity: 0.6714784,
interactionMatrix: [
[1.0945247, 0.08639156, -0.25962117],
[-0.14460896, 1.2153074, 0.16204123],
[0.11605265, -0.22434916, 1.1874573],
],
exposure: 0.41045,
saturation: 0.93307143,
audioReactive: {
enabled: false,
autoGain: false,
routes: [],
gain: 1,
},
kaleidoscope: 6,
simSpeed: 1,
spawnPattern: 'ring',
backgroundColor: [0.0065285373, 0.0051177535, 0.0050126775],
blendMode: 'additive',
},
},
{
id: 'neon-waves',
name: 'Neon Waves',
builtIn: true,
tags: [],
tagSignal: 'circuit',
params: {
chaosInterval: 0,
trailSaturation: 190.57231,
spawnPattern: 'center',
headIntensity: 0,
interactionMatrix: [
[1.3976473, -0.3744529, -0.5902473],
[-0.54440445, 0.91085297, -0.48382962],
[0.3855962, -0.25363103, 0.841355],
],
feedbackAmount: 0.24283189,
bloomThreshold: 0.23761383,
blendMode: 'additive',
bloomIntensity: 1.4432683,
vignette: 0.2636687,
decayRate: 0.9743882,
agentCount: 13272,
contrast: 0.96206915,
species: [
{
sensorAngle: 0.4514797,
color: [0.8070048, 0.07329212, 0.6136804],
populationShare: 0.737879,
turnSpeed: 0.30781108,
sensorDistance: 33.936363,
moveSpeed: 1.617108,
depositAmount: 5.651055,
},
{
sensorAngle: 0.9494871,
color: [0.8323085, 0.36527, 0.060723227],
populationShare: 0.48726907,
turnSpeed: 0.26211873,
sensorDistance: 22.860405,
moveSpeed: 1.2133678,
depositAmount: 12.91847,
},
{
sensorAngle: 0.51471263,
color: [0.11495956, 0.5920424, 0.9595972],
populationShare: 0.17922719,
turnSpeed: 0.26225364,
sensorDistance: 35.227135,
moveSpeed: 1.7455939,
depositAmount: 8.235862,
},
],
fadeStrength: 0.051426195,
backgroundColor: [0.001415384, 0.0013575521, 0.0013251485],
chaosStrength: 0.29754633,
exposure: 1.803508,
kaleidoscope: 0,
audioReactive: {
routes: [],
autoGain: false,
enabled: false,
gain: 1,
},
diffusionFreq: 3,
rhythmAmplitude: 0.10067187,
saturation: 1.4285922,
simSpeed: 1,
},
},
{
id: 'solar-veil',
name: 'Solar Veil',
builtIn: true,
tags: ['warm', 'glow', 'single'],
tagSignal: 'ember',
params: {
backgroundColor: [0.019607844, 0.007843138, 0],
vignette: 0.4,
headIntensity: 1,
diffusionFreq: 14,
species: [
{
sensorAngle: 0.62,
populationShare: 1.6759038,
moveSpeed: 0.2779178,
color: [1, 0.41960785, 0.12156863],
sensorDistance: 16,
turnSpeed: 0.28,
depositAmount: 84.355804,
},
{
populationShare: 1.6759038,
moveSpeed: 0.2779178,
depositAmount: 84.355804,
sensorDistance: 24,
turnSpeed: 0.32,
sensorAngle: 0.5,
color: [1, 0.670578, 0.003921509],
},
{
populationShare: 1.6759038,
moveSpeed: 0.2779178,
depositAmount: 84.355804,
sensorDistance: 24,
turnSpeed: 0.32,
sensorAngle: 0.5,
color: [0, 0, 0],
},
],
chaosInterval: 0,
trailSaturation: 309.28906,
bloomIntensity: 2.4,
chaosStrength: 0,
interactionMatrix: [
[2, -0.7376658, -1.4850259],
[-0.62632, 0.43979144, -0.27414048],
[1.8483884, 0.16052818, 1],
],
rhythmAmplitude: 0.12,
blendMode: 'additive',
agentCount: 500000,
feedbackAmount: 0,
saturation: 1.1,
kaleidoscope: 0,
contrast: 1,
fadeStrength: 0.903361,
exposure: 0.5110481,
audioReactive: {
enabled: false,
routes: [],
autoGain: false,
gain: 1,
},
bloomThreshold: 0.15,
decayRate: 0.9889219,
spawnPattern: 'ring',
simSpeed: 6,
},
},
{
id: 'dancing-ink',
name: 'Dancing Ink',
builtIn: true,
tags: ['soft', 'pastel'],
tagSignal: 'neural-bleed',
params: {
backgroundColor: [1, 1, 1],
vignette: 0.16608907,
headIntensity: 0,
diffusionFreq: 3,
species: [
{
populationShare: 3,
depositAmount: 10.240589,
color: [0.7097931, 0.101959236, 0],
moveSpeed: 1.2778419,
sensorAngle: 0.22043844,
sensorDistance: 14.336272,
turnSpeed: 0.31583235,
},
{
populationShare: 0.9472691,
depositAmount: 12.426651,
color: [1, 0.25097653, 0.08235169],
moveSpeed: 1.2248919,
sensorAngle: 0.65408504,
sensorDistance: 25.247599,
turnSpeed: 0.29138967,
},
{
populationShare: 0.61235356,
depositAmount: 6.669653,
color: [0, 0, 0],
moveSpeed: 1.317013,
sensorAngle: 0.94199,
sensorDistance: 13.991532,
turnSpeed: 0.30598947,
},
],
chaosInterval: 0,
trailSaturation: 113.43695,
bloomIntensity: 0.9663008,
interactionMatrix: [
[0.66130656, 0.3244782, -2],
[0.14178416, 1.3197148, -2],
[0.629055, 0.512182, 2],
],
chaosStrength: 0,
rhythmAmplitude: 0.16994247,
blendMode: 'paint',
agentCount: 500000,
feedbackAmount: 0.042170245,
saturation: 1.2635609,
kaleidoscope: 0,
contrast: 1.3390626,
fadeStrength: 0.05550368,
exposure: 3.4772172,
audioReactive: {
routes: [],
autoGain: false,
gain: 1,
enabled: false,
},
bloomThreshold: 0.94971734,
decayRate: 0.95001525,
spawnPattern: 'ring',
simSpeed: 1,
},
},
{
id: 'mandala',
name: 'Mandala',
builtIn: true,
tags: ['symmetry', 'meditation'],
tagSignal: 'voidwitch',
params: {
backgroundColor: [0.023529412, 0.011764706, 0.047058824],
vignette: 0.3,
headIntensity: 0,
diffusionFreq: 2,
species: [
{
depositAmount: 9,
sensorDistance: 28,
color: [0.627451, 0.3764706, 1],
moveSpeed: 0.9,
sensorAngle: 0.5,
populationShare: 0.34,
turnSpeed: 0.4,
},
{
depositAmount: 9,
sensorDistance: 28,
color: [0.3764706, 0.7529412, 1],
moveSpeed: 0.9,
sensorAngle: 0.5,
populationShare: 0.33,
turnSpeed: 0.4,
},
{
depositAmount: 9,
sensorDistance: 28,
color: [1, 0.3764706, 0.627451],
moveSpeed: 0.9,
sensorAngle: 0.5,
populationShare: 0.33,
turnSpeed: 0.4,
},
],
chaosInterval: 0,
trailSaturation: 255,
bloomIntensity: 1.5,
chaosStrength: 0,
rhythmAmplitude: 0.05,
interactionMatrix: [
[1.2, -0.46898186, -0.52465475],
[1.2707961, 1.2, 0.3],
[-0.47721946, 0.3, 1.2],
],
blendMode: 'additive',
agentCount: 345319,
feedbackAmount: 0.5,
saturation: 1.3,
kaleidoscope: 6,
contrast: 1,
fadeStrength: 0.12,
exposure: 0.53699654,
audioReactive: {
enabled: false,
autoGain: false,
gain: 1,
routes: [],
},
bloomThreshold: 0.35,
decayRate: 0.98,
spawnPattern: 'center',
simSpeed: 1,
},
},
{
id: 'mystic',
name: 'Mystic',
builtIn: true,
tags: ['chase', 'rotating'],
tagSignal: 'voidwitch',
params: {
saturation: 1.35,
fadeStrength: 0.12,
headIntensity: 0,
spawnPattern: 'center',
rhythmAmplitude: 0.05,
backgroundColor: [0.023529412, 0.015686275, 0.047058824],
kaleidoscope: 4,
bloomThreshold: 0.3,
vignette: 0.45,
interactionMatrix: [
[0.6, 1.4, -0.7862307],
[-0.8627809, 0.6, 1.4],
[1.4, -0.4, 0.6],
],
simSpeed: 2,
agentCount: 500000,
decayRate: 0.972,
chaosStrength: 0,
species: [
{
depositAmount: 9,
sensorDistance: 26,
color: [0.6901961, 0.3764706, 1],
moveSpeed: 1.1,
sensorAngle: 0.5,
populationShare: 0.34,
turnSpeed: 0.4,
},
{
depositAmount: 9,
sensorDistance: 26,
color: [1, 0.3764706, 0.7529412],
moveSpeed: 1.1,
sensorAngle: 0.5,
populationShare: 0.33,
turnSpeed: 0.4,
},
{
depositAmount: 9,
sensorDistance: 26,
color: [0.3764706, 0.5647059, 1],
moveSpeed: 1.1,
sensorAngle: 0.5,
populationShare: 0.33,
turnSpeed: 0.4,
},
],
blendMode: 'additive',
exposure: 0.51116085,
audioReactive: {
enabled: false,
autoGain: false,
routes: [],
gain: 1,
},
contrast: 0.95,
trailSaturation: 255,
feedbackAmount: 0.55,
diffusionFreq: 2,
bloomIntensity: 1.7,
chaosInterval: 0,
},
},
] as unknown as Preset[];