shadertown 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoC,UAAU,EAAE,MAAM,YAAY,CAAC;AA6F7F,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+1D0B,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAkC,UAAU,EAAE,CAAC;AAEvE,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAIxE;AAED,iDAAiD;AACjD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAEpF,kEAAkE;AAClE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CACtD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,CAAC,CAChF,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoC,UAAU,EAAE,MAAM,YAAY,CAAC;AA6F7F,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAs8E0B,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAkC,UAAU,EAAE,CAAC;AAEvE,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAIxE;AAED,iDAAiD;AACjD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAEpF,kEAAkE;AAClE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CACtD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,CAAC,CAChF,CAAC"}
package/dist/registry.js CHANGED
@@ -1304,6 +1304,348 @@ export const shaderRegistry = {
1304
1304
  colorC: color("Key", "#fff7ed", "The key light, its rim, and the sheen on the core."),
1305
1305
  },
1306
1306
  },
1307
+ eyes: {
1308
+ name: "Eyes",
1309
+ tagline: "A wall of eyes that look where the pointer goes",
1310
+ description: "Each cell is one eye: an almond of sclera, an iris that travels toward the cursor, a lid that blinks on its own clock. The gaze is the interactive part — move the pointer and the whole wall follows it — but the idle frame carries itself: with no pointer the eyes wander, each on its own phase, so a card is never a grid of dead centres.",
1311
+ family: "geometric",
1312
+ tags: ["interactive", "pointer", "playful"],
1313
+ cost: "light",
1314
+ controls: {
1315
+ ...base,
1316
+ speed: { ...base.speed, default: 1, max: 2.5 },
1317
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2.5 },
1318
+ grain: { ...base.grain, default: 0.02 },
1319
+ vignette: { ...base.vignette, default: 0.3 },
1320
+ follow: {
1321
+ slot: "a",
1322
+ label: "Follow",
1323
+ min: 0,
1324
+ max: 1,
1325
+ step: 0.01,
1326
+ default: 0.85,
1327
+ hint: "0 lets every eye wander on its own, 1 locks them all onto the pointer.",
1328
+ },
1329
+ blink: {
1330
+ slot: "b",
1331
+ label: "Blink",
1332
+ min: 0,
1333
+ max: 3,
1334
+ step: 0.01,
1335
+ default: 1,
1336
+ hint: "Blink rate. 0 stares, which is worse.",
1337
+ },
1338
+ iris: {
1339
+ slot: "c",
1340
+ label: "Iris",
1341
+ min: 0.4,
1342
+ max: 1.6,
1343
+ step: 0.01,
1344
+ default: 1,
1345
+ hint: "Size of the iris inside the almond.",
1346
+ },
1347
+ pupil: {
1348
+ slot: "d",
1349
+ label: "Pupil",
1350
+ min: 0.15,
1351
+ max: 0.9,
1352
+ step: 0.01,
1353
+ default: 0.45,
1354
+ hint: "Pupil as a share of the iris. Big is dark-adapted, or alarmed.",
1355
+ },
1356
+ },
1357
+ colors: {
1358
+ colorA: color("Wall", "#151221", "The wall the eyes are set into."),
1359
+ colorB: color("Iris", "#38bdf8", "The iris, shaded darker at its rim."),
1360
+ colorC: color("Sclera", "#ece7dc", "The white of the eye."),
1361
+ },
1362
+ },
1363
+ tesla: {
1364
+ name: "Tesla",
1365
+ tagline: "A plasma globe whose filament reaches for your finger",
1366
+ description: "The bolts are analytic: each one is a base angle plus a noise wiggle that grows with radius, so a pixel's distance to a filament is its angular error times its radius — no marching, no segments. Bolts re-roll their heading on a coarse clock, which is the jump that reads as electricity. One bolt always seeks the pointer, clamped to the inside of the glass, exactly what the real toy does when a hand touches the dome.",
1367
+ family: "organic",
1368
+ tags: ["interactive", "pointer", "dark", "hero"],
1369
+ cost: "medium",
1370
+ controls: {
1371
+ ...base,
1372
+ speed: { ...base.speed, default: 1, max: 2.5 },
1373
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2 },
1374
+ grain: { ...base.grain, default: 0.02 },
1375
+ vignette: { ...base.vignette, default: 0.4 },
1376
+ warp: {
1377
+ ...warp,
1378
+ label: "Wiggle",
1379
+ min: 0,
1380
+ max: 2,
1381
+ default: 0.8,
1382
+ hint: "How hard a filament thrashes as it travels. 0 is spokes.",
1383
+ },
1384
+ bolts: {
1385
+ slot: "a",
1386
+ label: "Bolts",
1387
+ min: 2,
1388
+ max: 8,
1389
+ step: 1,
1390
+ default: 5,
1391
+ hint: "Free-roaming filaments, not counting the one that seeks the pointer.",
1392
+ },
1393
+ glow: {
1394
+ slot: "b",
1395
+ label: "Glow",
1396
+ min: 0.3,
1397
+ max: 2,
1398
+ step: 0.01,
1399
+ default: 1,
1400
+ hint: "Width of the halo riding each filament.",
1401
+ },
1402
+ flicker: {
1403
+ slot: "c",
1404
+ label: "Flicker",
1405
+ min: 0,
1406
+ max: 2,
1407
+ step: 0.01,
1408
+ default: 1,
1409
+ hint: "How often the bolts re-roll their heading.",
1410
+ },
1411
+ haze: {
1412
+ slot: "d",
1413
+ label: "Haze",
1414
+ min: 0,
1415
+ max: 2,
1416
+ step: 0.01,
1417
+ default: 0.8,
1418
+ hint: "The gas glow filling the globe behind the filaments.",
1419
+ },
1420
+ },
1421
+ colors: {
1422
+ colorA: color("Gas", "#1e1b4b", "The unexcited gas inside the globe."),
1423
+ colorB: color("Halo", "#a78bfa", "The glow around each filament, and the glass rim."),
1424
+ colorC: color("Core", "#f5f3ff", "The filament cores and the electrode."),
1425
+ },
1426
+ },
1427
+ magnet: {
1428
+ name: "Magnet",
1429
+ tagline: "Field lines of three charges, one riding the pointer",
1430
+ description: "Nothing here is traced. The stream function of a point charge is its angle and its potential is the log of its distance, so field lines are level sets of one sum and equipotentials of the other — the whole plot is two sin() calls over closed forms, live at any resolution. The pointer carries the third charge; its slider steps by whole numbers because the picture's continuity across the branch cuts depends on the charges being integers.",
1431
+ family: "geometric",
1432
+ tags: ["interactive", "pointer", "diagram"],
1433
+ cost: "light",
1434
+ controls: {
1435
+ ...base,
1436
+ speed: { ...base.speed, default: 1, max: 2.5 },
1437
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2.5 },
1438
+ grain: { ...base.grain, default: 0.02 },
1439
+ vignette: { ...base.vignette, default: 0.35 },
1440
+ lines: {
1441
+ slot: "a",
1442
+ label: "Lines",
1443
+ min: 4,
1444
+ max: 48,
1445
+ step: 1,
1446
+ default: 14,
1447
+ hint: "Field lines leaving each unit of charge.",
1448
+ },
1449
+ flow: {
1450
+ slot: "b",
1451
+ label: "Flow",
1452
+ min: 0,
1453
+ max: 3,
1454
+ step: 0.01,
1455
+ default: 1,
1456
+ hint: "The phase sliding along the lines. 0 is a printed diagram.",
1457
+ },
1458
+ charge: {
1459
+ slot: "c",
1460
+ label: "Charge",
1461
+ min: -2,
1462
+ max: 2,
1463
+ step: 1,
1464
+ default: 1,
1465
+ hint: "The pointer's charge. Whole numbers only — the picture tears otherwise. 0 removes it.",
1466
+ },
1467
+ },
1468
+ colors: {
1469
+ colorA: color("Paper", "#0b0e14", "The ground behind the plot."),
1470
+ colorB: color("South", "#60a5fa", "The negative pole, and the equipotential rings."),
1471
+ colorC: color("North", "#fb7185", "The positive pole, and a positive pointer."),
1472
+ },
1473
+ },
1474
+ torch: {
1475
+ name: "Torch",
1476
+ tagline: "A light in your hand, moving over rock in the dark",
1477
+ description: "The wall is a heightfield and the lamp is the pointer, so the shading is honest: the fbm that draws the rock is differentiated for a normal, and crevices light up and go dark as the torch passes over them — which is what makes the surface read as carved rather than printed. The flame gutters on two noise rates, a slow breathe under a fast sputter, and dust motes drift through the beam because lit air is the only air you can see.",
1478
+ family: "spatial",
1479
+ tags: ["interactive", "pointer", "dark"],
1480
+ cost: "medium",
1481
+ controls: {
1482
+ ...base,
1483
+ speed: { ...base.speed, default: 1, max: 2 },
1484
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2.5 },
1485
+ grain: { ...base.grain, default: 0.03 },
1486
+ vignette: { ...base.vignette, default: 0.5 },
1487
+ warp: {
1488
+ ...warp,
1489
+ label: "Relief",
1490
+ min: 0,
1491
+ max: 2.5,
1492
+ default: 1,
1493
+ hint: "Steepness of the rock. It scales the slope, not the texture.",
1494
+ },
1495
+ beam: {
1496
+ slot: "a",
1497
+ label: "Beam",
1498
+ min: 0.15,
1499
+ max: 1.5,
1500
+ step: 0.01,
1501
+ default: 0.7,
1502
+ hint: "Radius of the pool of light around the pointer.",
1503
+ },
1504
+ gutter: {
1505
+ slot: "b",
1506
+ label: "Gutter",
1507
+ min: 0,
1508
+ max: 2,
1509
+ step: 0.01,
1510
+ default: 1,
1511
+ hint: "How much the flame wavers. 0 is an LED.",
1512
+ },
1513
+ motes: {
1514
+ slot: "c",
1515
+ label: "Motes",
1516
+ min: 0,
1517
+ max: 2,
1518
+ step: 0.01,
1519
+ default: 0.8,
1520
+ hint: "Dust drifting through the beam.",
1521
+ },
1522
+ ambient: {
1523
+ slot: "d",
1524
+ label: "Ambient",
1525
+ min: 0,
1526
+ max: 1,
1527
+ step: 0.01,
1528
+ default: 0.35,
1529
+ hint: "What little the dark still shows. 0 is a cave.",
1530
+ },
1531
+ },
1532
+ colors: {
1533
+ colorA: color("Rock", "#241a12", "The stone in shadow."),
1534
+ colorB: color("Flame", "#fbbf24", "The torchlight itself."),
1535
+ colorC: color("Spark", "#fde68a", "Speculars and the dust in the beam."),
1536
+ },
1537
+ },
1538
+ parallax: {
1539
+ name: "Parallax",
1540
+ tagline: "Ridgelines in depth, and the pointer moves the camera",
1541
+ description: "Five silhouettes, each a one-dimensional ridged fbm thresholded against the pixel's height. Depth is faked twice over: haze mixes each layer toward the sky, and the pointer pans each layer by its own factor — the near ridge slides furthest, which is the one cue that turns a flat stack into a landscape you are standing in. Time scrolls the world slowly on its own.",
1542
+ family: "organic",
1543
+ tags: ["interactive", "pointer", "hero", "calm"],
1544
+ cost: "medium",
1545
+ controls: {
1546
+ ...base,
1547
+ speed: { ...base.speed, default: 0.6, max: 2 },
1548
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2.5 },
1549
+ grain: { ...base.grain, default: 0.03 },
1550
+ vignette: { ...base.vignette, default: 0.3 },
1551
+ warp: {
1552
+ ...warp,
1553
+ label: "Jaggedness",
1554
+ min: 0.2,
1555
+ max: 2,
1556
+ default: 1,
1557
+ hint: "How sharp the ridgelines cut. Low rolls, high tears.",
1558
+ },
1559
+ height: {
1560
+ slot: "b",
1561
+ label: "Height",
1562
+ min: 0.3,
1563
+ max: 2,
1564
+ step: 0.01,
1565
+ default: 1,
1566
+ hint: "Amplitude of the mountains against the sky.",
1567
+ },
1568
+ pan: {
1569
+ slot: "c",
1570
+ label: "Pan",
1571
+ min: 0,
1572
+ max: 2,
1573
+ step: 0.01,
1574
+ default: 1,
1575
+ hint: "How far the pointer swings the camera.",
1576
+ },
1577
+ sun: {
1578
+ slot: "d",
1579
+ label: "Sun",
1580
+ min: 0,
1581
+ max: 2,
1582
+ step: 0.01,
1583
+ default: 1,
1584
+ hint: "The low sun and the rim light it puts on every ridge.",
1585
+ },
1586
+ },
1587
+ colors: {
1588
+ colorA: color("Zenith", "#2b1b5e", "The top of the sky; the near ridges are its ink."),
1589
+ colorB: color("Horizon", "#c86a8a", "The haze the far layers sink into."),
1590
+ colorC: color("Sun", "#ffd9a0", "The disc, its glow, and the rim light."),
1591
+ },
1592
+ },
1593
+ gravity: {
1594
+ name: "Gravity",
1595
+ tagline: "A starfield lensed by a mass that rides the pointer",
1596
+ description: "The lens is the physics, simplified once: a point mass deflects light by the square of its Einstein radius over the impact distance, so every sample is just read from a pushed position. That one line produces everything the picture is known for — stars smeared into arcs, the ring at the Einstein radius, doubled images inside it — and dragging the pointer drags the distortion across the sky.",
1597
+ family: "spatial",
1598
+ tags: ["interactive", "pointer", "dark", "hero"],
1599
+ cost: "medium",
1600
+ controls: {
1601
+ ...base,
1602
+ speed: { ...base.speed, default: 0.8, max: 2 },
1603
+ scale: { ...base.scale, default: 1, min: 0.4, max: 2.5 },
1604
+ grain: { ...base.grain, default: 0.02 },
1605
+ vignette: { ...base.vignette, default: 0.35 },
1606
+ mass: {
1607
+ slot: "a",
1608
+ label: "Mass",
1609
+ min: 0.1,
1610
+ max: 2.5,
1611
+ step: 0.01,
1612
+ default: 1,
1613
+ hint: "The Einstein radius. Everything else scales from it.",
1614
+ },
1615
+ ring: {
1616
+ slot: "b",
1617
+ label: "Ring",
1618
+ min: 0,
1619
+ max: 2,
1620
+ step: 0.01,
1621
+ default: 0.9,
1622
+ hint: "The photon ring, and the hot rim on the shadow's edge.",
1623
+ },
1624
+ grid: {
1625
+ slot: "c",
1626
+ label: "Grid",
1627
+ min: 0,
1628
+ max: 1,
1629
+ step: 0.01,
1630
+ default: 0.25,
1631
+ hint: "The spacetime grid, bent through the same lens. 0 hides it.",
1632
+ },
1633
+ stars: {
1634
+ slot: "d",
1635
+ label: "Stars",
1636
+ min: 0.2,
1637
+ max: 1.6,
1638
+ step: 0.01,
1639
+ default: 1,
1640
+ hint: "Density of the field behind the lens.",
1641
+ },
1642
+ },
1643
+ colors: {
1644
+ colorA: color("Space", "#050510", "The dark between the stars."),
1645
+ colorB: color("Nebula", "#7c3aed", "The soft field, the grid, and the faintest stars."),
1646
+ colorC: color("Star", "#f8fafc", "The bright stars and the shadow's rim."),
1647
+ },
1648
+ },
1307
1649
  glass: {
1308
1650
  name: "Glass",
1309
1651
  tagline: "A refracting, frosted sheet over the layer behind it",
@@ -1910,6 +2252,258 @@ export const shaderRegistry = {
1910
2252
  colorC: color("Edge", "#fbcfe8", "The light on the boundary itself."),
1911
2253
  },
1912
2254
  },
