TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Identifică vietăți și plante din România — imagine, cameră AR live sau sunet. Rulează local, în browser.
Translation pending
EducationHTML · JavaScriptGitHub @chiutaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
On-device fauna/flora ID with CLIP and AR camera overlay; offline PWA.
Taken from the repository README
Loading the full README.
Read the full README ↗English · Română · Français · Italiano · Español · Português · Deutsch · Magyar
Version: 20.2.0 · Last updated: 2026-10-27
Status: experimental · Offline: complete only after the first use: it needs internet once for the models (huggingface.co) and the ONNX Runtime (cdn.jsdelivr.net), then works from the cache
Interface languages: Română, English, Français, Italiano, Español, Português (PT), Deutsch, Magyar
Live / demo: https://chiuta.github.io/VietAR/
A PWA in a single index.html (+ vendor/, sw.js, manifest.webmanifest): it recognises animals and plants from a photo, the camera ("AR" overlay) or sound, gives an indicative check of the C2PA provenance signals of images, and keeps a local field journal (filterable and printable). The local engine (CLIP, 519 Romanian taxa) runs in the browser; an optional "online AI" mode is also available.
Warning: automatic identification can be wrong. Do not eat plants or mushrooms on the basis of this application; some species are toxic or deadly. The results are indicative, not scientific determinations.
Open the published page (GitHub Pages) or serve the folder with a static HTTP server (for example python3 -m http.server). From file:// the browser blocks ES modules: the interface, the journal and the export remain usable, and the application shows a clear message that identification cannot start (instead of a console error). Choose the engine (Local·RO, General, Online AI), then: "Live AR" (camera), "Image", "Sound" or "Journal".
Every saved observation now keeps its confidence level (good / fair / weak match; "indicative" for fungi, with no percentage), the close alternatives from the same result (up to 3, with a percentage only when the engine provides one) and the reasons they may be confused: same genus, same category, close score, identified only at group level. The reasons are computed from the app's own data (scientific name, category, score) and do not describe the actual features of the species. You can add your own note, filter by level and export everything to CSV/GeoJSON (the new columns come last). Older entries stay valid. The warning stays: do not eat or touch anything based on an automatic identification; confirm with a specialist.
The application works offline only after the models have been downloaded for the first time. It is not 100% local:
huggingface.co (weights of tens to hundreds of MB; the server sees the request, the IP address and the user agent, not your images). They are then kept in the browser cache.transformers.js from cdn.jsdelivr.net (see VENDOR-README-VietAR.md). The transformers.js and c2pa libraries are included locally in vendor/.contentcredentials.org (allowed in the CSP).api.anthropic.com or api.openai.com (or an OpenAI-compatible endpoint, subject to the CSP), after an explicit confirmation. The API key is kept in localStorage unless you tick "session only"; use only keys with a spending limit.localStorage/IndexedDB); it can be exported as CSV/GeoJSON.version.json (skipped on file://).'unsafe-inline' for scripts (the author's own script is accepted by SHA-256 hash); connect-src remains deliberately broad, see below.Xenova/clip-vit-base-patch16); engine "general" = Xenova/vit-base-patch16-224; sound = Xenova/ast-finetuned-audioset-10-10-0.4593. All are loaded with transformers.js 3.8.1 (bundled in vendor/) from huggingface.co as ONNX conversions published under the Xenova account; the original authors and the licence of each model must be confirmed on its model card: to be verified.transformers.js keeps the downloaded models in the browser's Cache API (useBrowserCache). New in 20.1.0: after "Prepare offline" the app asks the browser for persistent storage (navigator.storage.persist()), so the cache is less likely to be evicted; the browser may refuse, and the "clear caches" button still removes everything. No dependency added; nothing leaves the browser.The author's code and own texts: TRADE-FREE + MIT (the header of index.html; see LICENSE). The libraries in vendor/ (transformers.js, c2pa-web, c2pa), the ONNX Runtime loaded from jsDelivr, the models downloaded from huggingface.co and the embedded fonts have their own licences and are not covered by CC0; the list and the terms are in NOTICE (to be reconfirmed from the original packages at every update).
The image leaves for third parties only if: (1) you choose the "Online AI" engine, (2) you enter your own API key and (3) you confirm in the "Send to online AI" dialog. The confirmation is remembered in this browser until you press "Forget the key now" in ⚙. The "Local · RO" and "General" engines do not send images anywhere. When the page loads, no external request is made (verified). The CSP remains deliberately broad on connect-src (huggingface.co, jsDelivr, Anthropic/OpenAI/OpenRouter, contentcredentials.org) because each host corresponds to an optional feature described above; contentcredentials.org is not contacted directly by the page's code, only possibly by the C2PA library, which is why I did not remove it.
Audit: 2026-10-10
Documented in NOTICE and here, only as far as it could be verified on the web on 27 Oct 2026:
google/vit-base-patch16-224 (Google) carries the apache-2.0 tag on huggingface.co (verified).MIT/ast-finetuned-audioset-10-10-0.4593; BSD-3-Clause according to a third-party page, not confirmed on the official card.Xenova account; the licence of each conversion was not verified (the Xenova cards could not be opened), so it stays "to be verified".null or non-object entry in the model's “alternatives” no longer throws away the whole result.FFF.dialog) instead of an own copy with a native fallback; browser keys now carry the vietar. prefix (iff_cfg, iff_consent, iff_loc, iff_seen, vietar_lang → vietar.cfg, .consent, .loc, .seen, .lang) and the old ones are migrated automatically at start-up (also after importing an old .fff.json backup), so the saved AI settings, consent and language are kept. The version.json / in-page version check are aligned again.file://, offline, or download/start-up failure — plus technical details and the "↻ Retry analysis" button (tested with the network blocked on a local server).connect-src remains deliberately broad (models, ONNX Runtime, optional online AI).script-src by hash instead of 'unsafe-inline'; verified through a local HTTP server (the module and the interface start without CSP violations).file:// transformers.js is no longer imported statically (CORS error at start-up); it is loaded on demand, the interface stays functional and a visible warning appears with the steps for a local HTTP server.<main> and correct heading order (h2 in dialogs and cards); 0 axe-core violations at 1280 and 360 px.