Table of Contents

TIMI

TAMI Inventory Management Interface

“timi is always at ~/”

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

Full history: TIMI Changelog

What is TIMI?

At its core TIMI is four things:

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.

Architecture

TIMI Architecture

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.

The current focus is capturing and collecting the dataset. More processing stages will follow:

These ML workloads will likely run on the Fedora workstation with its NVIDIA P40 GPU.

Components

SciCam Android App

GoPro Bridge (gopro-scicam)

Dashboard / Sync Server

API Clients

Capture Sources

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.

Weekend Hackathon Results

The first TIMI sprint produced a working end-to-end pipeline in about 48 hours:

API Quick Reference

The SciCam API lives at http:<device-ip>:8080. Critical rule: POST only for state-changing endpoints; GET returns 404. | Method | Endpoint | Purpose | | POST | /capture | Trigger photo | | POST | /record | Toggle video recording | | POST | /settings | Set qr_item_id, tags, lock, debug, capture_alert | | POST | /auto-capture | Enable/disable QR auto-capture | | GET | /status | Current state (qr_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: ~/timi/ 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 (inline, was 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>