Ready to test print
55
fable/Proof1/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Proof1 — the lit chamber
|
||||
|
||||
*First physical translation: screen → acrylic → light. Based on
|
||||
`REFINED_Backlit7/merge-45 → merge-55`.*
|
||||
|
||||
## What this is
|
||||
|
||||
A bubble chamber photographed the invisible: a particle passed, boiled a
|
||||
line of bubbles into being, and was gone — leaving a trail as its only
|
||||
confession. This project makes new such confessions by hand-parameter, then
|
||||
stages one as a world. *One Sun Setting*: a single event erupting at the
|
||||
waterline of a quiet sea, beneath a sun already fading into memory. Silence
|
||||
and violence in one frame.
|
||||
|
||||
## Inspiration
|
||||
|
||||
CERN plate film on a light table. Hokusai's small figures under enormous
|
||||
weather. Twombly's one honest gesture on a still ground. The idea that
|
||||
*evidence of the invisible rhymes across scales* — the spiral of a δ-ray and
|
||||
the spiral of a milkweed seed are the same handwriting.
|
||||
|
||||
## Boundaries
|
||||
|
||||
The archive costume came off, layer by layer, until only the gesture
|
||||
remained. No scanner's hand. No labels — a legible glyph commands *read me*;
|
||||
this piece asks only *look*. The palette holds: β-law magenta, hot at birth,
|
||||
violet only as a last word. The sea stays calm so the event can be loud —
|
||||
loudness lives in a small mark against vastness, never in clutter. The sun
|
||||
recedes; it is what the light *was*, not a character. Composition obeys φ:
|
||||
the golden rectangle, the horizon on the golden division, sun and event vertex
|
||||
on opposing golden nodes.
|
||||
|
||||
## Craft
|
||||
|
||||
The seed is the whole fingerprint — an image and its four-metre master are one
|
||||
truth at two sizes. Bubbles are hollow: pale core, refracting rim, delicate as
|
||||
mist at nose distance. Where they crowd, they *merge* — one flat union at an
|
||||
even density, so a dense knot never becomes mud, and, lit, never punches a dark
|
||||
hole in the glow. Even ink = even light. That is the whole discipline of the
|
||||
backlit grammar: **depth is transparency.** The deepest plane carries the least
|
||||
ink and the most light.
|
||||
|
||||
## Goals
|
||||
|
||||
Take the locked frame apart into planes and give it air. Sun to the back, pure
|
||||
transmitted colour, a light source rather than a picture. Sea in the middle,
|
||||
a woven field. The event to the front, erupting toward the viewer. Air gaps
|
||||
turn faked blur into real parallax; the LED panel behind frosted acrylic turns
|
||||
faded ink into a sun that actually shines. Prove one hero, then let the typology
|
||||
grow around it — a wall of catalogued dawns over one vacuum sea.
|
||||
|
||||
## Feels
|
||||
|
||||
Arrival and dispersal at once. A single instant, embalmed, outliving the
|
||||
conditions that made it. Awe, not spectacle. The held breath before the wave.
|
||||
24
fable/Proof1/base/merge-45.svg
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
24
fable/Proof1/base/merge-55.svg
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
83
fable/Proof1/manifest.json
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"piece": "Proof1 — the lit chamber",
|
||||
"source": "REFINED_Backlit7 merge (mirror event, uniform-lace)",
|
||||
"seed": "MESON-5113#03",
|
||||
"bubbleOpacity": 0.5,
|
||||
"art": {
|
||||
"w": 1001,
|
||||
"h": 1620,
|
||||
"ratio": "phi (golden portrait)"
|
||||
},
|
||||
"sheet": {
|
||||
"w_mm": 330,
|
||||
"h_mm": 420,
|
||||
"note": "A3 — golden art square floated, clear margins = lit void"
|
||||
},
|
||||
"gaps_mm": "plane z is nominal; two scales: ~3mm within a sheet, ~9mm between",
|
||||
"planes": [
|
||||
{
|
||||
"id": "sun",
|
||||
"file": "plane-1-sun.svg",
|
||||
"z": 0,
|
||||
"blur": 1.4,
|
||||
"dim": 0.95,
|
||||
"white": "none",
|
||||
"glow": 1
|
||||
},
|
||||
{
|
||||
"id": "sea-far",
|
||||
"file": "plane-2-sea-far.svg",
|
||||
"z": 9,
|
||||
"blur": 0.9,
|
||||
"dim": 1,
|
||||
"white": "none",
|
||||
"glow": 0.7
|
||||
},
|
||||
{
|
||||
"id": "sea-mid",
|
||||
"file": "plane-3-sea-mid.svg",
|
||||
"z": 15,
|
||||
"blur": 0.5,
|
||||
"dim": 1,
|
||||
"white": "trace",
|
||||
"glow": 0.7
|
||||
},
|
||||
{
|
||||
"id": "sea-near",
|
||||
"file": "plane-4-sea-near.svg",
|
||||
"z": 18,
|
||||
"blur": 0.2,
|
||||
"dim": 1,
|
||||
"white": "trace",
|
||||
"glow": 0.7
|
||||
},
|
||||
{
|
||||
"id": "event-halo",
|
||||
"file": "plane-5-event-halo.svg",
|
||||
"z": 27,
|
||||
"blur": 2.4,
|
||||
"dim": 0.85,
|
||||
"white": "none",
|
||||
"glow": 0.9
|
||||
},
|
||||
{
|
||||
"id": "event-core",
|
||||
"file": "plane-6-event-core.svg",
|
||||
"z": 30,
|
||||
"blur": 0,
|
||||
"dim": 1,
|
||||
"white": "under",
|
||||
"glow": 0.5
|
||||
},
|
||||
{
|
||||
"id": "front-glass",
|
||||
"file": "plane-7-front-glass.svg",
|
||||
"z": 30,
|
||||
"blur": 0,
|
||||
"dim": 1,
|
||||
"white": "none",
|
||||
"glow": 0,
|
||||
"blend": "multiply"
|
||||
}
|
||||
]
|
||||
}
|
||||
1
fable/Proof1/plane-1-sun.svg
Normal file
|
After Width: | Height: | Size: 206 KiB |
1
fable/Proof1/plane-2-sea-far.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-3-sea-mid.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-4-sea-near.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-5-event-halo.svg
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
1
fable/Proof1/plane-6-event-core.svg
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
1
fable/Proof1/plane-7-front-glass.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1001" height="1620" viewBox="0 0 1001 1620"><image x="0" y="0" width="1001" height="1620" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAxIiBoZWlnaHQ9IjE2MjAiIHZpZXdCb3g9IjAgMCAxMDAxIDE2MjAiPgo8ZGVmcz4KIDxmaWx0ZXIgaWQ9ImR1c3QiIHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjxmZVR1cmJ1bGVuY2UgdHlwZT0idHVyYnVsZW5jZSIgYmFzZUZyZXF1ZW5jeT0iMC41IiBudW1PY3RhdmVzPSIyIiBzZWVkPSIxMyIgc3RpdGNoVGlsZXM9InN0aXRjaCIgcmVzdWx0PSJuIi8+PGZlQ29sb3JNYXRyaXggaW49Im4iIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAuMjM1IDAgMCAwIDAgMC4xODggMCAwIDAgMCAwLjEzMyAwIDAgMCAwLjMwMCAtMC4xOCIvPjwvZmlsdGVyPgogPGZpbHRlciBpZD0iZm94IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48ZmVUdXJidWxlbmNlIHR5cGU9ImZyYWN0YWxOb2lzZSIgYmFzZUZyZXF1ZW5jeT0iMC4wMDQiIG51bU9jdGF2ZXM9IjMiIHNlZWQ9IjE3IiBzdGl0Y2hUaWxlcz0ic3RpdGNoIiByZXN1bHQ9Im4iLz48ZmVDb2xvck1hdHJpeCBpbj0ibiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC40MiAwIDAgMCAwIDAuMzAgMCAwIDAgMCAwLjE2IDAgMCAwIDAuMTk4IC0wLjEyIi8+PC9maWx0ZXI+CjwvZGVmcz4KPHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2ZveCkiLz4KPHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2R1c3QpIi8+CjxsaW5lIHgxPSI0MTEiIHkxPSIzNDQiIHgyPSI0MzAiIHkyPSIxMjQ3IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA5MCIgc3Ryb2tlLXdpZHRoPSIwLjc5Ii8+PGxpbmUgeDE9IjcwMiIgeTE9IjY4IiB4Mj0iNjg3IiB5Mj0iMTQzNyIgc3Ryb2tlPSJyZ2IoNjAsNDgsMzQpIiBzdHJva2Utb3BhY2l0eT0iMC4wNTEiIHN0cm9rZS13aWR0aD0iMC43NyIvPjxsaW5lIHgxPSI0MjIiIHkxPSI1MTQiIHgyPSI0MzciIHkyPSIxNzU3IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjE2NSIgc3Ryb2tlLXdpZHRoPSIxLjAzIi8+PGxpbmUgeDE9IjEwIiB5MT0iNTIzIiB4Mj0iMTkiIHkyPSIxODY5IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjE1MCIgc3Ryb2tlLXdpZHRoPSIwLjUzIi8+PGxpbmUgeDE9IjQzNCIgeTE9IjI4NSIgeDI9IjQyMSIgeTI9IjE0NDIiIHN0cm9rZT0icmdiKDYwLDQ4LDM0KSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTU3IiBzdHJva2Utd2lkdGg9IjAuNzAiLz48bGluZSB4MT0iMTExIiB5MT0iMTgwIiB4Mj0iOTUiIHkyPSIxNTk0IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA4NiIgc3Ryb2tlLXdpZHRoPSIwLjkxIi8+PGxpbmUgeDE9IjE0MCIgeTE9IjE2NCIgeDI9IjE1OCIgeTI9Ijc1OCIgc3Ryb2tlPSJyZ2IoNjAsNDgsMzQpIiBzdHJva2Utb3BhY2l0eT0iMC4xMDUiIHN0cm9rZS13aWR0aD0iMS4wNCIvPjxsaW5lIHgxPSIxOTIiIHkxPSIzNjMiIHgyPSIyMDciIHkyPSIxNDg5IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA3NSIgc3Ryb2tlLXdpZHRoPSIxLjAzIi8+PC9zdmc+"/><g opacity="0.85"><image x="0" y="0" width="1001" height="1620" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAxIiBoZWlnaHQ9IjE2MjAiIHZpZXdCb3g9IjAgMCAxMDAxIDE2MjAiPgo8ZGVmcz48ZmlsdGVyIGlkPSJnIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KPGZlVHVyYnVsZW5jZSB0eXBlPSJmcmFjdGFsTm9pc2UiIGJhc2VGcmVxdWVuY3k9IjAuOSIgbnVtT2N0YXZlcz0iMiIgc2VlZD0iMTkiIHN0aXRjaFRpbGVzPSJzdGl0Y2giIHJlc3VsdD0ibiIvPgo8ZmVDb2xvck1hdHJpeCBpbj0ibiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC4xNDkgMCAwIDAgMCAwLjEyNSAwIDAgMCAwIDAuMTAyIDAgMCAwIDAuNTIgMCIvPgo8L2ZpbHRlcj48L2RlZnM+PHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2cpIi8+PC9zdmc+"/></g></svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
BIN
fable/Proof1/proof1_letter_8.5x11.png
Normal file
|
After Width: | Height: | Size: 9.4 MiB |
81
fable/Proof1/simulator.html
Normal file
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html><html><head><meta charset="utf-8">
|
||||
<title>Proof1 · lit chamber — backlit parallax</title>
|
||||
<style>
|
||||
:root{--gap:6;--bright:1;}
|
||||
html,body{margin:0;height:100%;background:#0a0a0b;overflow:hidden;
|
||||
font:12px/1.5 ui-monospace,monospace;color:#9aa;}
|
||||
#wrap{position:fixed;inset:0;display:grid;place-items:center;}
|
||||
.scene{perspective:2200px;perspective-origin:50% 45%;}
|
||||
.stack{position:relative;transform-style:preserve-3d;transition:transform .06s linear;
|
||||
width:500.5px;height:810px;}
|
||||
.panel{position:absolute;inset:-14%;transform:translateZ(-120px);
|
||||
background:radial-gradient(120% 90% at 50% 42%,#fff6ec, #ffe7c8 42%, #f0c48c 78%, #caa06a 100%);
|
||||
filter:blur(2px);}
|
||||
.plane{position:absolute;inset:0;width:100%;height:100%;background-size:cover;
|
||||
background-repeat:no-repeat;will-change:transform,filter;}
|
||||
#hud{position:fixed;left:14px;top:12px;z-index:9;background:#141416cc;padding:12px 14px;
|
||||
border-left:3px solid #d9b48a;max-width:300px;}
|
||||
#hud h1{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:#d9b48a;font-weight:400;margin:0 0 8px;}
|
||||
#hud label{display:block;margin:7px 0 2px;color:#aab;}
|
||||
#hud input[type=range]{width:100%;}
|
||||
#legend{position:fixed;right:14px;top:12px;z-index:9;background:#141416cc;padding:10px 12px;color:#889;}
|
||||
#legend b{color:#d9b48a;font-weight:400;}
|
||||
.pill{display:inline-block;margin:2px 4px 2px 0;padding:1px 6px;border:1px solid #333;border-radius:9px;cursor:pointer;color:#aab;}
|
||||
.pill.off{opacity:.35;text-decoration:line-through;}
|
||||
</style></head><body>
|
||||
<div id="hud">
|
||||
<h1>Proof1 · lit chamber</h1>
|
||||
<div>move mouse = parallax · drag sliders</div>
|
||||
<label>air gap ×<span id="gv"></span></label>
|
||||
<input id="gap" type="range" min="1" max="18" step="0.5" value="6">
|
||||
<label>backlight<span id="bv"></span></label>
|
||||
<input id="bright" type="range" min="0.3" max="1.8" step="0.05" value="1">
|
||||
<div id="pills"></div>
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
<div id="wrap"><div class="scene"><div class="stack" id="stack">
|
||||
<div class="panel" id="panel"></div>
|
||||
</div></div></div>
|
||||
<script>
|
||||
const PLANES=[{"id":"sun","file":"plane-1-sun.svg","z":0,"blur":1.4,"dim":0.95,"white":"none","glow":1},{"id":"sea-far","file":"plane-2-sea-far.svg","z":9,"blur":0.9,"dim":1,"white":"none","glow":0.7},{"id":"sea-mid","file":"plane-3-sea-mid.svg","z":15,"blur":0.5,"dim":1,"white":"trace","glow":0.7},{"id":"sea-near","file":"plane-4-sea-near.svg","z":18,"blur":0.2,"dim":1,"white":"trace","glow":0.7},{"id":"event-halo","file":"plane-5-event-halo.svg","z":27,"blur":2.4,"dim":0.85,"white":"none","glow":0.9},{"id":"event-core","file":"plane-6-event-core.svg","z":30,"blur":0,"dim":1,"white":"under","glow":0.5},{"id":"front-glass","file":"plane-7-front-glass.svg","z":30,"blur":0,"dim":1,"white":"none","glow":0,"blend":"multiply"}];
|
||||
const stack=document.getElementById('stack');
|
||||
const legend=document.getElementById('legend');
|
||||
const pills=document.getElementById('pills');
|
||||
const maxZ=Math.max(...PLANES.map(p=>p.z));
|
||||
const els={};
|
||||
legend.innerHTML='<b>planes</b> (front → back)<br>'+[...PLANES].reverse().map(p=>p.id+' · '+p.z+'mm').join('<br>');
|
||||
PLANES.forEach(p=>{
|
||||
const d=document.createElement('div');
|
||||
d.className='plane'; d.style.backgroundImage='url('+p.file+')';
|
||||
d.dataset.id=p.id; stack.appendChild(d); els[p.id]=d;
|
||||
const pill=document.createElement('span'); pill.className='pill'; pill.textContent=p.id;
|
||||
pill.onclick=()=>{d.dataset.off=d.dataset.off?'':'1'; pill.classList.toggle('off'); layout();};
|
||||
pills.appendChild(pill);
|
||||
});
|
||||
let gap=6, bright=1, mx=0, my=0;
|
||||
function layout(){
|
||||
for(const p of PLANES){
|
||||
const e=els[p.id];
|
||||
const z=(p.z-maxZ)*gap; // front plane at 0, others recede
|
||||
const blur=(p.blur||0)*(gap/6);
|
||||
const off=e.dataset.off?' opacity:0;':'';
|
||||
e.style.transform='translateZ('+z+'px)';
|
||||
e.style.filter='blur('+blur.toFixed(2)+'px)';
|
||||
e.style.opacity=e.dataset.off?0:(p.dim??1);
|
||||
e.style.mixBlendMode=p.blend||'normal';
|
||||
}
|
||||
document.getElementById('panel').style.filter='blur(2px) brightness('+bright+')';
|
||||
}
|
||||
function parallax(){
|
||||
stack.style.transform='rotateX('+(my*7)+'deg) rotateY('+(mx*9)+'deg)';
|
||||
}
|
||||
addEventListener('mousemove',e=>{
|
||||
mx=(e.clientX/innerWidth-0.5)*2; my=-(e.clientY/innerHeight-0.5)*2; parallax();
|
||||
});
|
||||
const gapI=document.getElementById('gap'), brI=document.getElementById('bright');
|
||||
gapI.oninput=()=>{gap=+gapI.value; document.getElementById('gv').textContent=' '+gap; layout();};
|
||||
brI.oninput=()=>{bright=+brI.value; document.getElementById('bv').textContent=' '+bright.toFixed(2); layout();};
|
||||
document.getElementById('gv').textContent=' '+gap;
|
||||
document.getElementById('bv').textContent=' '+bright.toFixed(2);
|
||||
layout(); parallax();
|
||||
</script></body></html>
|
||||