Archive the father as well as the mother; how many represses a mother carries
Decided (October 2026): the plant keeps the father and the mother of every side. production-timeline.md (repress section) records the decision and the rule of thumb with sources: about 10 stamper sets per mother before it degrades (Third Man Pressing FAQ, a Nashville plater via WPLN), fewer in quality-minded sources (5 VinyLab, 6 to 8 Stereo Review 1962); a father grows about 5 to 10 mothers. So a mother covers roughly ten represses (10,000 to 20,000 records a side) and a worn one is replaced from the archived father without a new cut. galvanics.md: 4 archived parts per title, ~1,200 to 2,400 a year; new open question to all galvanics candidates (sets per mother, mothers per father, storage). artist-platform.md repress paragraph. Demos: make-a-record and artist-order say father and mother are archived; factory console archives the father on represses too, counts stamper sets per mother (shown in the genealogy and the customer's metal card), and the metal archive counts fathers and mothers.
This commit is contained in:
1 parent
1cceedc8a4
commit
475623e9f2
6 files changed
+57
-22
No files matched your search
@@ -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.",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)).
|
||||
|
||||
@@ -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=`<dl class="kv"><dt>Format</dt><dd>${esc(fmtL(o))}</dd><dt>Copies</dt><dd>${fI(o.qty)}</dd><dt>Run-out</dt><dd class="mono">${esc(o.catno)} A / ${esc(o.catno)} B</dd><dt>Labels</dt><dd>Printed${o.labelLot?", lot "+o.labelLot+", print-inspected, oven pre-dried":""}</dd><dt>Packing</dt><dd>Inner sleeve, printed jacket${o.shrink?", shrink wrap":""}</dd><dt>Ordered</dt><dd>${fDT(o.created)}</dd>${o.repress?"<dt>Repress</dt><dd>From the archived mothers, no new cut</dd>":""}</dl>`;
|
||||
const gates=[1,2,3].filter(g=>!o.repress&&(g!==2||o.mastering)).map(g=>{const a=o.gates[g];const waiting=st.gate===g;return `<dt>Gate ${g}</dt><dd>${a?`<span class="ok">✓</span> ${GATE_T[g]}, ${fDT(a.t)}, ${esc(a.by)}`:waiting?`<span class="warn">waiting ${dur(S.t-o.ss)}</span> for the ${GATE_T[g]}`:`<span class="faint">${GATE_T[g]}</span>`}</dd>`;}).join("");
|
||||
let metal="";
|
||||
if(o.lac||o.mo){metal=`<div class="gen">${o.lac?`<span>${o.lac[0].id}</span><em>→</em>`:""}${o.fa?`<span>${o.fa[0].id}</span><em>→</em>`:""}${o.mo?`<span>${o.mo[0].id}${o.mo[0].arch?" (archive)":""}</span><em>→</em>`:""}<span>${o.sets.length} stamper set${o.sets.length>1?"s":""}</span></div><p class="note" style="margin:0 0 8px">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 <span class="mono">${esc(o.lac[0].scribe)}</span>, fiducial applied.`:"Repress: grown from the archived mothers."} ${o.mo?"Mothers listened to: pass.":""}</p>${stamperTable(o)}`;}
|
||||
if(o.lac||o.mo){metal=`<div class="gen">${o.lac?`<span>${o.lac[0].id}</span><em>→</em>`:""}${o.fa?`<span>${o.fa[0].id} (archive)</span><em>→</em>`:""}${o.mo?`<span>${o.mo[0].id} (archive, ${o.moUse||1} of about 10 sets)</span><em>→</em>`:""}<span>${o.sets.length} stamper set${o.sets.length>1?"s":""}</span></div><p class="note" style="margin:0 0 8px">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 <span class="mono">${esc(o.lac[0].scribe)}</span>, fiducial applied.`:"Repress: grown from the archived mothers."} ${o.mo?"Mothers listened to: pass.":""}</p>${stamperTable(o)}`;}
|
||||
const lots=o.lots.map(id=>S.lots.find(L=>L.id===id)).filter(Boolean);
|
||||
const comp=lots.length?lots.map(L=>`<p style="margin:0 0 6px"><b class="mono">${L.id}</b> ${esc(MAT[L.mat])}, ${esc(SUP[L.sup])}${L.mat==="black"?". Mixed 80 % virgin / 20 % in-house regrind at the extruder":""}.</p><div class="tw"><table class="t">${lotRow(L).map(([k,v,l,ok])=>`<tr><td>${k}</td><td class="num">${v}</td><td class="num faint">${l}</td><td>${lim(ok)}</td></tr>`).join("")}</table></div>`).join(""):'<p class="mute" style="margin:0">Assigned when the press run starts.</p>';
|
||||
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=>`<div class="si"><div class="r1"><span><a href="#order=${o.id}">${o.id}</a> ${esc(o.title)}</span>${chip(o)}</div><small>${esc(subStep(o))}${o.cell&&o.si===SI.plate?" · "+o.cell:""}</small>${bar(prog(o),"metal")}</div>`).join(""):'<p class="mute">Nothing in progress.</p>',
|
||||
mM:S.presses.map(p=>`<div class="si"><div class="r1"><span class="mono"><a href="#press=${p.id}">${p.id}</a> ${p.set?p.set.st.map(s=>s.id).join(" / "):""}</span><span class="mono mute">${p.set?fI(p.set.plays)+" / "+fI(p.set.life):PST[p.st]}</span></div>${bar(p.set?p.set.plays/p.set.life:0,p.set&&p.set.plays/p.set.life>0.9?"warn":"metal")}</div>`).join(""),
|
||||
mR:rec.length?rec.map(o=>`<p style="margin:10px 0 4px"><a href="#order=${o.id}">${o.id}</a> ${esc(o.title)} <span class="mute">${o.repress?"repress from the archive":""}</span></p>${stamperTable(o)}`).join(""):'<p class="mute">No stampers measured yet.</p>',
|
||||
mA:`<div class="stats3"><div><b>${fI(mothers)}</b><span>mothers archived, orders on file</span></div><div><b>${fI(cnt(o=>o.repress))}</b><span>represses in the pipeline</span></div><div><b>${fI(S.orders.reduce((a,o)=>a+o.sets.filter(s=>s.state==="rack").length,0))}</b><span>stamper sets in the rack</span></div></div><p class="note">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.</p>`
|
||||
mA:`<div class="stats3"><div><b>${fI(mothers)}</b><span>fathers and mothers archived, orders on file</span></div><div><b>${fI(cnt(o=>o.repress))}</b><span>represses in the pipeline</span></div><div><b>${fI(S.orders.reduce((a,o)=>a+o.sets.filter(s=>s.state==="rack").length,0))}</b><span>stamper sets in the rack</span></div></div><p class="note">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.</p>`
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -1145,7 +1147,7 @@ function cStatus(o){
|
||||
return `<div class="hl press">${head}</div><div class="big">${fI(o.good)}<span> of ${fI(o.qty)} pressed</span></div>${bar(o.good/o.qty,"acc")}<p>${esc(sub)}</p><p>Estimated delivery <b style="color:var(--ink)">${fDW(e.t)}</b></p>`;
|
||||
}
|
||||
if(STAGES[o.si].gate)return `<div class="hl gate">Waiting for you</div><div class="big" style="font-size:34px">Approve the ${GATE_T[STAGES[o.si].gate]}</div><p>Nothing goes ahead without your approval. Waiting since ${fDW(o.ss)}.</p>`;
|
||||
if(st==="done")return `<div class="hl done">Delivered</div><div class="big" style="font-size:34px">${fDW(o.ss)}</div><p>${fI(o.good)} copies, every one inspected. Your mothers stay in our archive, so a repress skips cutting and plating the father.</p>`;
|
||||
if(st==="done")return `<div class="hl done">Delivered</div><div class="big" style="font-size:34px">${fDW(o.ss)}</div><p>${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.</p>`;
|
||||
if(st==="queue")return `<div class="hl prog">Pressing slot booked</div><div class="big" style="font-size:34px">Starts about ${fDT(e.start)}</div><p>Planned on press ${e.press}${pById(e.press).kind==="duplex"?", a Newbilt Duplex":", the Newbilt Classic"}.</p><p>Your stampers are measured and in the rack. Estimated delivery <b style="color:var(--ink)">${fDW(e.t)}</b>.</p>`;
|
||||
if(st==="ship"||st==="fin")return `<div class="hl done">${st==="ship"?"On the way":"Packing"}</div><div class="big" style="font-size:34px">Arrives about ${fDW(e.t)}</div><p>${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.`}</p>`;
|
||||
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.`,`<table class="t">${o.files.len.map((m,i)=>`<tr><td>Side ${SIDES[i]}</td><td class="num">${Math.floor(Math.round(m*60)/60)}:${pad(Math.round(m*60)%60)}</td><td class="num faint">at most ${o.files.lim} min</td><td>${lim(true)}</td></tr>`).join("")}<tr><td>True peak</td><td class="num">${f1(o.files.peak)} dBTP</td><td></td><td>${lim(true)}</td></tr></table>`));
|
||||
if(o.lac&&done("cut"))out.push(card("Your lacquers","inspected",`Cut on Lathe 1 and checked under the microscope. Your run-out text is scribed by hand next to the run-out groove.`,`<table class="t"><tr><th>Lacquer</th><th class="num">Groove width</th><th class="num">Depth</th><th>Run-out</th></tr>${o.lac.map(l=>`<tr><td class="mono">${l.id}</td><td class="num">${Math.round(l.w)} µm</td><td class="num">${Math.round(l.dep)} µm</td><td class="mono">${esc(l.scribe)}</td></tr>`).join("")}</table>`));
|
||||
if(o.mo&&(done("plate")||o.si===SI.plate)){const inb=o.si===SI.plate;
|
||||
out.push(card("Your metal parts",done("prep")?"measured":"",inb?`In the bath now: ${esc(subStep(o).toLowerCase())}. `+(o.repress?"":"From your lacquer we grow a father, from the father a mother, and from the mother the stampers."):`From your lacquer${o.repress?" (first pressing)":""} we grew a father, a mother and ${o.sets.length*2} stampers. The mother stays in our archive for represses.`,
|
||||
`<div class="gen">${o.lac?`<span>${o.lac[0].id}</span><em>→</em>`:""}${o.fa?`<span>${o.fa[0].id}</span><em>→</em>`:""}<span>${o.mo[0].id}</span><em>→</em><span>${o.sets[0].st[0].id}${o.sets.length>1?" +"+(o.sets.length-1):""}</span></div>${inb?bar(prog(o),"metal"):""}${done("prep")?stamperTable(o):""}`,done("prep")));}
|
||||
out.push(card("Your metal parts",done("prep")?"measured":"",inb?`In the bath now: ${esc(subStep(o).toLowerCase())}. `+(o.repress?"":"From your lacquer we grow a father, from the father a mother, and from the mother the stampers."):`From your lacquer${o.repress?" (first pressing)":""} we grew a father, a mother and ${o.sets.length*2} stampers. The father and mother stay in our archive for represses.`,
|
||||
`<div class="gen">${o.lac?`<span>${o.lac[0].id}</span><em>→</em>`:""}${o.fa?`<span>${o.fa[0].id}</span><em>→</em>`:""}<span>${o.mo[0].id}</span><em>→</em><span>${o.sets[0].st[0].id}${o.sets.length>1?" +"+(o.sets.length-1):""}</span></div><p class="note" style="margin:0 0 8px">Your mother has given ${o.moUse||1} of about 10 stamper sets; after that a fresh mother is grown from your archived father.</p>${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:`,`<table class="t">${o.tp.sides.map(s=>`<tr><td>Side ${s.side}</td><td class="num">${f1(s.score)} % match</td><td class="num">${s.clicks} clicks</td><td class="num">${Math.round(s.noise)} dB</td></tr>`).join("")}</table>${o.gates[3]?`<p class="note">You approved it ${fDW(o.gates[3].t)}.</p>`:""}`));
|
||||
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 <span class="mono">${L.id}</span>, ${esc(MAT[L.mat].toLowerCase())}. Tested in our lab before release, then released by a test pressing.`,`<table class="t">${lotRow(L).map(([k,v,l,ok])=>`<tr><td>${k}</td><td class="num">${v}</td><td class="num faint">${l}</td><td>${lim(ok)}</td></tr>`).join("")}</table>`));
|
||||
|
||||
@@ -515,7 +515,7 @@ document.documentElement.setAttribute("data-theme",t);})();
|
||||
</div>
|
||||
<div class="rowc mt">
|
||||
<div class="field"><span class="fl">Test pressings for you</span><div class="stepper"><button type="button" data-act="tps" data-d="-1" aria-label="Fewer">−</button><b id="tpsV">5</b><button type="button" data-act="tps" data-d="1" aria-label="More">+</button></div></div>
|
||||
<p class="hint" id="srcHint" style="max-width:380px;margin:0">You hear and approve a real pressing before the run. The mother plate is archived, so a repress later skips cutting and plating.</p>
|
||||
<p class="hint" id="srcHint" style="max-width:380px;margin:0">You hear and approve a real pressing before the run. The father and mother are archived, so a repress later skips cutting.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -691,7 +691,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 measured.",
|
||||
tp:"First test pressings made and sent to the artist.",
|
||||
g3:"The artist approved the test pressing.",
|
||||
@@ -1014,7 +1014,7 @@ function syncControls(){
|
||||
$$("#fClean button").forEach(x=>{x.disabled=blk;x.title=blk?"Black vinyl needs no cleaning":"";});$("#fClean").classList.toggle("off",blk);
|
||||
$("#cleanHint").textContent=blk?"Only for colour vinyl.":S.cleaning?"The press is purged before your run, so no trace of the previous colour gets in. Light colours can still show the odd speck.":"Saves the purge, but some records can carry streaks of the previous colour.";
|
||||
const lq=S.source==="lacquer";$$(".choice[data-k=mastering]").forEach(x=>{x.disabled=lq;x.title=lq?"Your lacquer is already cut and mastered":"";if(lq){x.classList.remove("on");x.setAttribute("aria-pressed","false");}});
|
||||
$("#srcHint").textContent=lq?"Your lacquer goes straight to plating. You still hear and approve a test pressing, and the mother is archived for represses.":S.source==="tape"?"Your tape is transferred in-house, then cut. You hear and approve a real pressing before the run.":"You hear and approve a real pressing before the run. The mother plate is archived, so a repress later skips cutting and plating.";
|
||||
$("#srcHint").textContent=lq?"Your lacquer goes straight to plating. You still hear and approve a test pressing, and the father and mother are archived for represses.":S.source==="tape"?"Your tape is transferred in-house, then cut. You hear and approve a real pressing before the run.":"You hear and approve a real pressing before the run. The father and mother are archived, so a repress later skips cutting.";
|
||||
const dl=$("#dropLabel"),offL=S.labels!=="printed";dl.classList.toggle("off",offL);$("#fileLabel").disabled=offL;dl.title=offL?"Plain labels have no print":"";
|
||||
const dj=$("#dropJacket"),offJ=!jacketArt();dj.classList.toggle("off",offJ);$("#fileJacket").disabled=offJ;dj.title=offJ?(S.jacket==="none"?"You supply your own jacket":"A plain jacket has no print"):"";
|
||||
$$(".qchips .chip").forEach(c=>c.classList.toggle("on",+c.dataset.q===S.qty));
|
||||
@@ -1218,7 +1218,7 @@ function passportHTML(){
|
||||
if(by("g2"))it.push(["Mastered for vinyl","Master approved by the artist",by("g2").date]);
|
||||
if(by("cut"))it.push(["Cut to lacquer","Lacquer "+lac+(S.catno?", \u201C"+S.catno+" A\u201D":", serial")+" scribed in the run-out",by("cut").date]);
|
||||
else it.push(["Lacquer received","Cut by the artist's studio, inspected under the microscope on arrival",P.start]);
|
||||
it.push(["Plated in-house","Father "+fa+" → mother "+mo+" (archived for represses) → stamper "+st,by("plate").date]);
|
||||
it.push(["Plated in-house","Father "+fa+" → mother "+mo+" (both archived for represses) → stamper "+st,by("plate").date]);
|
||||
it.push(["Test pressing approved","Heard and approved by the artist",by("g3").date]);
|
||||
it.push(["Pressed","Press D1-B (Newbilt Duplex) at "+ts.slice(11)+", compound lot "+lot+", press data logged for this cycle",run.date]);
|
||||
it.push(["Inspected","Optical inspection passed: every record is checked. The stamper's first records and about 1 in 50 after are compared with the master by audio analysis",run.date]);
|
||||
@@ -1228,7 +1228,7 @@ function passportHTML(){
|
||||
<div class="pp-key"><span>Record key: stamper · press · cycle time · side</span><code>${st}-A1 · D1-B · ${ts} · side A</code></div>
|
||||
<ol class="pp-chain">${it.map(([t,d,dt])=>`<li><span class="ci ok">✓</span><div><b>${t}</b><small>${esc(d)}</small></div><span class="dt">${fmtD(dt)}</span></li>`).join("")}</ol>
|
||||
<p class="hint">What 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.</p>
|
||||
<div class="repress"><p><b>Sold out? Open a repress.</b> 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.</p><button type="button" class="btn ghost" data-act="repress">Open repress pre-orders</button></div></div>`;
|
||||
<div class="repress"><p><b>Sold out? Open a repress.</b> 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.</p><button type="button" class="btn ghost" data-act="repress">Open repress pre-orders</button></div></div>`;
|
||||
}
|
||||
function preview(id){
|
||||
const t=S.tracks.find(x=>x.id===id);
|
||||
|
||||
@@ -189,17 +189,33 @@ archived, a fresh stamper is pulled and the order runs:
|
||||
|
||||
Two commercial consequences worth acting on:
|
||||
|
||||
- **Choose the 3-step process and archive mothers.** Stamper Discs
|
||||
offers both 1-step and 3-step. A 1-step stamper is faster and cheaper
|
||||
for a one-off, but it is a single-use part: there is no mother to go
|
||||
back to, so a repress restarts at lacquer cutting and costs the
|
||||
- **Choose the 3-step process and archive fathers and mothers.** Stamper
|
||||
Discs offers both 1-step and 3-step. A 1-step stamper is faster and
|
||||
cheaper for a one-off, but it is a single-use part: there is no mother
|
||||
to go back to, so a repress restarts at lacquer cutting and costs the
|
||||
customer six weeks and a new cutting fee. 3-step buys the two-week
|
||||
repress, and that repress is the highest-margin order the plant will
|
||||
ever take.
|
||||
- **The mother archive is an asset with a shelf life.** It needs the
|
||||
ever take. Decided (October 2026): the plant keeps the **father as well
|
||||
as the mother** of every side.
|
||||
- **How many represses a mother carries.** The common rule of thumb is
|
||||
about **10 stamper sets per mother** before it degrades (Third Man
|
||||
Pressing's FAQ; a Nashville plater quoted by WPLN, both checked October
|
||||
2026); quality-minded sources give fewer: 5 (The VinyLab), 6 to 8
|
||||
(Stereo Review, 1962, quoted on pspatialaudio.com). At 1,000 to 2,000
|
||||
pressings a stamper that is roughly 10,000 to 20,000 records per side,
|
||||
or about ten represses of a few hundred to 1,500 copies. A father grows
|
||||
about 5 to 10 mothers (pspatialaudio.com; Third Man: up to 10), so with
|
||||
the father archived a worn mother is replaced by plating a new one
|
||||
(about an hour in the bath plus the listening check) instead of
|
||||
re-cutting, and a title reaches roughly 50,000 to 100,000 records
|
||||
before a new lacquer. These are industry rules of thumb, not this
|
||||
plant's figures: the galvanics vendors are asked for theirs
|
||||
([galvanics](equipment/galvanics.md#open-questions-for-the-quotes)), and
|
||||
the factory application counts stamper sets per mother.
|
||||
- **The archive is an asset with a shelf life.** It needs the
|
||||
storage conditions and the genealogy records that
|
||||
[traceability.md](traceability.md) already specifies, and a stated
|
||||
retention policy — how long a customer's mothers are kept before
|
||||
retention policy: how long a customer's fathers and mothers are kept before
|
||||
they are scrapped or returned. That policy does not exist yet and
|
||||
should be in the customer contract, not discovered later.
|
||||
|
||||
|
||||
Reference in new issue
Block a user