equipment
Electronic Load Molecule
Public Made by Adomby adom
Siglent SDL1020X-E electronic load equipment prototype: reconstructed carrier STEP/GLB, constant-current dashboard, serial-pinned SCPI driver, control-panel integration guide and purchase budget.
← Commit history
Document concept registration and six-clip narrated demo storyboard pending review
11 files changed
+164−3
docs/molecule-registration.mdadded+6@@ -0,0 +1,6 @@+# Concept molecule registration++Registered and confirmed in the Hydrogen account on 2026-10-07:+https://hydrogen.adom.inc/john/molecules/electronic-load-carrier-concept++The import reuses the published GLB. This is a visual carrier concept, not qualified equipment. No electrical footprint or native wire attach points are registered. Physical retention, terminal positions and scaffold interface still need measurement and qualification; connect the instrument through the documented external leads and USB/LAN only after hardware acceptance.
videos/edit.pyadded+32@@ -0,0 +1,32 @@+"""Build separately reviewable narrated clips; do not concatenate before storyboard review."""+from pathlib import Path+import subprocess,json,concurrent.futures+P=Path(__file__).resolve().parent+raw=lambda stamp:str(P/'raw'/f'window-10488978-20261007-{stamp}.mp4')+def duration(f):return float(subprocess.check_output(['ffprobe','-v','error','-show_entries','format=duration','-of','default=nw=1:nk=1',str(f)]))+scenes=[+ ('01','Start with the buck molecule','151404',[(15,55,1)],'Buck wiki and requirements; idle sections removed.'),+ ('02','Choose a commercial instrument','153501',[(4,49,1)],'Compare listed prices and CAD availability on the published selection page.'),+ ('03','Inspect the carrier concept','153044',[(0,20,2),(26,60,1)],'Orbit at 2x for the first ten seconds, then inspect the exploded carrier at normal speed.'),+ ('04','Set a constant-current load','153637',[(0,42,1)],'Simulation: enable 0.1 A, step to 0.5 A and 1 A, then return to 0.1 A.'),+ ('05','Check limits and export data','153637',[(46,90,1)],'Simulation: reject 1.5 A, turn OFF, export CSV, then inspect/reset the model.'),+ ('06','Publish the reusable equipment package','153350',[(0,47,1)],'Public wiki: inspect package contents, launch instructions, budget and qualification status.')]++def build(scene):+ n,title,stamp,segments,description=scene;audio=P/'narration'/f'{n}.mp3';target=duration(audio)+.6+ chains=[]+ for i,(start,end,speed) in enumerate(segments):chains.append(f'[0:v]trim=start={start}:end={end},setpts=(PTS-STARTPTS)/{speed}[v{i}]')+ chains.append(''.join(f'[v{i}]' for i in range(len(segments)))+f'concat=n={len(segments)}:v=1:a=0[join]')+ label=title.replace("'",'')+ vf=f"[join]scale=1920:1000:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:55:color=0x0d1117,setsar=1,fps=30,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='{n} / {label}':x=36:y=15:fontsize=28:fontcolor=white"+ if n=='03':vf+=",drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='2x playback':x=w-tw-36:y=16:fontsize=25:fontcolor=0x00b8b1:enable='lt(t,10)'"+ vf+=f',tpad=stop_mode=clone:stop_duration=1,trim=duration={target}[v]';chains.append(vf)+ chains.append(f'[1:a]loudnorm=I=-16:TP=-1.5:LRA=11,apad,atrim=duration={target}[a]')+ out=P/'clips'/f'{n}.mp4'+ cmd=['ffmpeg','-nostdin','-y','-v','error','-threads','2','-i',raw(stamp),'-i',str(audio),'-filter_complex_threads','2','-filter_complex',';'.join(chains),'-map','[v]','-map','[a]','-c:v','libx264','-threads','2','-preset','veryfast','-crf','22','-pix_fmt','yuv420p','-g','30','-keyint_min','30','-c:a','aac','-b:a','160k','-movflags','+faststart',str(out)]+ subprocess.run(cmd,check=True,stdin=subprocess.DEVNULL)+ print(n,duration(out),flush=True)+ return {'id':n,'title':title,'description':description,'file':f'clips/{n}.mp4','narration':f'narration/{n}.txt','duration':duration(out),'source':f'raw/window-10488978-20261007-{stamp}.mp4','segments':[{'start':s,'end':e,'speed':v} for s,e,v in segments]}+if __name__=='__main__':+ with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex:clips=list(ex.map(build,scenes))+ (P/'storyboard.json').write_text(json.dumps({'status':'awaiting per-clip review; not concatenated','duration_seconds':sum(c['duration'] for c in clips),'clips':clips},indent=2))
videos/index.htmladded+1@@ -0,0 +1 @@+<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Electronic Load / Clip Review</title><link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' fill='%2300b8b1'/%3E%3C/svg%3E"><style>:root{color-scheme:dark}body{margin:0;background:#0d1117;color:#e6edf3;font:16px system-ui}header{height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:#161b22;border-bottom:1px solid #30363d}main{max-width:1400px;margin:auto;padding:30px}h1{font-size:32px}p{color:#a4b0bd;line-height:1.6}.grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}article{padding:20px;background:#161b22;border:1px solid #30363d;border-radius:10px}video{width:100%;border-radius:6px}h2{font-size:20px}a{color:#00c8bd}small{color:#a4b0bd}.note{border-left:3px solid #00b8b1;padding-left:16px}@media(max-width:850px){.grid{grid-template-columns:1fr}}</style><header><b>ADOM / ELECTRONIC LOAD</b><span>VIDEO CLIP REVIEW</span><a href="https://wiki.adom.inc/adom/electronic-load-molecule">Wiki</a></header><main><h1>Building an electronic load molecule</h1><p id="summary">Loading six narrated clips…</p><p class="note">Review each numbered clip. Tell me which clips need changes, or say “all six look good.” These are edited recordings of the digital prototype, with simulation and mechanical qualification limits kept visible. No final movie has been assembled or uploaded.</p><div class="grid" id="clips"></div></main><script>fetch('storyboard.json').then(r=>r.json()).then(d=>{document.querySelector('#summary').textContent=`Six narrated clips · ${Math.floor(d.duration_seconds/60)} min ${Math.round(d.duration_seconds%60)} sec total · 1080p · pauses removed · labelled 2× inspection segment`;for(const c of d.clips){let a=document.createElement('article');a.innerHTML=`<h2>${c.id} / ${c.title}</h2><video controls playsinline preload="metadata" poster="${c.file.replace('.mp4','.jpg')}" src="${c.file}"></video><p>${c.description}</p><small>${c.duration.toFixed(1)} seconds · <a href="${c.narration}">Narration script</a> · <a href="${c.file}" download>Download clip</a></small>`;document.querySelector('#clips').append(a)}});</script></html>
videos/narration/01.txtadded+1@@ -0,0 +1 @@+This build starts with a simple question: how do we test our twelve volt to five volt buck molecule under a controlled load? The board is designed for one amp, which means five watts at its output. We found the existing board on the Adom wiki and checked its terminals and simulated performance. The load belongs on the five volt output and its return, not on the divided voltage monitor. The goal is reusable workcell equipment: a commercial electronic load, a molecule carrier, digital assets, remote controls, and a repeatable test procedure. Today we are building the digital prototype. No physical buck measurement is being claimed.
videos/narration/02.txtadded+1@@ -0,0 +1 @@+We compared commercial instruments from Siglent, Rigol, and B and K Precision. The selected Siglent lists at five hundred seventy four dollars and supports remote control, constant current operation, and voltage and current readback. We also searched for manufacturer three dimensional models. One instrument with downloadable STEP data weighed more than the scaffold's entire project allowance. We therefore reconstructed the Siglent from its documented overall dimensions. The instrument is two hundred fifty six millimeters wide, four hundred ten deep, and weighs five point eight kilograms. Those dimensions are documented. The small details and connector locations are estimates, and they remain labelled that way.
videos/narration/03.txtadded+1@@ -0,0 +1 @@+Here is the carrier concept as an actual generated model. Rotating it checks the overall space requirement; the exploded view separates the instrument from its support. The carrier datum follows the scaffold's thirty two millimeter grid, but the heavy instrument needs a rigid load path. We cannot assume the electrical contacts are qualified structural fasteners. The package includes both STEP and G L B assets, plus the parametric source and a list of unverified dimensions. Before fabrication, we need measured feet and connectors, cooling clearances, a finished support attachment, and robot payload checks. This is a useful planning twin, not yet a production qualified one.
videos/narration/04.txtadded+1@@ -0,0 +1 @@+Now the dashboard brings the controls together. We select a current, enable the input, and watch voltage, current, and absorbed power update. The demonstration is explicitly simulated because the instrument has not been purchased. The hardware adapter uses the manufacturer's command set and binds to the exact instrument model and serial number. It starts with the input off and zero current demand. For this buck, the software limits requested current to one amp even though the commercial instrument can handle much more. The chart is slow instrument readback. A fast transient test still needs the instrument's own timing and an oscilloscope at the board.
videos/narration/05.txtadded+1@@ -0,0 +1 @@+The boundary checks matter as much as the happy path. A request above one amp is rejected. Turning the load off is a separate action with readback. A control lease expires if the dashboard stops renewing it, and the software attempts to disable the input. We also tested invalid numbers and connection failures. A broken link cannot guarantee the hardware turned off, so production use needs an independent shutdown path. Measurements export to a comma separated file with timestamps and a simulation flag. That gives later users a clear record of what was requested and what was observed, without confusing a software demonstration with a calibrated test.
videos/narration/06.txtadded+1@@ -0,0 +1 @@+Finally, the wiki repository puts the equipment in one reusable place: the dashboard, operation skill, driver, models, wiring procedure, and purchase budget. The prototype equipment subtotal is about seven hundred forty four to nine hundred fourteen dollars before tax, shipping, and engineering. Some entries are current listings; mounting and cable costs are planning allowances. The control panel powers the buck and hosts the communication path. The electronic load uses its own mains power. What remains is physical qualification: buy the instrument, measure the mounting interfaces, validate shutdown and calibration, and run the real buck. The digital package is the starting point for that repeatable workcell test.
videos/shotlog.jsonadded+14@@ -0,0 +1,14 @@+{+ "date": "2026-10-07",+ "target": "AdomLapper",+ "window": "electronic-load-molecule-capture",+ "takes": [+ {"file":"raw/window-10488978-20261007-151404.mp4","purpose":"Buck requirement discovery and native wiki 3D","duration_s":111,"use":"opening clip; exclude final vendor popup"},+ {"file":"raw/window-10488978-20261007-152146.mp4","purpose":"Dashboard development debugging","duration_s":180.033,"use":"REJECTED: renderer and proxy-origin bugs visible"},+ {"file":"raw/window-10488978-20261007-153044.mp4","purpose":"Corrected model orbit and exploded inspection; simulated current changes","duration_s":92.133,"use":"CAD clip"},+ {"file":"raw/window-10488978-20261007-153350.mp4","purpose":"Published public wiki model, contents and installation","duration_s":52.733,"use":"closing wiki clip"},+ {"file":"raw/window-10488978-20261007-153501.mp4","purpose":"Commercial comparison and CAD tradeoff","use":"selection clip"},+ {"file":"raw/window-10488978-20261007-153637.mp4","purpose":"Scripted UI exercise: 0.1/0.5/1 A, reject 1.5 A, OFF, CSV, explode/reset","duration_s":110.5,"use":"control and boundary clips; software simulation only"}+ ],+ "policy":"Only these project-local public-content files may be used as edit inputs. Raw captures are retained locally; narration generated with adom-tts. Review each edited clip before final concatenation or upload."+}
videos/storyboard.json+105−3@@ -1,5 +1,107 @@ {- "target_seconds": 270,- "status": "capture and edit in progress",- "clips": []+ "status": "awaiting per-clip review; not concatenated",+ "duration_seconds": 250.474666,+ "clips": [+ {+ "id": "01",+ "title": "Start with the buck molecule",+ "description": "Buck wiki and requirements; idle sections removed.",+ "file": "clips/01.mp4",+ "narration": "narration/01.txt",+ "duration": 38.904,+ "source": "raw/window-10488978-20261007-151404.mp4",+ "segments": [+ {+ "start": 15,+ "end": 55,+ "speed": 1+ }+ ]+ },+ {+ "id": "02",+ "title": "Choose a commercial instrument",+ "description": "Compare listed prices and CAD availability on the published selection page.",+ "file": "clips/02.mp4",+ "narration": "narration/02.txt",+ "duration": 43.733333,+ "source": "raw/window-10488978-20261007-153501.mp4",+ "segments": [+ {+ "start": 4,+ "end": 49,+ "speed": 1+ }+ ]+ },+ {+ "id": "03",+ "title": "Inspect the carrier concept",+ "description": "Orbit at 2x for the first ten seconds, then inspect the exploded carrier at normal speed.",+ "file": "clips/03.mp4",+ "narration": "narration/03.txt",+ "duration": 42.433333,+ "source": "raw/window-10488978-20261007-153044.mp4",+ "segments": [+ {+ "start": 0,+ "end": 20,+ "speed": 2+ },+ {+ "start": 26,+ "end": 60,+ "speed": 1+ }+ ]+ },+ {+ "id": "04",+ "title": "Set a constant-current load",+ "description": "Simulation: enable 0.1 A, step to 0.5 A and 1 A, then return to 0.1 A.",+ "file": "clips/04.mp4",+ "narration": "narration/04.txt",+ "duration": 39.936,+ "source": "raw/window-10488978-20261007-153637.mp4",+ "segments": [+ {+ "start": 0,+ "end": 42,+ "speed": 1+ }+ ]+ },+ {+ "id": "05",+ "title": "Check limits and export data",+ "description": "Simulation: reject 1.5 A, turn OFF, export CSV, then inspect/reset the model.",+ "file": "clips/05.mp4",+ "narration": "narration/05.txt",+ "duration": 40.3,+ "source": "raw/window-10488978-20261007-153637.mp4",+ "segments": [+ {+ "start": 46,+ "end": 90,+ "speed": 1+ }+ ]+ },+ {+ "id": "06",+ "title": "Publish the reusable equipment package",+ "description": "Public wiki: inspect package contents, launch instructions, budget and qualification status.",+ "file": "clips/06.mp4",+ "narration": "narration/06.txt",+ "duration": 45.168,+ "source": "raw/window-10488978-20261007-153350.mp4",+ "segments": [+ {+ "start": 0,+ "end": 47,+ "speed": 1+ }+ ]+ }+ ] }