openvibers/openvibe.vision STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Vision", |
| 3 | "version": "0.1.0", |
| 4 | "stage": "product", |
| 5 | "code": true, |
| 6 | "wave": "W21", |
| 7 | "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", |
| 8 | "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9, Tesseract 5, sharp, onnxruntime-node (YuNet/SFace), Transformers.js (CLIP/DETR)", |
| 9 | "port": "5130", |
| 10 | "domain": "openvibe.vision", |
| 11 | "contracts": "openvibe-contracts v0.419.0", |
| 12 | "sdk": "openvibe-sdk v0.161.0", |
| 13 | "shared": "openvibe-shared v4.237.0", |
| 14 | "packages": [ |
| 15 | "openvibe-contracts v0.419.0", |
| 16 | "openvibe-sdk v0.161.0", |
| 17 | "openvibe-shared v4.237.0" |
| 18 | ], |
| 19 | "capabilities": [ |
| 20 | "vision.image.ask", |
| 21 | "vision.text.read", |
| 22 | "vision.model.compare", |
| 23 | "vision.ui.check", |
| 24 | "vision.face.cast.match", |
| 25 | "vision.alt.write", |
| 26 | "vision.media.find", |
| 27 | "vision.receipt.read", |
| 28 | "vision.product.match", |
| 29 | "vision.camera.watch", |
| 30 | "vision.video.moments", |
| 31 | "vision.face.detect", |
| 32 | "vision.face.blur", |
| 33 | "vision.face.consent.manage", |
| 34 | "vision.face.verify.self", |
| 35 | "vision.face.find.self", |
| 36 | "vision.face.library", |
| 37 | "vision.face.cast.read", |
| 38 | "vision.models.read", |
| 39 | "vision.benchmarks.read", |
| 40 | "vision.image.review", |
| 41 | "vision.review.read", |
| 42 | "vision.review.decide" |
| 43 | ], |
| 44 | "outboundCapabilities": [ |
| 45 | "ai.run.create", |
| 46 | "network.consent.read", |
| 47 | "network.notifications.push" |
| 48 | ], |
| 49 | "capabilitiesRegistered": false, |
| 50 | "serviceManifestRegistered": false, |
| 51 | "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.", |
| 52 | "works": [ |
| 53 | "Ask a picture: multipart upload, data URL or public image URL; task ask/describe/identify/count/translate/ocr; auto/local/ai modes", |
| 54 | "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", |
| 55 | "OpenVibe.AI gateway: first-party service token (ai.run.create, namespace ai.*), OpenAI-compatible image message, AI provenance, quota and cost, no direct provider", |
| 56 | "Compare: local OCR plus one AI run per model hint, requested vs answered model, measured latency and AI cost, sample rows", |
| 57 | "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", |
| 58 | "No looks: public AI text is passed through noLooks; an answer that names looks is replaced by a neutral sentence", |
| 59 | "Local face detection and blur through YuNet without templates or tracking; detect/blur are open and rate-limited", |
| 60 | "Consent-scoped SFace matching: verify (1:1), self search in own Vision uploads, adult cast rosters and region-gated private library grouping", |
| 61 | "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", |
| 62 | "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", |
| 63 | "Network tools: routed alt text, owner-scoped CLIP index/find, Tesseract-first receipts, product vectors, DETR watch and moments, each with a receipt", |
| 64 | "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", |
| 65 | "MCP on /mcp with RFC 9728 protected-resource metadata, token challenges and route-equivalent capability checks", |
| 66 | "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", |
| 67 | "Answers, compare samples, private index and UI checks stored without image bytes; account export/deletion over every table including faces and the private index", |
| 68 | "Network sign-in as OAuth client vision (PKCE S256, vision_at/vision_rt/vision_oauth), truthful readiness, loopback metrics", |
| 69 | "Server-rendered pages with stable vi- ids/classes, discovery artifacts, deploy unit and nginx vhost, CI" |
| 70 | ], |
| 71 | "notYet": [ |
| 72 | "Public Vision Arena leaderboards and public test sets (v2); v1 stores aggregate compare samples and exposes them without subjects", |
| 73 | "Video and computer-use benchmarks (v2/v3)", |
| 74 | "OpenCV jobs placed on OpenVibe.Run; v1 uses Tesseract on this host and sharp for pixels", |
| 75 | "A real browser-rendered UI pass (JavaScript execution, getBoundingClientRect, computed styles); v1 is a documented static pass plus a screenshot pass", |
| 76 | "Search documents/outbox: v1 has no public records to index", |
| 77 | "A per-person history page; saved answers are reachable by id for their owner and staff", |
| 78 | "A tested liveness / presentation-attack detector: verify and cast enrolment return liveness \"not_checked\"", |
| 79 | "Media-object search through a source-owner grant: find yourself currently searches only the person's Vision uploads", |
| 80 | "The capability manifests and grants; the main session registers vision.* and grants them" |
| 81 | ], |
| 82 | "deployed": false, |
| 83 | "features": [ |
| 84 | "ask a picture", |
| 85 | "familiar faces for a camera owner's own cameras", |
| 86 | "local-first OCR", |
| 87 | "OpenVibe.AI routed answers", |
| 88 | "model compare with cost and latency", |
| 89 | "UI check: overflow, cut-off, contrast, overlap, layering", |
| 90 | "noLooks and consent-scoped faces", |
| 91 | "network tools: alt, index/find, receipt, product, watch, moments", |
| 92 | "account export and deletion", |
| 93 | "Network sign-in", |
| 94 | "server-rendered pages", |
| 95 | "unsafe-image review queue and three-category API", |
| 96 | "discovery", |
| 97 | "deploy files" |
| 98 | ], |
| 99 | "deployment": "not deployed: the unit and nginx vhost are deploy/systemd/openvibe-vision.service and deploy/nginx/openvibe.vision.conf", |
| 100 | "updated": "2026-11-13" |
| 101 | } |
| 102 |