This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| timi [2026/04/26 10:52] – expanded TIMI page from AGENTS.md and repo timi | timi [2026/04/27 15:49] (current) – Update main page: top changelog, v1.5 sidecars, inline gopro timi | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| //TAMI Inventory Management Interface// | //TAMI Inventory Management Interface// | ||
| - | //" | + | //" |
| TIMI is the combined weekend-hackathon brainchild of TAMI folks building an **audio-visual inventory dataset** for the space — and eventually a **space-aware inventory tagging, logging and querying system**. It is critical infrastructure. It is also complete and utter bullshit. This is a hackerspace. | TIMI is the combined weekend-hackathon brainchild of TAMI folks building an **audio-visual inventory dataset** for the space — and eventually a **space-aware inventory tagging, logging and querying system**. It is critical infrastructure. It is also complete and utter bullshit. This is a hackerspace. | ||
| + | |||
| + | ===== Recent Changes ===== | ||
| + | |||
| + | * **2026-04-27** — Rerun-based **dataset viewer** for browsing local and remote captures; agent tmux workflow for dashboard, viewer, and GoPro services. | ||
| + | * **2026-04-27** — **gopro-scicam merged inline** from submodule to simplify builds and eliminate sync friction. | ||
| + | * **2026-04-26** — **Unified sidecar schema v1.5** across Android and GoPro: '' | ||
| + | * **2026-04-26** — **Dashboard enhancements**: | ||
| + | * **2026-04-25** — **GoPro station mode**: split-screen live preview + last capture; QR debounce (2× consecutive); | ||
| + | |||
| + | Full history: [[timi: | ||
| ===== What is TIMI? ===== | ===== What is TIMI? ===== | ||
| - | At its core TIMI is three things: | + | At its core TIMI is four things: |
| * **SciCam** — an Android camera app that snaps photos (and videos), writes JSON sidecars with EXIF + metadata, exposes a NanoHTTPD REST API, and auto-captures via QR codes. | * **SciCam** — an Android camera app that snaps photos (and videos), writes JSON sidecars with EXIF + metadata, exposes a NanoHTTPD REST API, and auto-captures via QR codes. | ||
| + | * **GoPro Bridge** — a Flask server that talks to a GoPro over USB WiFi, pulls captures, runs a live preview stream, and does **motion-based auto-capture** with an ROI editor. Writes the same SciCam-compatible sidecars. | ||
| * **Dashboard** — a Rust TUI that discovers devices via UDP multicast, monitors them, and one-way mirrors captures to a local archive. | * **Dashboard** — a Rust TUI that discovers devices via UDP multicast, monitors them, and one-way mirrors captures to a local archive. | ||
| * **Dataset** — a growing folder of '' | * **Dataset** — a growing folder of '' | ||
| Line 19: | Line 30: | ||
| ===== Architecture ===== | ===== Architecture ===== | ||
| - | < | + | {{timi: |
| - | +-------------+ | + | |
| - | | | + | All capture sources broadcast **UDP multicast |
| - | | (Android) | + | |
| - | | : | + | The current focus is **capturing and collecting the dataset**. More processing stages will follow: |
| - | +-------------+ | + | |
| - | | | + | * **Segmentation** — isolating objects from backgrounds |
| - | v | + | * **Labeling** — assigning metadata and categories |
| - | MediaStore (Pictures/ | + | * **Localization** — determining where an object lives in the space |
| - | </ | + | |
| + | These ML workloads will likely run on the **Fedora workstation** with its **NVIDIA P40 GPU**. | ||
| ==== Components ==== | ==== Components ==== | ||
| Line 37: | Line 49: | ||
| * **Photo capture** with CameraX, saved to '' | * **Photo capture** with CameraX, saved to '' | ||
| * **Video recording** — toggle with '' | * **Video recording** — toggle with '' | ||
| - | * **JSON sidecars** — every capture gets a '' | + | * **JSON sidecars |
| * **QR auto-capture** — point the camera at a QR code, the app snaps automatically. Great for rapid inventory sweeps. | * **QR auto-capture** — point the camera at a QR code, the app snaps automatically. Great for rapid inventory sweeps. | ||
| * **SSE stream** — live events at ''/ | * **SSE stream** — live events at ''/ | ||
| - | === Dashboard === | + | === GoPro Bridge (gopro-scicam) === |
| + | |||
| + | * **Flask server** connecting to GoPro HERO12 (and compatible) via the **Open GoPro USB WiFi API**. | ||
| + | * **Full web UI** — capture button, live MJPEG preview, gallery, sidecar viewer, and a **table-boundary ROI editor**. | ||
| + | * **Motion-based auto-capture** — monitors the live preview stream for structural change inside a masked region. Only fires when something actually stays on the table (ignores hands passing through). Adjustable motion and structural thresholds. | ||
| + | * **Background sync** — on startup, pulls every photo/video from the GoPro SD card that hasn't been downloaded yet. Persists sync history so clearing local files doesn' | ||
| + | * **SciCam-compatible sidecars** — writes the same '' | ||
| + | * **Live QR detection** — scans preview frames and downloaded images; updates '' | ||
| + | * **Multicast beacons** — broadcasts UDP presence just like SciCam, so the Rust dashboard can discover it. | ||
| + | |||
| + | === Dashboard | ||
| * Rust terminal UI. | * Rust terminal UI. | ||
| - | * Auto-discovers devices every 5 s via UDP beacons. | + | |
| + | * **Syncs** '' | ||
| * Hotkeys: '' | * Hotkeys: '' | ||
| - | * Mirrors '' | ||
| * Config lives in repo-root '' | * Config lives in repo-root '' | ||
| Line 53: | Line 75: | ||
| * **Go CLI** ('' | * **Go CLI** ('' | ||
| * **Web client** ('' | * **Web client** ('' | ||
| - | * **GoPro bridge** ('' | ||
| ===== Capture Sources ===== | ===== Capture Sources ===== | ||
| Line 61: | Line 82: | ||
| ^ Source ^ Status ^ Notes ^ | ^ Source ^ Status ^ Notes ^ | ||
| | Mobile (SciCam app) | Working | Primary capture device. CameraX + NanoHTTPD. | | | Mobile (SciCam app) | Working | Primary capture device. CameraX + NanoHTTPD. | | ||
| - | | GoPro | TBD | USB WiFi API via '' | + | | GoPro (gopro-scicam) |
| | Canon 70D | In space | Uses [[https:// | | Canon 70D | In space | Uses [[https:// | ||
| | Lixel 2 Pro | TBD | 3D scanner with cameras. Needs research. | | | Lixel 2 Pro | TBD | 3D scanner with cameras. Needs research. | | ||
| Line 75: | Line 96: | ||
| * Go and web clients consuming the API. | * Go and web clients consuming the API. | ||
| * Full test suite in '' | * Full test suite in '' | ||
| + | * **GoPro bridge** added later — brings a rugged wide-angle camera into the TIMI pipeline with motion auto-capture and the same sidecar format. | ||
| ===== API Quick Reference ===== | ===== API Quick Reference ===== | ||
| - | The API lives at '' | + | The SciCam |
| | Method | Endpoint | Purpose | | | Method | Endpoint | Purpose | | ||
| | POST | /capture | Trigger photo | | | POST | /capture | Trigger photo | | ||
| | POST | /record | Toggle video recording | | | POST | /record | Toggle video recording | | ||
| - | | POST | /settings | Set item_id, tags, lock, debug, capture_alert | | + | | POST | /settings | Set qr_item_id, tags, lock, debug, capture_alert | |
| | POST | / | | POST | / | ||
| - | | GET | /status | Current state (item_id, tags, locked, last_qr, ...) | | + | | GET | /status | Current state (qr_item_id, tags, locked, last_qr, ...) | |
| | GET | /captures | List all images/ | | GET | /captures | List all images/ | ||
| | GET | /photo/last | Download latest JPEG | | | GET | /photo/last | Download latest JPEG | | ||
| Line 105: | Line 127: | ||
| < | < | ||
| timi/ | timi/ | ||
| - | ├── scicam/ | + | ├── scicam/ |
| - | ├── dashboard/ | + | ├── dashboard/ |
| - | ├── clients/ | + | ├── clients/ |
| - | ├── api_spec.yaml | + | │ |
| - | ├── timi.conf | + | │ |
| - | └── capture/ | + | │ |
| + | ├── api_spec.yaml | ||
| + | ├── timi.conf | ||
| + | └── capture/ | ||
| </ | </ | ||
| ===== Roadmap / Dreams ===== | ===== Roadmap / Dreams ===== | ||
| - | * [ ] Prototype '' | + | * [ ] Prototype '' |
| * [ ] Camera calibration data in sidecars (lens distortion via BoofCV). | * [ ] Camera calibration data in sidecars (lens distortion via BoofCV). | ||
| * [ ] Database sync — non-destructive to existing images/ | * [ ] Database sync — non-destructive to existing images/ | ||
| * [ ] Canon 70D scripted capture producing TIMI-compatible sidecars. | * [ ] Canon 70D scripted capture producing TIMI-compatible sidecars. | ||
| - | * [ ] GoPro integration | + | * [ ] Lixel 2 Pro research and integration. |
| * [ ] Space-aware querying: " | * [ ] Space-aware querying: " | ||
| Line 138: | Line 163: | ||
| # Build and install the Android app | # Build and install the Android app | ||
| cd scicam && ./gradlew assembleDebug && adb install app/ | cd scicam && ./gradlew assembleDebug && adb install app/ | ||
| + | |||
| + | # Start the GoPro bridge (needs GoPro in USB Connect mode) | ||
| + | cd clients/ | ||
| # Start the dashboard | # Start the dashboard | ||
| - | cd dashboard && cargo build --release && ./ | + | cd ~/timi/dashboard && cargo build --release && ./ |
| # Test against a device on the network | # Test against a device on the network | ||