How openscan-org/openscan3 works
OpenScan3 is Raspberry Pi firmware for operating a photogrammetry scanner. A user reaches versioned HTTP APIs, creates a project and scan, and the firmware coordinates scanner hardware and background tasks to capture and manage scan photos. The repository also includes camera backends, scan analysis and focus-stacking services, cloud and external-trigger features, and device settings. The graph follows relationships visible in the excerpts and SOURCE INDEX; links to unsampled feature implementations are omitted where their callers are not shown.
Main entry points: main.py Firmware app · projects.py Project manager · scan_task.py Scan task · task_manager.py Task manager
Components 22
API and startup
- Firmware app
openscan_firmware/main.py - Project API
openscan_firmware/routers/next/projects.py - Task API
openscan_firmware/routers/next/tasks.py
Projects and scans
- Project manager
openscan_firmware/controllers/services/projects.py - Scan model
openscan_firmware/models/scan.py - Project model
openscan_firmware/models/project.py - Scan settings
openscan_firmware/config/scan.py - Scan paths
openscan_firmware/utils/paths/paths.py
Background tasks
- Task manager
openscan_firmware/controllers/services/tasks/task_manager.py - Task model
openscan_firmware/models/task.py - Scan task
openscan_firmware/controllers/services/tasks/core/scan_task.py
Scanner hardware
- Device controller
openscan_firmware/controllers/device.py - Scanner configuration
openscan_firmware/models/scanner.py - Camera controller
openscan_firmware/controllers/hardware/cameras/camera.py - Pi camera backend
openscan_firmware/controllers/hardware/cameras/picamera2.py - GPhoto2 backend
openscan_firmware/controllers/hardware/cameras/gphoto2/controller.py - Motor control
openscan_firmware/controllers/hardware/motors.py
Processing and integrations
- Scan analysis
openscan_firmware/controllers/services/scan_analysis.py - Focus stacking
openscan_firmware/controllers/services/focus_stacking.py - Cloud service
openscan_firmware/controllers/services/cloud.py - External triggers
openscan_firmware/controllers/services/external_trigger_runs.py
Other components
- Scanner user
Connections 25
- Scanner user → Firmware app: uses API
- Firmware app → Project API: mounts routes
openscan_firmware/main.py - Firmware app → Task API: mounts routes
openscan_firmware/main.py - Firmware app → Device controller: initializes device
openscan_firmware/main.py - Firmware app → Task manager: initializes tasks
openscan_firmware/main.py - Project API → Project manager: calls project services
openscan_firmware/routers/next/projects.py - Project API → Task manager: starts scan tasks
openscan_firmware/routers/next/projects.py - Task API → Task manager: manages tasks
openscan_firmware/routers/next/tasks.py - Project manager → Project model: loads projects
openscan_firmware/controllers/services/projects.py - Project manager → Scan model: updates scans
openscan_firmware/controllers/services/projects.py - Project manager → Camera controller: captures photos
openscan_firmware/controllers/services/projects.py - Project manager → Task model: tracks scan task
openscan_firmware/controllers/services/projects.py - Scan model → Scan settings: uses settings
openscan_firmware/models/scan.py - Scan model → Scan paths: converts coordinates
openscan_firmware/models/scan.py - Task manager → Task model: manages state
openscan_firmware/controllers/services/tasks/task_manager.py - Task manager → Scan task: dispatches registered tasks
- Device controller → Scanner configuration: loads configuration
openscan_firmware/controllers/device.py - Device controller → Camera controller: controls cameras
openscan_firmware/controllers/device.py - Camera controller → Pi camera backend: selects backend
openscan_firmware/controllers/hardware/cameras/camera.py - Camera controller → GPhoto2 backend: selects backend
openscan_firmware/controllers/hardware/cameras/camera.py - Device controller → Motor control: controls motors
openscan_firmware/controllers/device.py - Scan task → Scan analysis: analyzes captures
- Scan task → Focus stacking: stacks captures
- Scan task → Cloud service: uploads results
- Scan task → External triggers: handles trigger runs