TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證On-device fauna/flora ID with CLIP and AR camera overlay; offline PWA.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 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.