diff --git a/docs/artist-order.html b/docs/artist-order.html index c59db33..9b9614e 100644 --- a/docs/artist-order.html +++ b/docs/artist-order.html @@ -399,7 +399,7 @@ const UPD={ mast:"Mastered for vinyl; the artist is listening to the master.", g2:"The artist approved the vinyl master.", cut:"Cut to lacquer in the cutting room.", - plate:"Plated in-house: father, mother and stampers. The mother is archived for represses.", + plate:"Plated in-house: father, mother and stampers. Father and mother are archived for represses.", prep:"Stampers punched, back-finished and checked.", tp:"First test pressings made and sent to the artist.", g3:"The artist approved the test pressing.", diff --git a/docs/artist-platform.md b/docs/artist-platform.md index dd11b35..49abd00 100644 --- a/docs/artist-platform.md +++ b/docs/artist-platform.md @@ -367,7 +367,9 @@ vault for a second attempt. ### After the first run: repress on demand -Once a title exists, its mother sits in the archive and a repress takes +Once a title exists, its father and mother sit in the archive (a mother +gives about ten stamper sets, and a worn one is replaced from the father +without a new cut) and a repress takes **1.5 to 2.5 weeks** of plant time ([production timeline](production-timeline.md)). The campaign page can reopen as "pre-order the repress, pressed when 100 more are in", which diff --git a/docs/equipment/galvanics.md b/docs/equipment/galvanics.md index c7326b9..83b5c8d 100644 --- a/docs/equipment/galvanics.md +++ b/docs/equipment/galvanics.md @@ -306,6 +306,16 @@ The count, from this repo's own demand figures: (at 1,000 to 2,000 pressings per stamper): 8 to 10 electroformed parts per title, **~2,400 to 6,000 parts a year**, 8 to 20 per working day at 300 days, before remakes. +- The father and the mother of every side go into the archive (decided + October 2026): 4 parts per title, **~1,200 to 2,400 parts a year** at 300 + to 600 titles. A mother carries about 10 stamper sets and a father about + 5 to 10 mothers by the industry rule of thumb (sources and the repress + arithmetic in the + [production timeline](../production-timeline.md#repress-the-shortest-path-in-the-plant)), + so a repress normally grows stampers from the archived mother, and a + worn mother is replaced from the father without a new cut. The room + that holds them is planned in + [facility security](../facility-security.md#protecting-the-irreplaceable). - With ~15 minutes of loading, rinsing and unloading on top of 45 to 75 minutes of deposition, a cell turns a part in ~1 to 1.5 hours: 10 to 16 parts per cell per two-shift day, **20 to 32 per PDPU**. @@ -482,6 +492,11 @@ goes ahead. equipment on offer; installations and service in Asia; stamper service prices and turnaround; which water-treatment partner his customers use; and whether OMS builds the electroplating equipment Newbilt announces. +- **All galvanics candidates** (Pheenix, Digital Matrix, OMS): how many + stamper sets a mother gives and how many mothers a father gives with + their process before quality drops, how they check it (mother playback, + metrology), and how they recommend storing archived fathers and mothers + (passivation, sleeves, humidity) for years. - **Press vendors** (Newbilt, Pheenix, M-Tech): the stamper centre hole and edge form each mould expects, so the punch size and coiner tooling can be ordered to match ([pressing line](pressing-line.md)). diff --git a/docs/factory-console.html b/docs/factory-console.html index ef3a375..ac5e291 100644 --- a/docs/factory-console.html +++ b/docs/factory-console.html @@ -529,10 +529,12 @@ const H={ intake(o){const lim=LIM[o.size][o.rpm];o.files={lim,len:SIDES.map(()=>lim*U(0.62,0.96)),sr:pick([44.1,48,96]),bits:24,peak:-U(0.3,1.4),fmt:pick(["WAV","FLAC","AIFF"])};}, cut(o,t){o.lac=SIDES.map(s=>({id:"L-"+code(++S.seq.p),side:s,w:U(48,62),dep:U(26,31),scribe:o.catno+" "+s,stylus:"Stylus "+RI(11,19)}));log(t,"metal",`${o.id}: lacquers ${o.lac.map(l=>l.id).join(", ")} on Lathe 1`,"Cutting room",o.id);}, plate(o,t){ - if(o.repress){o.fa=null;o.mo=SIDES.map(s=>({id:"M-"+code(o.n*31+s.charCodeAt(0)),side:s,thick:U(246,256),listen:"pass",made:t-U(90,400)*DAY,arch:true}));} + if(o.repress){o.fa=SIDES.map(s=>({id:"F-"+code(o.n*29+s.charCodeAt(0)),side:s,arch:true}));o.mo=SIDES.map(s=>({id:"M-"+code(o.n*31+s.charCodeAt(0)),side:s,thick:U(246,256),listen:"pass",made:t-U(90,400)*DAY,arch:true}));} else{o.fa=SIDES.map(s=>({id:"F-"+code(++S.seq.p),side:s,thick:U(246,256)}));o.mo=SIDES.map(s=>({id:"M-"+code(++S.seq.p),side:s,thick:U(246,256),listen:"pass",made:t+1.2*DAY}));} o.cell="PDPU 1, cell "+RI(1,2); o.sets=[];const n=Math.max(1,Math.ceil(o.qty*1.08/1000));for(let k=1;k<=n;k++)o.sets.push(mkSet(o,k)); + /* stamper sets grown from this mother so far: about 10 is the industry rule of thumb before a new mother is grown from the archived father */ + o.moUse=(o.repress?RI(1,6):0)+n; }, prep(o,t){for(const s of o.sets)measure(s);log(t,"metal",`${o.id}: ${o.sets.length*2} stampers punched, back-finished, measured`,"Stamper prep",o.id);}, tp(o){o.tp={n:10,you:5,sides:SIDES.map(s=>({side:s,score:U(97.8,99.5),clicks:RI(0,1),noise:-U(61,66)}))};}, @@ -640,7 +642,7 @@ function cycle(p,now){ if(o.good>=o.qty){finishRun(p,now);return;} if(set.plays>=set.life){ set.state="retired";set.retired=now;o.setIdx++; - if(!o.sets[o.setIdx]){const ns=mkSet(o,o.sets.length+1);measure(ns);o.sets.push(ns);log(now,"metal",`${o.id}: extra stamper set ${ns.n} grown from the archived mothers`,"Galvanics",o.id);} + if(!o.sets[o.setIdx]){const ns=mkSet(o,o.sets.length+1);measure(ns);o.sets.push(ns);o.moUse=(o.moUse||0)+1;log(now,"metal",`${o.id}: extra stamper set ${ns.n} grown from the archived mothers`,"Galvanics",o.id);} mount(p,o,now);p.st="change";p.why="Stamper change to set "+(o.setIdx+1);p.until=now+20*MIN;p.next=p.until;p.since=0; log(now,"press",`${p.id}: stamper set ${set.n} retired after ${fI(set.plays)} plays`,p.op||"Operator",o.id);return; } @@ -915,7 +917,7 @@ function orderBlocks(o){ const spec=`
Side A shown; side B has its own chain. ${o.lac?`Lacquers under the microscope: groove ${Math.round(o.lac[0].w)} µm wide, ${Math.round(o.lac[0].dep)} µm deep; scribed ${esc(o.lac[0].scribe)}, fiducial applied.`:"Repress: grown from the archived mothers."} ${o.mo?"Mothers listened to: pass.":""}
${stamperTable(o)}`;} + if(o.lac||o.mo){metal=`Side A shown; side B has its own chain. ${o.lac?`Lacquers under the microscope: groove ${Math.round(o.lac[0].w)} µm wide, ${Math.round(o.lac[0].dep)} µm deep; scribed ${esc(o.lac[0].scribe)}, fiducial applied.`:"Repress: grown from the archived mothers."} ${o.mo?"Mothers listened to: pass.":""}
${stamperTable(o)}`;} const lots=o.lots.map(id=>S.lots.find(L=>L.id===id)).filter(Boolean); const comp=lots.length?lots.map(L=>`${L.id} ${esc(MAT[L.mat])}, ${esc(SUP[L.sup])}${L.mat==="black"?". Mixed 80 % virgin / 20 % in-house regrind at the extruder":""}.
| ${k} | ${v} | ${l} | ${lim(ok)} |
Assigned when the press run starts.
'; const A=o.ta; @@ -986,12 +988,12 @@ PAGES.metal={ blocks(){ const plating=S.orders.filter(o=>o.si===SI.plate||o.si===SI.prep||o.si===SI.cut).sort((a,b)=>a.si-b.si||a.ss-b.ss); const rec=S.orders.filter(o=>o.si>SI.prep&&o.sets.length&&o.sets[0].st[0].res).sort((a,b)=>(b.hist.find(h=>h.id==="prep")||{a:0}).a-(a.hist.find(h=>h.id==="prep")||{a:0}).a).slice(0,3); - const mothers=S.orders.reduce((a,o)=>a+(o.mo&&!o.repress?o.mo.length:0),0); + const mothers=S.orders.reduce((a,o)=>a+(o.mo&&!o.repress?o.mo.length+(o.fa?o.fa.length:0):0),0); return { mB:plating.length?plating.map(o=>`Nothing in progress.
', mM:S.presses.map(p=>`${o.id} ${esc(o.title)} ${o.repress?"repress from the archive":""}
${stamperTable(o)}`).join(""):'No stampers measured yet.
', - mA:`A repress skips cutting and the father: new stampers grow from the archived mother, which is the cost and lead-time advantage of plating in-house.
` + mA:`A repress skips cutting and the father: new stampers grow from the archived mother, about 10 sets per mother by the industry rule of thumb. A worn mother is replaced by growing a new one from the archived father, still without a new cut. That is the cost and lead-time advantage of plating in-house.
` }; } }; @@ -1145,7 +1147,7 @@ function cStatus(o){ return `${esc(sub)}
Estimated delivery ${fDW(e.t)}
`; } if(STAGES[o.si].gate)return `Nothing goes ahead without your approval. Waiting since ${fDW(o.ss)}.
`; - if(st==="done")return `${fI(o.good)} copies, every one inspected. Your mothers stay in our archive, so a repress skips cutting and plating the father.
`; + if(st==="done")return `${fI(o.good)} copies, every one inspected. Your fathers and mothers stay in our archive: a repress grows new stampers from the mother (about ten sets per mother), and a worn mother is replaced from the father, so there is no new cut.
`; if(st==="queue")return `Planned on press ${e.press}${pById(e.press).kind==="duplex"?", a Newbilt Duplex":", the Newbilt Classic"}.
Your stampers are measured and in the rack. Estimated delivery ${fDW(e.t)}.
`; if(st==="ship"||st==="fin")return `${st==="ship"?`${o.ship.carrier}, ${o.ship.boxes} cartons, tracking ${o.ship.trk} (simulated).`:`Every copy is scanned into its jacket: the run-out code against the jacket barcode.`}
`; const f=prog(o)||0; @@ -1164,8 +1166,8 @@ function cQual(o){ if(o.files&&(done("intake")||o.si>0))out.push(card("Your files","checked",`${o.files.fmt}, ${o.files.bits}-bit / ${o.files.sr} kHz, checksums verified at both ends.`,`| Side ${SIDES[i]} | ${Math.floor(Math.round(m*60)/60)}:${pad(Math.round(m*60)%60)} | at most ${o.files.lim} min | ${lim(true)} |
| True peak | ${f1(o.files.peak)} dBTP | ${lim(true)} |
| Lacquer | Groove width | Depth | Run-out |
|---|---|---|---|
| ${l.id} | ${Math.round(l.w)} µm | ${Math.round(l.dep)} µm | ${esc(l.scribe)} |
Your mother has given ${o.moUse||1} of about 10 stamper sets; after that a fresh mother is grown from your archived father.
${inb?bar(prog(o),"metal"):""}${done("prep")?stamperTable(o):""}`,done("prep")));} if(o.tp&&done("tp"))out.push(card("Test pressings","checked",`${o.tp.n} pressed, ${o.tp.you} sent to you. Optical inspection passed on both sides; audio compared with your master:`,`| Side ${s.side} | ${f1(s.score)} % match | ${s.clicks} clicks | ${Math.round(s.noise)} dB |
You approved it ${fDW(o.gates[3].t)}.
`:""}`)); const lots=o.lots.map(id=>S.lots.find(L=>L.id===id)).filter(Boolean); for(const L of lots)out.push(card("Your vinyl compound","lab released",`Lot ${L.id}, ${esc(MAT[L.mat].toLowerCase())}. Tested in our lab before release, then released by a test pressing.`,`| ${k} | ${v} | ${l} | ${lim(ok)} |
You hear and approve a real pressing before the run. The mother plate is archived, so a repress later skips cutting and plating.
+You hear and approve a real pressing before the run. The father and mother are archived, so a repress later skips cutting.
${st}-A1 · D1-B · ${ts} · side AWhat a fan sees after scanning the code printed on the sleeve: the plant's traceability record for this one copy. IDs and times here are simulated.
-Sold out? Open a repress. The mother is archived, so a repress skips cutting and plating: about 1.5 to 2.5 weeks of plant time, pressed when 100 more fans are in.
Sold out? Open a repress. Father and mother are archived, so a repress skips cutting and goes straight to new stampers: about 1.5 to 2.5 weeks of plant time, pressed when 100 more fans are in.