AccessibilityID reference

June 13, 2026 · View on GitHub

Every interactive SwiftUI element in the Phase 01 app sets one of the strings below as its accessibilityIdentifier. This file is the flat reference: every constant in phase3/FilmScanner/Sources/ScanlightApp/AccessibilityIDs.swift has exactly one row. For the GUI ↔ CLI mapping and the schema explanation, see docs/automation.md. A consistency-check script enforces that this file and the Swift enum agree.

Schema version: 5

The workflow sidebar that replaced the 5-tab TabView (2026-06 UX redesign). Click a row to switch panes — automation drives the app by these IDs instead of the old app.tabs[...] tab labels.

ID constantDisplay labelType/control
btn-nav-setupSet upsidebar row
btn-nav-calibrateCalibratesidebar row
btn-nav-scanScansidebar row
btn-nav-developDevelopsidebar row
btn-nav-diagnosticsDiagnosticssidebar row
btn-nav-film-stocksFilm stockssidebar row
lbl-readiness-stripReadiness stripstatus region

Connection

ID constantDisplay labelType/control
btn-connectConnectbutton
btn-disconnectDisconnectbutton
field-portSerial porttext field

Status display

ID constantDisplay labelType/control
lbl-connection-statusConnection statuslabel
lbl-firmwareFirmware IDlabel
lbl-hardwareHardware IDlabel
lbl-led-tempLED temperaturelabel
lbl-vbusVBUSlabel

Channel controls

ID constantDisplay labelType/control
slider-redRed levelslider
slider-greenGreen levelslider
slider-blueBlue levelslider
slider-whiteWhite levelslider
btn-red-onTurn red onbutton
btn-green-onTurn green onbutton
btn-blue-onTurn blue onbutton
btn-white-onTurn white onbutton
btn-offAll channels offbutton

Shutter trigger

ID constantDisplay labelType/control
field-pulse-msPulse length (ms)text field
btn-fire-pulseFire shutter pulsebutton

Diagnostic / dev

ID constantDisplay labelType/control
lbl-last-errorLast errorlabel
scroll-logLogscroll view
btn-clear-logClear logbutton

Settings (Phase 06)

ID constantDisplay labelType/control
field-roll-nameRoll nametext field
btn-pick-outputChoose output folderbutton
lbl-output-pathOutput folder pathlabel
picker-trigger-modeTrigger modepicker
btn-pick-inboxChoose IED inboxbutton
lbl-inbox-pathIED inbox pathlabel
stepper-settle-msSettle (ms)stepper
btn-pick-ffcChoose FFC calibrationbutton
lbl-ffc-pathFFC calibration pathlabel
picker-camera-modelCamera modelpicker
field-sony-ipSony SDK IP addresstext field
field-sony-macSony SDK MAC addresstext field
field-sony-userSony Access Auth usertext field
field-sony-passwordSony Access Auth passwordsecure field
btn-sony-connectCheck Sony SDK connectionbutton
lbl-sony-connection-statusSony SDK connection statuslabel
btn-sony-live-view-startOpen Sony SDK live-view previewbutton
btn-sony-live-view-stopClose Sony SDK live-view previewbutton
lbl-sony-live-view-statusSony SDK live-view statuslabel
img-sony-live-viewSony SDK live-view imageimage
toggle-stream-compositeStream compositetoggle
picker-composite-formatComposite formatpicker

Scan (Phase 07)

ID constantDisplay labelType/control
btn-start-scanStart Scanbutton
btn-stop-scanStop Scanbutton
btn-capture-frameCapture Framebutton
btn-retake-frameRetakebutton
lbl-frame-counterFrame counterlabel
list-frame-statusFrame status listlist
lbl-composite-queueComposite queue depthlabel
lbl-light-lockedLight locked (controlled by scan)label
btn-reconnect-lightReconnect Lightbutton

Calibration Wizard (Phase 14)

