Prism is a local-first, zero-API-key multimodal content indexing and search dashboard. It runs entirely in the browser using WebGPU — no server, no cloud, no data leaves your machine. Drop images, audio, or video files and Prism will caption, transcribe, embed, and index them for instant semantic search.
# Clone the repository
git clone <repo-url>
cd prism
# Install dependencies
npm install
# Start the dev server
npm run dev
Open http://localhost:5173 in a Chromium-based browser with WebGPU enabled.
| Requirement | Details |
|---|---|
| Browser | Chrome 113+, Edge 113+, or any Chromium-based browser |
| WebGPU | Must be enabled (default in latest Chrome/Edge) |
| SharedArrayBuffer | Dev server sets COOP/COEP headers automatically |
Note: Firefox and Safari do not fully support WebGPU yet. Prism will show a warning if WebGPU is unavailable.
Prism uses three AI models, each running in its own dedicated Web Worker via Transformers.js v4:
| Model | Purpose | Quantization |
|---|---|---|
| Florence-2 | Image captioning + OCR | Mixed (fp32/fp16/q4) |
| Whisper | Audio/video speech-to-text | q8 |
| Jina CLIP v2 | 1024-dim embeddings for text & images | q8 |
Models load lazily on first use — not on app startup.
Click the Export button in the top bar to download all indexed data as a JSON file. Embeddings are serialized as regular arrays. The file is timestamped (e.g., prism-export-2026-03-24.json).
| Layer | Technology |
|---|---|
| Framework | React 19 + Vite 6 |
| AI Runtime | Transformers.js v4 (WebGPU) |
| State | Zustand (3 stores) |
| Styling | Tailwind CSS v4 |
| Storage | IndexedDB via idb |
| Vector Search | Brute-force cosine similarity |
| Icons | lucide-react |
src/
├── workers/ # Web Workers (Florence-2, Whisper, Jina CLIP)
├── lib/ # Utilities (db, vectorStore, export, workerBridge, fileUtils)
├── store/ # Zustand stores (model, index, UI)
├── components/ # React components
│ ├── layout/ # AppShell, Sidebar, TopBar
│ ├── ingest/ # DropZone, FileQueue, FileQueueItem
│ ├── search/ # SearchBar, ResultCard, ResultsGrid
│ ├── models/ # ModelStatusBar, ModelBadge
│ └── shared/ # Toast, EmptyState, ProgressBar, ErrorBoundary
├── hooks/ # Pipeline hooks (useIngestPipeline, useAudioPipeline, useSearch)
├── App.jsx
├── main.jsx
└── index.css
For detailed architecture documentation, see docs/design/DESIGN.md.
This project is provided as-is for personal and educational use.
11 commits
JavaScript
99.8%
Prism is a local-first, zero-API-key multimodal content indexing and search dashboard. It runs entirely in the browser using WebGPU — no server, no cloud, no data leaves your machine. Drop images, audio, or video files and Prism will caption, transcribe, embed, and index them for instant semantic search.
# Clone the repository
git clone <repo-url>
cd prism
# Install dependencies
npm install
# Start the dev server
npm run dev
Open http://localhost:5173 in a Chromium-based browser with WebGPU enabled.
| Requirement | Details |
|---|---|
| Browser | Chrome 113+, Edge 113+, or any Chromium-based browser |
| WebGPU | Must be enabled (default in latest Chrome/Edge) |
| SharedArrayBuffer | Dev server sets COOP/COEP headers automatically |
Note: Firefox and Safari do not fully support WebGPU yet. Prism will show a warning if WebGPU is unavailable.
Prism uses three AI models, each running in its own dedicated Web Worker via Transformers.js v4:
| Model | Purpose | Quantization |
|---|---|---|
| Florence-2 | Image captioning + OCR | Mixed (fp32/fp16/q4) |
| Whisper | Audio/video speech-to-text | q8 |
| Jina CLIP v2 | 1024-dim embeddings for text & images | q8 |
Models load lazily on first use — not on app startup.
Click the Export button in the top bar to download all indexed data as a JSON file. Embeddings are serialized as regular arrays. The file is timestamped (e.g., prism-export-2026-03-24.json).
| Layer | Technology |
|---|---|
| Framework | React 19 + Vite 6 |
| AI Runtime | Transformers.js v4 (WebGPU) |
| State | Zustand (3 stores) |
| Styling | Tailwind CSS v4 |
| Storage | IndexedDB via idb |
| Vector Search | Brute-force cosine similarity |
| Icons | lucide-react |
src/
├── workers/ # Web Workers (Florence-2, Whisper, Jina CLIP)
├── lib/ # Utilities (db, vectorStore, export, workerBridge, fileUtils)
├── store/ # Zustand stores (model, index, UI)
├── components/ # React components
│ ├── layout/ # AppShell, Sidebar, TopBar
│ ├── ingest/ # DropZone, FileQueue, FileQueueItem
│ ├── search/ # SearchBar, ResultCard, ResultsGrid
│ ├── models/ # ModelStatusBar, ModelBadge
│ └── shared/ # Toast, EmptyState, ProgressBar, ErrorBoundary
├── hooks/ # Pipeline hooks (useIngestPipeline, useAudioPipeline, useSearch)
├── App.jsx
├── main.jsx
└── index.css
For detailed architecture documentation, see docs/design/DESIGN.md.
This project is provided as-is for personal and educational use.
11 commits
JavaScript
99.8%