deedlit.dev
monorepo · pnpm workspace + FastAPI mesh

deedlit.dev

A self-hosted library for the images you generate locally with ComfyUI and Automatic1111. It reads the metadata baked into each file, lets you filter by prompt, tags and parameters, and finds similar images through hybrid vector search.

Explore Storybook View on GitHub

Web apps · pnpm workspace

Three frontends, one design system

Two Next.js apps and the shared component library they both consume. Every app talks only to the deedlit.api gateway.

deedlit.dev

:3001

Public Next.js site — home hub, reference book shelf, image gallery and self-hosted service links.

Source →

comfyhelper

:3000

ComfyHelper UI for the image library — hybrid search, tag/safety filters, a Neo4j graph filter and an ingestion admin.

Source →

@carneirofc/ui

lib

Shared, app-agnostic component library and the cyber/neon design system backing both apps — documented live in Storybook.

Open Storybook →

Backend · FastAPI mesh

Database-per-service, HTTP-only

Each service is the sole writer of its datastore and they never call each other — search and graph are rebuildable projections of catalog, the canonical truth.

api

:8088

Gateway / BFF: aggregate detail pages, host MCP, dispatch ingest jobs.

catalog

:8001
owns · Postgres + RustFS

Canonical images, tags, params, references, ratings, notes, collections, thumbnails, cached vectors.

search

:8002
owns · Qdrant

Dense (CLIP) + sparse (SPLADE) hybrid vector search.

graph

:8003
owns · Neo4j

Shared-asset, tag co-occurrence and lineage edges.

ingest

:8004

Scan, hash, thumbnail; publishes the per-stage ingest DAG over RabbitMQ.

metadata

:8005

Bytes → embedded prompt / tags / params + resolved reference graph.

labelagent

:8006

Vision-LLM describe / safety / tags via a local llama-server.

vision

:8000

CLIP dense + SPLADE sparse embeddings (GPU).

Architecture

A queue-driven ingest DAG

Ingest is fully queue-driven over RabbitMQ as a per-stage DAG — the catalog write is the durability boundary, and projections converge via idempotent rebuilds. The cross-service id is the SHA-256 of the image bytes.

1 · Produce

folder-scan per file: sha · phash · thumb · metadata
catalog POST /images → VISIBLE

2 · Fan-out (choreography)

embed.dense · GPU
embed.sparse
index.graph
label · vision-LLM

3 · Fan-in & project

index.search both blobs present → upsert Qdrant point
catalog is the latch rebuildable projections converge
Postgres Neo4j Qdrant RustFS S3 RabbitMQ Redis Grafana · Loki · Tempo

Full design in IMAGE_LIBRARY.md, the ingest ADRs (0001, 0002) and the repo README.

Screens

Screens from the apps

The public site, the ComfyHelper library and the shared component catalog — all built from @carneirofc/ui.

@carneirofc/ui Storybook
@carneirofc/ui — live Storybook
deedlit.dev home / services hub
deedlit.dev — home & services hub
deedlit.dev gallery view
deedlit.dev — image gallery
deedlit.dev reference shelf
deedlit.dev — reference shelf
ComfyHelper backend admin
ComfyHelper — backend admin