2255
+ "neon-sign": {
2256
+ name: "Neon Sign",
2257
+ tagline: "The layer's edges bent into glass tube and lit",
2258
+ description: "The tube is the level set where the layer's luma crosses a threshold, which is why this works on anything but sings on text: a glyph's boundary is one clean crossing, and the band around it becomes the glass. The halo is the blurred luma itself rather than a blur of the tube, so the light lands where the ink is. Hand it `source={{ text: \"OPEN\" }}` and it is a sign.",
2259
+ family: "optical",
2260
+ tags: ["text", "neon", "dark", "sign"],
2261
+ cost: "heavy",
2262
+ defaultSource: "truchet",
2263
+ controls: {
2264
+ ...base,
2265
+ speed: { ...base.speed, default: 1, max: 2 },
2266
+ scale: { ...base.scale, default: 1 },
2267
+ grain: { ...base.grain, default: 0.02 },
2268
+ vignette: { ...base.vignette, default: 0.35 },
2269
+ warp: {
2270
+ ...warp,
2271
+ label: "Glow",
2272
+ min: 0.05,
2273
+ max: 2,
2274
+ default: 0.6,
2275
+ hint: "How far the tube's light carries onto the wall.",
2276
+ },
2277
+ threshold: {
2278
+ slot: "a",
2279
+ label: "Threshold",
2280
+ min: 0.05,
2281
+ max: 0.95,
2282
+ step: 0.01,
2283
+ default: 0.45,
2284
+ hint: "The luma level the tube is bent along.",
2285
+ },
2286
+ fill: {
2287
+ slot: "b",
2288
+ label: "Fill",
2289
+ min: 0,
2290
+ max: 2,
2291
+ step: 0.01,
2292
+ default: 0.8,
2293
+ hint: "The dim glow inside the letterforms, behind the tube.",
2294
+ },
2295
+ flicker: {
2296
+ slot: "c",
2297
+ label: "Flicker",
2298
+ min: 0,
2299
+ max: 1,
2300
+ step: 0.01,
2301
+ default: 0.35,
2302
+ hint: "Sputter. The dropouts arrive as events, not as noise.",
2303
+ },
2304
+ boost: {
2305
+ slot: "d",
2306
+ label: "Boost",
2307
+ min: 0,
2308
+ max: 2,
2309
+ step: 0.01,
2310
+ default: 1,
2311
+ hint: "Overall drive into the tube.",
2312
+ },
2313
+ },
2314
+ colors: {
2315
+ colorA: color("Wall", "#160b16", "The wall behind the sign, lit by its spill."),
2316
+ colorB: color("Tube", "#f0abfc", "The neon colour: the halo and the fill."),
2317
+ colorC: color("Core", "#fff1f2", "What the middle of the tube burns to."),
2318
+ },
2319
+ },
2320
+ ascii: {
2321
+ name: "ASCII",
2322
+ tagline: "The layer redrawn as a density ramp of glyphs",
2323
+ description: "Ten 3×5 bitmaps packed into ten integers, ordered by how much ink they carry, so brightness picks the character the way the classic ramp does. The font ships inside the shader — a vendored copy runs with no assets at all. Colorize slides between pure phosphor and the source's own colour pushed through the glyphs; scan adds the monitor the font implies.",
2324
+ family: "image",
2325
+ tags: ["text", "retro", "terminal"],
2326
+ cost: "light",
2327
+ defaultSource: "aurora",
2328
+ controls: {
2329
+ ...base,
2330
+ speed: { ...base.speed, default: 1, max: 2 },
2331
+ scale: { ...base.scale, default: 1 },
2332
+ grain: { ...base.grain, default: 0 },
2333
+ vignette: { ...base.vignette, default: 0.3 },
2334
+ cells: {
2335
+ slot: "a",
2336
+ label: "Cells",
2337
+ min: 8,
2338
+ max: 120,
2339
+ step: 1,
2340
+ default: 48,
2341
+ hint: "Characters across the short axis.",
2342
+ },
2343
+ contrast: {
2344
+ slot: "b",
2345
+ label: "Contrast",
2346
+ min: 0.3,
2347
+ max: 3,
2348
+ step: 0.01,
2349
+ default: 1,
2350
+ hint: "Gamma on the luma before it picks a glyph.",
2351
+ },
2352
+ colorize: {
2353
+ slot: "c",
2354
+ label: "Colorize",
2355
+ min: 0,
2356
+ max: 1,
2357
+ step: 0.01,
2358
+ default: 0,
2359
+ hint: "0 is phosphor, 1 keeps the source's own colours.",
2360
+ },
2361
+ scan: {
2362
+ slot: "d",
2363
+ label: "Scan",
2364
+ min: 0,
2365
+ max: 1,
2366
+ step: 0.01,
2367
+ default: 0.4,
2368
+ hint: "Scanlines and a slow refresh bar.",
2369
+ },
2370
+ },
2371
+ colors: {
2372
+ colorA: color("Screen", "#0a0f0a", "The unlit glass behind the characters."),
2373
+ colorB: color("Mid", "#166534", "Unused by the glyphs; feeds post."),
2374
+ colorC: color("Phosphor", "#4ade80", "The terminal's ink."),
2375
+ },
2376
+ },
2377
+ shatter: {
2378
+ name: "Shatter",
2379
+ tagline: "The layer breaks into shards that fly from the pointer",
2380
+ description: "A voronoi partition where the shards hold still and their contents move: each cell samples the source from a position swung back toward the impact point, so the picture inside every shard slides and rotates away from the cursor while the crack pattern stays fixed. At speed 0 the progress slider is a scrubber, same contract as reveal — bind it to a scroll position and the break happens under the reader's thumb.",
2381
+ family: "distortion",
2382
+ tags: ["interactive", "pointer", "text", "transition"],
2383
+ cost: "medium",
2384
+ defaultSource: "kaleidoscope",
2385
+ controls: {
2386
+ ...base,
2387
+ speed: { ...base.speed, default: 0.6, max: 2 },
2388
+ scale: { ...base.scale, default: 1 },
2389
+ grain: { ...base.grain, default: 0.02 },
2390
+ vignette: { ...base.vignette, default: 0.25 },
2391
+ warp: {
2392
+ ...warp,
2393
+ label: "Scatter",
2394
+ min: 0,
2395
+ max: 2,
2396
+ default: 1,
2397
+ hint: "How far the shards travel from the impact.",
2398
+ },
2399
+ progress: {
2400
+ slot: "a",
2401
+ label: "Progress",
2402
+ min: 0,
2403
+ max: 1,
2404
+ step: 0.01,
2405
+ default: 0,
2406
+ hint: "Position of the break. Set speed to 0 and drive this yourself.",
2407
+ },
2408
+ shards: {
2409
+ slot: "b",
2410
+ label: "Shards",
2411
+ min: 2,
2412
+ max: 24,
2413
+ step: 1,
2414
+ default: 8,
2415
+ hint: "Density of the crack pattern.",
2416
+ },
2417
+ spin: {
2418
+ slot: "c",
2419
+ label: "Spin",
2420
+ min: 0,
2421
+ max: 2,
2422
+ step: 0.01,
2423
+ default: 0.8,
2424
+ hint: "How much each shard rotates as it flies.",
2425
+ },
2426
+ glint: {
2427
+ slot: "d",
2428
+ label: "Glint",
2429
+ min: 0,
2430
+ max: 2,
2431
+ step: 0.01,
2432
+ default: 0.8,
2433
+ hint: "Light catching the fresh crack edges.",
2434
+ },
2435
+ },
2436
+ colors: {
2437
+ colorA: color("Behind", "#0b0b12", "What shows through the gaps between shards."),
2438
+ colorB: color("Mid", "#334155", "Unused by the shards; feeds post."),
2439
+ colorC: color("Glint", "#e2e8f0", "The light on the crack edges."),
2440
+ },
2441
+ },
2442
+ melt: {
2443
+ name: "Melt",
2444
+ tagline: "The layer runs downhill, and the pointer is the heat",
2445
+ description: "A melting pixel shows what used to be above it, so the whole effect is sampling the source at a smaller y. How much smaller is a column-coherent noise — coherent down each column, varied across them — which is what makes drips instead of fog. The streak pass keeps the brightest tap of the climb, the way a run of paint carries its highlight down with it. The pointer is a blowtorch: hold it on text and the text sags.",
2446
+ family: "distortion",
2447
+ tags: ["interactive", "pointer", "text"],
2448
+ cost: "medium",
2449
+ defaultSource: "neon-grid",
2450
+ controls: {
2451
+ ...base,
2452
+ speed: { ...base.speed, default: 1, max: 2 },
2453
+ scale: { ...base.scale, default: 1 },
2454
+ grain: { ...base.grain, default: 0.02 },
2455
+ vignette: { ...base.vignette, default: 0.25 },
2456
+ warp: {
2457
+ ...warp,
2458
+ label: "Wobble",
2459
+ min: 0,
2460
+ max: 2,
2461
+ default: 0.8,
2462
+ hint: "Sideways sway in the runs, so no drip is perfectly plumb.",
2463
+ },
2464
+ heat: {
2465
+ slot: "a",
2466
+ label: "Heat",
2467
+ min: 0,
2468
+ max: 2,
2469
+ step: 0.01,
2470
+ default: 0.8,
2471
+ hint: "Overall melting. The pointer adds its own on top.",
2472
+ },
2473
+ drips: {
2474
+ slot: "b",
2475
+ label: "Drips",
2476
+ min: 0.2,
2477
+ max: 3,
2478
+ step: 0.01,
2479
+ default: 1,
2480
+ hint: "How many runs share the width of the frame.",
2481
+ },
2482
+ streaks: {
2483
+ slot: "c",
2484
+ label: "Streaks",
2485
+ min: 0,
2486
+ max: 1,
2487
+ step: 0.01,
2488
+ default: 0.7,
2489
+ hint: "The bright smear a run drags down with it.",
2490
+ },
2491
+ torch: {
2492
+ slot: "d",
2493
+ label: "Torch",
2494
+ min: 0.05,
2495
+ max: 0.8,
2496
+ step: 0.01,
2497
+ default: 0.25,
2498
+ hint: "Radius of the pointer's heat.",
2499
+ },
2500
+ },
2501
+ colors: {
2502
+ colorA: color("Ground", "#0a0a12", "Unused by the melt; feeds post."),
2503
+ colorB: color("Mid", "#7f1d1d", "Unused by the melt; feeds post."),
2504
+ colorC: color("Molten", "#fda4af", "The glow on the steepest runs."),
2505
+ },
2506
+ },
1913
2507
  };
1914
2508
  export const shaderNames = Object.keys(shaderRegistry);
1915
2509
  export function getShader(name) {