User Tools

Site Tools


timi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
timi [2026/04/26 13:17] – tagline: timi is always at ~/ timitimi [2026/04/27 15:49] (current) – Update main page: top changelog, v1.5 sidecars, inline gopro timi
Line 6: Line 6:
  
 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: ''qr_item_id'', ''capture_id'', ''device_name'', and ''device_id'' now present everywhere.
 +  * **2026-04-26** — **Dashboard enhancements**: gallery and sidecar preview, ''capture_alert'' feedback, beacon-based auto-discovery sync.
 +  * **2026-04-25** — **GoPro station mode**: split-screen live preview + last capture; QR debounce (2× consecutive); real camera settings (ISO, shutter, aperture, AE/AWB) queried for sidecars.
 +
 +Full history: [[timi:changelog|TIMI Changelog]]
  
 ===== What is TIMI? ===== ===== What is TIMI? =====
Line 20: Line 30:
 ===== Architecture ===== ===== Architecture =====
  
-<code> +{{timi:timi-architecture.svg|TIMI Architecture}} 
-+-------------+      UDP multicast      +-----------------+ + 
-|   SciCam    | <-- 239.255.0.1:9876 -->| Rust Dashboard  | +All capture sources broadcast **UDP multicast beacons** every 5 s to **239.255.0.1:9876**. The **Dashboard / Sync Server** (Rust TUI) auto-discovers them, monitors their state over HTTP/SSE, and one-way mirrors captures (JPEG, MP4, JSON sidecars) into ''~/timi/capture''. 
-| (Android)                             (TUI)         | + 
-|  :8080/api  |<------- HTTP/SSE ------> |  ~/timi/capture | +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/SciCam...)                 | +  * **Localization** — determining where an object lives in the space 
-                                                | + 
-+-------------+      HTTP/Preview             | +These ML workloads will likely run on the **Fedora workstation** with its **NVIDIA P40 GPU**.
-| GoPro Bridge| -------------------------------+ +
- (Flask)    |     SciCam sidecars (.json) +
- USB+WiFi   | +
-+-------------+ +
-</code>+
  
 ==== Components ==== ==== Components ====
Line 44: Line 49:
   * **Photo capture** with CameraX, saved to ''Pictures/SciCam/''.   * **Photo capture** with CameraX, saved to ''Pictures/SciCam/''.
   * **Video recording** — toggle with ''POST /record'', saved to ''Movies/SciCam/''.   * **Video recording** — toggle with ''POST /record'', saved to ''Movies/SciCam/''.
-  * **JSON sidecars** — every capture gets a ''.json'' buddy with EXIF, camera settings, item ID, tags, and timestamp. Stored in ''Documents/SciCam/''.+  * **JSON sidecars v1.5** — every capture gets a ''.json'' buddy with EXIF, camera settings, ''qr_item_id'', ''capture_id'', ''device_name'', ''device_id'', tags, and timestamp. Stored in ''Documents/SciCam/''.
   * **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 ''/events'' so the dashboard sees captures in real-time.   * **SSE stream** — live events at ''/events'' so the dashboard sees captures in real-time.
Line 54: Line 59:
   * **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.   * **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't cause re-downloads.   * **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't cause re-downloads.
-  * **SciCam-compatible sidecars** — writes the same ''*.json'' format as the Android app (item_id, tags, timestamp, camera settings, origin, source="gopro"). Includes a background QR-retry hunter that tries ZBar, CLAHE, adaptive threshold, and morphological close to read tricky codes.+  * **SciCam-compatible sidecars** — writes the same ''*.json'' format as the Android app (qr_item_id, capture_id, tags, timestamp, camera settings, origin, source="gopro", device_name, device_id). Includes a background QR-retry hunter that tries ZBar, CLAHE, adaptive threshold, and morphological close to read tricky codes.
   * **Live QR detection** — scans preview frames and downloaded images; updates ''item_id'' automatically when a code is found.   * **Live QR detection** — scans preview frames and downloaded images; updates ''item_id'' automatically when a code is found.
   * **Multicast beacons** — broadcasts UDP presence just like SciCam, so the Rust dashboard can discover it.   * **Multicast beacons** — broadcasts UDP presence just like SciCam, so the Rust dashboard can discover it.
  
-=== Dashboard ===+=== Dashboard / Sync Server ===
  
   * Rust terminal UI.   * Rust terminal UI.
-  * Auto-discovers devices every 5 s via UDP beacons.+  * **Auto-discovers** devices every 5 s via UDP multicast beacons
 +  * **Syncs** ''*.jpg'', ''*.mp4'', and ''*.json'' from devices to ''~/timi/capture''.
   * Hotkeys: ''r/R'' refresh, ''s/S'' sync, ''w'' watch SSE, ''a'' add, ''d'' delete, ''q'' quit.   * Hotkeys: ''r/R'' refresh, ''s/S'' sync, ''w'' watch SSE, ''a'' add, ''d'' delete, ''q'' quit.
-  * Mirrors ''*.jpg'', ''*.mp4'', and ''*.json'' from devices to ''~/timi/capture''. 
   * Config lives in repo-root ''timi.conf''.   * Config lives in repo-root ''timi.conf''.
  
Line 100: Line 105:
 | 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 | /auto-capture | Enable/disable QR auto-capture | | POST | /auto-capture | Enable/disable QR auto-capture |
-| 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/videos with sidecar status | | GET | /captures | List all images/videos with sidecar status |
 | GET | /photo/last | Download latest JPEG | | GET | /photo/last | Download latest JPEG |
Line 127: Line 132:
 │   ├── go-scicam/    # Go CLI (submodule) │   ├── go-scicam/    # Go CLI (submodule)
 │   ├── web-scicam/   # Vanilla JS static client (submodule) │   ├── web-scicam/   # Vanilla JS static client (submodule)
-│   ── gopro-scicam/ # Flask GoPro bridge (submodule) — KEY PLAYER+│   ── gopro-scicam/ # Flask GoPro bridge (inline, was submodule) — KEY PLAYER
 ├── api_spec.yaml     # OpenAPI 3 source of truth ├── api_spec.yaml     # OpenAPI 3 source of truth
 ├── timi.conf         # Dashboard registry & config ├── timi.conf         # Dashboard registry & config
timi.1777209432.txt.gz · Last modified: by timi