{ "repository": "OpenVibers/OpenVibe.Vision", "version": "0.1.0", "stage": "product", "code": true, "wave": "W21", "plan": "OpenVibe.Vision v1 (plan 2026-10-28 §5.8): ask a picture, compare models side by side, OCR with a local engine first, and the UI check as an API other services call; §5.8b adds faces with separate purpose-scoped consent; F1 (L24) adds a camera owner's own familiar-face libraries; wave 1 adds the six network tools", "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9, Tesseract 5, sharp, onnxruntime-node (YuNet/SFace), Transformers.js (CLIP/DETR)", "port": "5130", "domain": "openvibe.vision", "contracts": "openvibe-contracts v0.419.0", "sdk": "openvibe-sdk v0.161.0", "shared": "openvibe-shared v4.237.0", "packages": [ "openvibe-contracts v0.419.0", "openvibe-sdk v0.161.0", "openvibe-shared v4.237.0" ], "capabilities": [ "vision.image.ask", "vision.text.read", "vision.model.compare", "vision.ui.check", "vision.face.cast.match", "vision.alt.write", "vision.media.find", "vision.receipt.read", "vision.product.match", "vision.camera.watch", "vision.video.moments", "vision.face.detect", "vision.face.blur", "vision.face.consent.manage", "vision.face.verify.self", "vision.face.find.self", "vision.face.library", "vision.face.cast.read", "vision.models.read", "vision.benchmarks.read", "vision.image.review", "vision.review.read", "vision.review.decide" ], "outboundCapabilities": [ "ai.run.create", "network.consent.read", "network.notifications.push" ], "capabilitiesRegistered": false, "serviceManifestRegistered": false, "summary": "OpenVibe.Vision reads images and checks UI faults, and its network tools produce alt text, owner-scoped private image search, receipt lines, product matches, camera detections and moments. Local face detection and blur use no identity; personal matching requires separately signed, purpose-scoped consent. General answers keep no image bytes. Opt-in face uploads and templates are encrypted, private and deletable. AI text never describes a person's looks.", "works": [ "Ask a picture: multipart upload, data URL or public image URL; task ask/describe/identify/count/translate/ocr; auto/local/ai modes", "Local-first OCR: Tesseract 5 on this host, word boxes and mean confidence, zero cost, an optional AI fallback only after an empty local pass", "OpenVibe.AI gateway: first-party service token (ai.run.create, namespace ai.*), OpenAI-compatible image message, AI provenance, quota and cost, no direct provider", "Compare: local OCR plus one AI run per model hint, requested vs answered model, measured latency and AI cost, sample rows", "UI check: static HTML/CSS pass (overflow, cut-off, contrast, overlap, layering), public URL pass with SSRF guard, screenshot pass through OCR boxes and sharp pixels", "No looks: public AI text is passed through noLooks; an answer that names looks is replaced by a neutral sentence", "Local face detection and blur through YuNet without templates or tracking; detect/blur are open and rate-limited", "Consent-scoped SFace matching: verify (1:1), self search in own Vision uploads, adult cast rosters and region-gated private library grouping", "F1 familiar faces: a camera owner's own library (face_libraries, names, encrypted crops and templates); strict regions check Network's face.recognize registry before a template exists, a private link covers the rest, a match reads only that library, and delete removes templates and crops", "Encrypted face templates, opt-in uploads and vectors (AES-256-GCM); immediate template/tag erasure on opt-out and a daily three-year retention job", "Network tools: routed alt text, owner-scoped CLIP index/find, Tesseract-first receipts, product vectors, DETR watch and moments, each with a receipt", "Unsafe-image review: exactly three categories (fine including nudity; sex acts or porn never public; sexual content involving a minor blocked, quarantined and reported to the operator), a staff queue page, an operator decision, and a plain-words API for Media, Live and Community", "MCP on /mcp with RFC 9728 protected-resource metadata, token challenges and route-equivalent capability checks", "vision.result.ready and vision.alert published through OpenVibe.Events when configured, through a durable outbox: a failed publish waits in event_outbox and is retried with backoff", "Answers, compare samples, private index and UI checks stored without image bytes; account export/deletion over every table including faces and the private index", "Network sign-in as OAuth client vision (PKCE S256, vision_at/vision_rt/vision_oauth), truthful readiness, loopback metrics", "Server-rendered pages with stable vi- ids/classes, discovery artifacts, deploy unit and nginx vhost, CI" ], "notYet": [ "Public Vision Arena leaderboards and public test sets (v2); v1 stores aggregate compare samples and exposes them without subjects", "Video and computer-use benchmarks (v2/v3)", "OpenCV jobs placed on OpenVibe.Run; v1 uses Tesseract on this host and sharp for pixels", "A real browser-rendered UI pass (JavaScript execution, getBoundingClientRect, computed styles); v1 is a documented static pass plus a screenshot pass", "Search documents/outbox: v1 has no public records to index", "A per-person history page; saved answers are reachable by id for their owner and staff", "A tested liveness / presentation-attack detector: verify and cast enrolment return liveness \"not_checked\"", "Media-object search through a source-owner grant: find yourself currently searches only the person's Vision uploads", "The capability manifests and grants; the main session registers vision.* and grants them" ], "deployed": false, "features": [ "ask a picture", "familiar faces for a camera owner's own cameras", "local-first OCR", "OpenVibe.AI routed answers", "model compare with cost and latency", "UI check: overflow, cut-off, contrast, overlap, layering", "noLooks and consent-scoped faces", "network tools: alt, index/find, receipt, product, watch, moments", "account export and deletion", "Network sign-in", "server-rendered pages", "unsafe-image review queue and three-category API", "discovery", "deploy files" ], "deployment": "not deployed: the unit and nginx vhost are deploy/systemd/openvibe-vision.service and deploy/nginx/openvibe.vision.conf", "updated": "2026-11-13" }