ID constantDisplay labelType/control
indicator-wizard-step-1Step 1 — Rig Checkstep indicator circle
indicator-wizard-step-2Step 2 — Exposurestep indicator circle
indicator-wizard-step-3Step 3 — Flat Fieldstep indicator circle
indicator-wizard-step-4Step 4 — Resultsstep indicator circle
btn-wizard-backBackbutton
btn-wizard-nextNext / primary actionbutton
btn-wizard-rerunRe-runbutton
lbl-rig-lightLight panel statuslabel
lbl-rig-firmwareFirmware statuslabel
lbl-rig-cameraCamera reachable statuslabel
lbl-rig-folderOutput folder statuslabel
lbl-exp-clip-rR channel clip fractionlabel
lbl-exp-clip-gG channel clip fractionlabel
lbl-exp-clip-bB channel clip fractionlabel
lbl-exp-level-rR channel LED levellabel
lbl-exp-level-gG channel LED levellabel
lbl-exp-level-bB channel LED levellabel
lbl-exp-verdict-rR channel exposure verdictlabel
lbl-exp-verdict-gG channel exposure verdictlabel
lbl-exp-verdict-bB channel exposure verdictlabel
lbl-exp-overallOverall exposure verdictlabel
picker-rebateRebate region pickerlabel
btn-rebate-clearAuto-detect rebatebutton
field-stock-profile-nameFilm stock profile nametext field
btn-stock-profile-saveSave stock RGB profilebutton
picker-stock-profileSaved stock RGB profile pickerpicker
btn-stock-profile-applyApply saved stock RGB profilebutton
lbl-ffc-falloff-rR channel fallofflabel
lbl-ffc-falloff-gG channel fallofflabel
lbl-ffc-falloff-bB channel fallofflabel
lbl-ffc-uniformity-rR channel uniformitylabel
lbl-ffc-uniformity-gG channel uniformitylabel
lbl-ffc-uniformity-bB channel uniformitylabel
lbl-ffc-verdict-rR channel FFC verdictlabel
lbl-ffc-verdict-gG channel FFC verdictlabel
lbl-ffc-verdict-bB channel FFC verdictlabel
lbl-ffc-overallOverall FFC verdictlabel
lbl-ffc-framesFrames averagedlabel
btn-ffc-useUse this calibrationbutton
lbl-results-shift-rgR-G registration shiftlabel
lbl-results-shift-gbG-B registration shiftlabel
lbl-results-reg-verdictRegistration verdictlabel
lbl-results-base-devBase deviationlabel
lbl-results-base-verdictBase neutrality verdictlabel
lbl-results-gain-rR channel gainlabel
lbl-results-gain-gG channel gainlabel
lbl-results-gain-bB channel gainlabel
lbl-results-roll-verdictRoll-level calibration verdictlabel

To add a new AX-ID, add the constant to AccessibilityIDs.swift first, then add a row here. The consistency-check script (scripts/check_docs_consistency.py, or tests/integration/test_docs_consistency.py once Phase 02 lands the integration test directory) will fail until this file matches the Swift source. To rename or remove an AX-ID, also bump schemaVersion in both the Swift file and the **Schema version:** line above.

In-app inversion, Sony live view, and film-stock controls

Added with the Develop (positive inversion), Sony live-view, and film-stock-profile features. Rows are derived from AccessibilityIDs.swift; keep this file in sync via scripts/check_docs_consistency.py.

ID constantDisplay labelType/control
btn-invert-pick-filesInvert pick filesbutton
btn-invert-pick-outputInvert pick outputbutton
btn-invert-runInvert runbutton
btn-scan-sony-live-view-startScan sony live view startbutton
btn-scan-sony-live-view-stopScan sony live view stopbutton
btn-scan-stock-profile-applyScan stock profile applybutton
btn-stock-manager-deleteStock manager deletebutton
btn-stock-manager-saveStock manager savebutton
btn-stock-manager-use-currentStock manager use currentbutton
field-stock-manager-nameStock manager nametext field
img-scan-sony-live-viewScan sony live viewimage
lbl-invert-output-pathInvert output pathlabel
lbl-invert-statusInvert statuslabel
lbl-next-frameNext framelabel
lbl-scan-channel-promptScan channel promptlabel
lbl-scan-sony-live-view-statusScan sony live view statuslabel
lbl-scan-stock-profile-statusScan stock profile statuslabel
lbl-stock-manager-statusStock manager statuslabel
list-stock-managerStock managerlist
picker-scan-sony-live-view-rotateScan sony live view rotatepicker
picker-scan-stock-profileScan stock profilepicker
picker-sony-live-view-rotateSony live view rotatepicker
scroll-invert-logInvert logscroll view
slider-scan-sony-live-view-zoomScan sony live view zoomslider
slider-sony-live-view-zoomSony live view zoomslider
toggle-scan-sony-live-view-flipScan sony live view fliptoggle
toggle-scan-sony-live-view-invertScan sony live view inverttoggle
toggle-scan-sony-live-view-mirrorScan sony live view mirrortoggle
toggle-scan-sony-live-view-whiteScan sony live view whitetoggle
toggle-sony-live-view-flipSony live view fliptoggle
toggle-sony-live-view-invertSony live view inverttoggle
toggle-sony-live-view-mirrorSony live view mirrortoggle
toggle-sony-live-view-whiteSony live view whitetoggle