Aplicació local i offline per coordinar quatre càmeres durant l’eclipsi total del 12 d’agost de 2026. La GUI prepara una cronologia C1–C4 i executa un worker PTP independent per cos; cap IA participa en la captura.
- Mission first: un problema en una càmera no atura les altres, UNA CAMERA DEGRADADA s'ha d'intentar seguir utilitzant per la missió, costi el que costi. Això obliga a esgotar les continuacions segures, però mai a repetir un trigger ambigu ni a continuar amb identitat/propietat divergent, estat físic desconegut després d’un write o un ledger no garantible; aquests límits aturen només el canal afectat.
- Simplicitat: l’operador veu què passarà i rep només instruccions útils.
- Agentic AI abans de la missió: els agents poden mesurar i optimitzar perfils, però el run és determinista, local i auditable.
Un resultat de captura ambigu consumeix només aquella acció: no es repeteix, però el mateix cos conserva les accions futures si continua identificat, controlat i operatiu. Una incidència d'un cos no atura els altres.
ISO 100 és el baseline recomanat per a les Sony. La Canon 6D usa ISO 1600 com
a baseline de disseny per desplaçar la seva finestra AEB nativa de 6 EV cap a
la corona feble: no pot fer un canvi ràpid de 9 EV només amb bràqueting. En
tots els cossos l’ISO és propietat de l’operador i sempre advisory; cap valor
—inclòs Auto, 0 o desconegut— pot donar FAILED ni cancel·lar una missió.
La versió 1.0.2 mostra ISO 100, ISO 200 i ISO 400 al
footer. Només un clic explícit de l’operador autoritza el write preflight a
cada cos PTP suportat i identificat exactament; cada intent exigeix readback i
acaba literalment SET o NOT SET. Els botons queden deshabilitats mentre hi
ha missió, scan, Sync UTC o una altra operació de càmera. No són prerequisit
de Start mission, no s’usen durant el run i cap resultat ISO degrada altres
canals.
Durant les fases parcials, els quatre canals afegeixen una captura documental per minut entre C1 i C2−30 s i entre C3+30 s i la finestra quieta de C4. Els cores de contactes i totalitat continuen sent específics de cada cos. En Canon amb AEB natiu, una captura significa un únic press AEB3 i tres RAW esperats.
La font pública actual és Eclipse Command 1.0.2 (V1.02). Aquesta release publica el codi font; no adjunta cap bundle de l'aplicació.
La V1.00 hi va portar les escales d'exposició noves dels tres cossos: els dos Sony passen els contactes a base 1/800 i el mig de la totalitat es converteix en una muntanya 1/4 → 1 s → 1/4 amb nou esglaons i 2,00 EV de salt màxim, i la R6 passa les finestres de contacte a 1/3200, les allarga fins a C2−20 i C3+20 i canvia el fotograma de 15 s per un bloc fosc de 2 s ×3 i 10,3 s ×3 al mig de la totalitat. El TEST RUN passa a durar 1 min 31 s, que és el terra de planificació.
La V1.01 no toca cap geometria, cap exposició ni cap cadència: corregeix els set defectes d'operador que Pere va reportar —quatre dels quals eren la mateixa fallada, el dial de mode de la R6 a B, que ara es reconeix i es diu pel seu nom en lloc de reintentar-se quatre minuts— i hi afegeix dues features: la versió al costat del nom a la capçalera i el trasllat de la descripció del programa a la cel·la de càmera.
La V1.02 treu aquella descripció gegant del hover: la fila i el selector
mostren només A7III · f/2.8, 6D · f/5.5, A7RIIIA · f/2.8 i
R6 III · f/5.5, mentre el tooltip conserva un resum curt i la identitat
PTP/USB exacta. Afegeix avisos de veu a C2−5 min, −2 min i −1 min, i a
C4−1 min. A la R6, el setter d'aproximació comença a C2−15,00 i el primer
fotograma a C2−14,75: desapareixen exactament vuit 1/3200 del prefix i
tot el programa des de C2−5,65 fins a C4 queda idèntic a la V1.01.
✅ I ara l'escala ja ha volat. Set TEST RUN pel binari del bundle el 9
d'agost a la nit, tots amb totalitat de 91,0 s: el de flota amb els tres
cossos alhora (20260809T233027) fa 198 fotos, zero degradades i zero
exposicions divergents, i el darrer (20260809T234629, A7RIIIA i R6) en fa
163 de 163 amb retard màxim 1,473 ms i cap mission_warning. Volable no
vol dir qualificat: òptica, RAW i seguiment continuen sent gates oberts.
Informes publicats: QA V1.02 i
QA 0.9.0.
- executable SHA-256:
61227d418ec7a74a6fa11c934970d85218466ffd067754ec68efbc3334ba9f4f; - manifest de 51 fonts SHA-256:
d06de97146e521afeb1871c3cfd06c5944faf3c40dbd96898f53c30d734a2f6a, i els 51 inputs incrustats tenen el mateix SHA que la font viva; - Sony A7RIIIA: base de contacte 1/800, sempre tres àncores d'earthshine 1/8 · 1 · 8 s i de zero a tres tríades de corona a base 1/4 segons la durada. L'A7III usa la seva pròpia cua i ordre de ràfega; cap timing no s'hereta entre cossos.
- R6 III: una foto per exposició, Drive
Single, AEBoff, contactes a 1/3200, escales A/B completes i bloc fosc 2 s ×3 + 10,3 s ×3. El cue de filtre continua a C2−20 i dona cinc segons abans del setter C2−15. - A 91 s, la R6 V1.02 espera 109 captures de nucli + cinc documentals = 114, contra 117+5 a la V1.01. Totalitat 55, parcials posteriors 34, setters 29 i tota la geometria no eliminada són invariants.
- El trigger R6 continua sent
Press Full MF→Release; un trigger ambigu es consumeix i no es repeteix. Un setter només admet un reintent davant un rebuig net que provi que el valor no s'ha adoptat. Check cameras nowconvergeix ajustos abans d’armar i no captura. ISO, checklist i deute de qualificació són advisory i mai un gate deStart mission.- En Canon
card_only, zero descàrregues locals és N/A: un ledger complet i net pot donarCOMPLETE, però CR2/CR3 continua pendent del manifest exclusiu.
El bundle és arm64, ad-hoc i no notaritzat. Inclou Python i Qt, però necessita
gphoto2 al Mac. Si macOS el bloqueja la primera vegada, obre’l explícitament
des de Finder o Configuració del Sistema.
El repositori públic és PeterWar/Eclipse-Command. En un Mac Apple silicon amb Homebrew:
brew install gphoto2 python@3.12
git clone https://github.com/PeterWar/Eclipse-Command.git
cd Eclipse-Command
python3.12 -m venv gui/.venv312
gui/.venv312/bin/python -m pip install -r gui/requirements.txtAbans d’adaptar una càmera, un agent ha de llegir sencers AGENTS.md,
CLAUDE.md i PROTOCOL_UNIVERSAL_ALTA_CAMERA_LLM.md. Canon, Sony i Nikon no
comparteixen automàticament timings, opcions PTP, brackets ni límits de buffer.
Nikon és una ruta d’adaptació prevista, no compatibilitat demostrada.
El backend públic és exclusivament gphoto2/libgphoto2. Codi o material no
publicat, llicenciat separadament o procedent d'un backend diferent no forma
part del repositori ni dels assets de release.
Eclipse Command és programari beta i s'ha d'assajar de principi a fi amb cada cos, firmware, cable, targeta i tren òptic exactes abans de l'eclipsi. No substitueix un filtre solar certificat, la verificació de focus ni la decisió de l'operador. La llicència MIT el proporciona tal com és, sense garantia. L'evidència Canon i Sony del projecte és body-specific; Nikon continua sense prova física i requereix backend, perfil, manifest RAW i qualificació propis.
El TEST RUN complet de 98,8 s es va executar amb el bundle 0.7.2. L’A7III encara usava l’AP130 i la Canon estava a ISO 100; és evidència del scheduler i d’aquells contractes, no una qualificació física del 300GM o d’ISO 1600:
| Càmera | Captures confirmades | Comportament rellevant |
|---|---|---|
| Sony A7III | 60/60 JPEG | primera a C1; última a C4−8 s |
| Sony A7RIIIA | 83/83 JPEG; 72 en totalitat | dues exposicions de 3,2 s; bracket final a C3−3,1 s |
| Canon 6D | 31 triggers; 93/93 commits esperats card-only | AEB ±3: tres RAW esperats per press; sense manifest CR2 exclusiu |
No hi va haver misses, skips, warnings de cronologia ni ràfega exactament a
C4. El run és a
controller/runs/codex_20260802_gui_072_final/runs/20260802T140916_multi_camera_mission_run.
Això acredita el TEST RUN, no tota la ciència final. Encara falten:
- A7III: gate SD/ARW i resiliència física propis del cos;
- A7RIIIA: delta SD ARW exclusiu i prova solar/òptica amb el 300 mm f/2,8;
- Canon 6D: manifest CR2 pre/post exclusiu, Stage B i prova solar/òptica;
- Canon R6 Mark III: els gates AEB3 G1/G5/G40 són PASS de transport acotat i
el G40 té delta CFexpress exclusiu +120. El core materialitza 40 press,
120 CR3 esperats i 105 durant totalitat. Un TEST RUN posterior va adoptar
sis setters dinàmics amb readback exacte i 40/40 grups, però continua
card_only_committed. Falten el gate d’endurance de la nova cadència, H90, tracking/VSD90SS+MF i assaig solar/òptic/científic; el perfil continua candidat, no producció.
Aquests deutes es mostren com a informació del programa, no com a WARNING.
No han de tornar a deixar la Canon 6D ni el programa acotat R6 en
PROGRAM BLOCKED, ni cancel·lar les altres càmeres. El checklist tampoc
genera WARNING: és només un recordatori editable.
- Connecta les càmeres. L’ordre físic dels cables USB és indiferent: el programa resol cada cos per identitat, no per número de port.
- Obre l’app i introdueix C1, C2, C3 i C4 en UTC. El mode
TEST RUNcrea una cronologia curta, però no dispara per si sol. - Revisa les càmeres detectades i els warnings. Una càmera desconeguda queda
visible com
NO PROGRAMi no rep writes ni triggers. - Completa el checklist físic, especialment filtre solar, focus, bateria i
espai a targeta. El balanç de blancs no l'has de tocar: si el cos porta
automàtic,
Check cameras nowl'hi posa aDaylight. La suspensió del Mac tampoc: mentre hi ha un run en marxa l'app el reté despert, també amb bateria. - Ajusta manualment la ISO que vulguis a cada cos o usa una de les accions preflight explícites. Un clic autoritza un sol intent amb readback; l'ISO mai es converteix en un gate de missió.
- Activa l’àudio si vols recordatoris de veu en anglès. Els avisos automàtics
i el cronograma esperen
Start mission;Test audiocontinua sent una prova manual explícita. - Si l’UTC no és
BOUNDED, premSync UTC: comprova Internet/NTP sense escriure, demana autenticació nativa només sitime.apple.comrespon i accepta l’èxit únicament amb un bound del kernel de 400 ms o millor. Sense connexió no toca el rellotge ni bloqueja la missió després de l’avís. - Prem
Start mission. El botó indica el nombre real de càmeres llançables i engega el cronograma i els avisos. Stop safelyatura cronograma i veu, conservaSTOPPEDsense tornar a mostrarCONTACTS ALREADY IN PROGRESS/ELAPSED, i demana cleanup independent a cada worker. Editar contactes oTEST RUNobre un pla nou.
La salut UTC del header és informativa per a TEST RUN. Una missió científica absoluta pot exigir un gate UTC específic al perfil. La GUI mai assumeix que un ACK o JPEG descarregat demostra un RAW íntegre a la targeta.
gui/ aplicació Qt, packaging i QA
controller/ motor PTP, perfils, eines i proves
controller/profiles/ perfils de missió i de laboratori
controller/runs/ evidència física immutable
research/ decisions, mesures i història tècnica
tests/, runs/, outputs/ datasets i evidència; no són temporals
Perfils operatius actuals:
candidate_a7m3_300gm_short_checkpointed_1x5_3x9.json;candidate_a7r3a_300gm_short_checkpointed_1x5_3x9.json;candidate_canon6d_fixed_aeb3_continuous_cardonly_v2.json;candidate_r6m3_vsd90ss_cfexpress_cardonly_v1.json.
La Canon 6D utilitza controller/eclipse_capture_canon_v2.py; la R6 Mark III,
controller/eclipse_capture_r6m3.py; les Sony, controller/eclipse_capture.py.
No es transfereixen timings ni límits de buffer entre cossos.
La font canònica és aquesta arrel, no cap worktree sota .claude/. Abans de
modificar res, llegeix CLAUDE.md sencer i els dos fitxers de
.coordination/. No netegis el worktree amb ordres Git destructives.
Regressió principal:
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=gui QT_QPA_PLATFORM=offscreen \
gui/.venv312/bin/python -u -m unittest discover -s gui/tests
PYTHONDONTWRITEBYTECODE=1 \
gui/.venv312/bin/python -m unittest discover -s controller/tests
PYTHONDONTWRITEBYTECODE=1 gui/.venv312/bin/python \
gui/tools/qa_adaptive_timeline_fuzz.py .Build i QA macOS:
gui/build_macos_portable_app.sh
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=gui QT_QPA_PLATFORM=offscreen \
gui/.venv312/bin/python gui/tools/qa_macos_portable.py \
"gui/dist/Eclipse Command.app"Cal tenir SERIAL_WRITES, zero processos GUI/controller/gphoto2 propis i els
inputs congelats. Les llistes de perfils de runtime_manifest.py,
EclipseCommand.spec i source_manifest.py han de coincidir; una prova
específica ho verifica.
- CLAUDE.md: estat canònic, invariants i handoff per agents.
- AGENTS.md: arrencada mínima per qualsevol agent.
- Protocol universal: alta eficient d’una càmera nova.
- Protocol complet: mesures, fallades i gates.
- Índex de QA: baseline actual i informes històrics.
- Índex de recerca: evidència viva i documents d’arxiu.
Llicència MIT. © 2026 Pere Guerra Serra.