This is an old revision of the document!
TAMI Inventory Management Interface
“timi is always at home.”
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.
At its core TIMI is four things:
images, videos, and .json sidecars that describe stuff in the space.The long-term dream: walk into a room, point a camera at an object (or let a fixed camera see it), and have the system know what it is, where it lives, and how many we have.
+-------------+ UDP multicast +-----------------+
| SciCam | <-- 239.255.0.1:9876 -->| Rust Dashboard |
| (Android) | | (TUI) |
| :8080/api |<------- HTTP/SSE ------> | ~/timi/capture |
+-------------+ +-----------------+
| ^
v |
MediaStore (Pictures/SciCam...) |
|
+-------------+ HTTP/Preview |
| GoPro Bridge| -------------------------------+
| (Flask) | SciCam sidecars (.json)
| USB+WiFi |
+-------------+
Pictures/SciCam/.POST /record, saved to Movies/SciCam/..json buddy with EXIF, camera settings, item ID, tags, and timestamp. Stored in Documents/SciCam/./events so the dashboard sees captures in real-time.*.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.item_id automatically when a code is found.r/R refresh, s/S sync, w watch SSE, a add, d delete, q quit.*.jpg, *.mp4, and *.json from devices to ~/timi/capture.timi.conf.clients/go-scicam) — curl-friendly wrapper.clients/web-scicam) — vanilla JS, static HTML.Not just one camera — the idea is everything that can see should feed TIMI.
| Source | Status | Notes |
|---|---|---|
| Mobile (SciCam app) | Working | Primary capture device. CameraX + NanoHTTPD. |
| GoPro (gopro-scicam) | Working | Flask bridge over USB WiFi. Preview, auto-capture, ROI mask, background sync, SciCam sidecars. |
| Canon 70D | In space | Uses Entangle (libgphoto2 frontend). Could script captures to same sidecar format. |
| Lixel 2 Pro | TBD | 3D scanner with cameras. Needs research. |
The first TIMI sprint produced a working end-to-end pipeline in about 48 hours:
scicam_api_test.sh.
The SciCam API lives at http:<device-ip>:8080. Critical rule: ~/timi/POST only for state-changing endpoints; GET returns 404.
| Method | Endpoint | Purpose |
| POST | /capture | Trigger photo |
| POST | /record | Toggle video recording |
| POST | /settings | Set item_id, tags, lock, debug, capture_alert |
| POST | /auto-capture | Enable/disable QR auto-capture |
| GET | /status | Current state (item_id, tags, locked, last_qr, …) |
| GET | /captures | List all images/videos with sidecar status |
| GET | /photo/last | Download latest JPEG |
| GET | /photo/<filename> | Download specific JPEG |
| GET | /video/last | Download latest MP4 |
| GET | /video/<filename> | Download specific MP4 |
| GET | /sidecar/<filename> | Download JSON sidecar |
| GET | /events | SSE stream |
Full spec: api_spec.yaml
===== Git Repository =====
* Origin: git.telavivmakers.space/tami/timi
* Local dev desk:
The repo is a multi-component monorepo:
<code>
timi/
├── scicam/ # Android app (Kotlin + Gradle Groovy DSL)
├── dashboard/ # Rust TUI
├── clients/
│ ├── go-scicam/ # Go CLI (submodule)
│ ├── web-scicam/ # Vanilla JS static client (submodule)
│ └── gopro-scicam/ # Flask GoPro bridge (submodule) — KEY PLAYER
├── api_spec.yaml # OpenAPI 3 source of truth
├── timi.conf # Dashboard registry & config
└── capture/ # Default local archive (gitignored)
</code>
===== Roadmap / Dreams =====
* [ ] Prototype PreviewView overlay for QR region feedback in SciCam.
* [ ] Camera calibration data in sidecars (lens distortion via BoofCV).
* [ ] Database sync — non-destructive to existing images/sidecars.
* [ ] Canon 70D scripted capture producing TIMI-compatible sidecars.
* [ ] Lixel 2 Pro research and integration.
* [ ] Space-aware querying: “what's in the CNC room?” “how many stepper motors?”
===== Philosophy =====
* Treat captures as immutable — this is an archive and dataset. Don't mess with existing files.
* API-first UI — the app is primarily a remote-controlled camera. The dashboard and CLI are the main interfaces.
* Bullshit acceptable — it is a hackerspace. It should work well enough to be useful and broken enough to be fun.
===== Contact / Hacking =====
Ping the usual suspects on Matrix/Discord/Telegram, or just show up at the space and break things. The code is all there in ~/timi'' on the dev desk. If you improve it, push to Gitea.
<code>
# Quick start on the dev desk
cd ~/timi
# Build and install the Android app
cd scicam && ./gradlew assembleDebug && adb install app/build/outputs/apk/debug/app-debug.apk
# Start the GoPro bridge (needs GoPro in USB Connect mode)
cd clients/gopro-scicam && python3 app.py
# Start the dashboard
cd ~/timi/dashboard && cargo build –release && ./target/release/scicam-dashboard
# Test against a device on the network
cd ~/timi && ./scicam_api_test.sh <device-ip>
</code>