ForgeIndex User Manual
This manual reflects the current user-facing behavior of ForgeIndex.
Core Capabilities
- Recursive scan/index into SQLite with stale-index cleanup.
- Domain/kind/subkind file classification.
- Model-root browsing with SQL-backed filtering, sorting, and paging.
- Branded Windows startup flow (Windows 11 app icon + centered splash screen shown before main UI on the same monitor as the main window).
- Startup workspace persistence for last-used monitor, maximized/restored state, window bounds, and left/right pane proportions.
- Folder tree + Gallery surface (virtualized list/tile).
- 3D/image/text previews, open-only routing, and external tool launch.
- Embedded slicer project thumbnail extraction with image-first preview layout and compact expandable text summary.
- Automated STL print-detail analysis that estimates minimum meaningful feature size, detail score, and printer-fit hints from mesh geometry instead of misleading
8K/12Klabels. - Broad external-tool discovery (maker/CAD/EDA/slicer/vector/image apps) with extension-aware launch routing.
- Manual/auto tags, categories, favorites, print-type controls.
- Layered dictionary inference (v2 + v1 compatibility).
- Multi-library isolation (separate DB and runtime storage per library root).
- Optional guided setup with first-run onboarding, skip/don't-show-again behavior, and replay from the Help menu.
- Data intelligence tools (classification integrity, aliases, signatures, mesh stats).
- Health/Data Quality dashboards and DB health maintenance UI.
- Offline ONNX/PT vision tagging (CUDA/CPU/Auto), with library-scoped profiles, staged pending review, runtime-path override, and report.
- Comprehensive report generation (Markdown/JSON) and operation audit trail.
Guided Setup
ForgeIndex includes an optional built-in guided setup that introduces the normal workspace without changing data by itself.
- It can appear on first launch.
- It can be skipped.
- The user can choose not to show it automatically again.
- It can be reopened later from
Help -> Guided Setup / Tour.... - It points at the real main UI so users learn the normal workflow in place.
Optional AI Add-ons
ForgeIndex's AI subsystem is completely optional and additive. The core app still works normally with no AI runtime, no models, and no context packs installed.
- Global master switch plus per-library AI enablement keep the AI lane opt-in.
- Manifest-backed runtime/model/context packs are discovered under
%LOCALAPPDATA%\TerkWerX\ForgeIndex\ai\packs, validated, and surfaced as installed, usable, and active states. - Manual selected-image-only vision analysis stores results in separate
ai_*tables without touching scan/index flows. - Selected-image review and the current-library review queue manage stored AI annotations with
unreviewed,accepted, andrejectedstates. - Accepted AI labels can be explicitly promoted into normal manual tags, including one-at-a-time alternate-label promotion, with duplicate-safe writes and an
AIprovenance badge on promoted tags. - Accepted primary AI labels can also be explicitly mapped into the existing folder-category lane for the selected image.
- No automatic inference, no background AI processing, and no automatic conversion of AI output into core metadata.
Library-Isolated Mode (Multi-Library)
ForgeIndex supports physically separate, strictly isolated libraries (for example one per drive/root).
Marker Folder
Each library root owns:
<library-root>\.forgeindex
Key files in that marker folder:
<library-root>\.forgeindex\library.manifest.json
<library-root>\.forgeindex\<library-db>.db
<library-db>.db is manifest-controlled (not always a fixed filename).
Startup, Discovery, and Hotplug
- Known library roots + last-active library are tracked in:
%LOCALAPPDATA%\TerkWerX\ForgeIndex\libraries-state.json
- On startup, ForgeIndex discovers libraries from known roots and connected drives containing
.forgeindex\library.manifest.json. - If a new drive appears while ForgeIndex is already running, it prompts to:
- inspect or ignore the drive
- load existing library if a manifest is found
- create a fresh library if none exists
Strict Library-Local Guardrails
When Libraries -> Strict Library-Local Mode is enabled:
- scan/open-db actions are blocked unless an active library is selected
- fallback cross-library database workflows are blocked
- status messaging explains why actions were blocked and how to attach/create a library
First-Run and Relocation Wizards
- First-run setup wizard (
Library Setup Wizard) can auto-suggest non-system drives, create/attach a library, and optionally start initial scan. - Metadata relocation wizard (
Libraries -> Relocate Current Library Metadata...) can move DB/caches from fallback app-data storage into the active library marker folder.
Library UI Workflow
Libraries -> Attach or Create Library...Libraries -> Register Current Scan Root as LibraryLibraries -> Rename Current Library...Libraries -> Refresh Connected LibrariesLibraries -> Remove Current Library from CatalogLibraries -> Start Fresh Workspace...
The left library strip includes a + tab button to create a fresh library directly.
Isolation Guarantees
- Active tab/library selects the active DB.
- Scan root and scans are constrained to active library root.
Open DBis blocked for cross-library DB paths while a library is active.- Libraries do not share rows/tags/categories because each uses its own DB file.
Storage Model and Paths
ForgeIndex now has two storage modes:
Library-bound mode(preferred): runtime metadata follows the library under<library-root>\.forgeindex.Fallback mode: local app-data storage when no library is active.
Runtime Roots
- Runtime storage root is resolved by:
- active library marker folder, else
%LOCALAPPDATA%\TerkWerX\ForgeIndex- A fresh workspace DB path prefers a non-system local drive when available:
\<drive>\.forgeindex\workspace-default.db- falls back to
%LOCALAPPDATA%\TerkWerX\ForgeIndex\forgeindex.dbif needed
Common Paths (Library-Bound)
<library-root>\.forgeindex\<library-db>.db
<library-root>\.forgeindex\preview-cache\...
<library-root>\.forgeindex\dictionaries\...
<library-root>\.forgeindex\safety-net\...
Local Profile Paths (Always Local)
Crash and diagnostics logs remain local to the user profile:
%LOCALAPPDATA%\TerkWerX\ForgeIndex\logs\crash-YYYYMMDD.log
%LOCALAPPDATA%\TerkWerX\ForgeIndex\logs\preview-extractor.log
Vision PT export cache/venv also uses local profile storage:
%LOCALAPPDATA%\TerkWerX\ForgeIndex\vision-cache
Window placement persistence also remains local to the user profile:
%LOCALAPPDATA%\TerkWerX\ForgeIndex\window-placement.json
Storage Policy UI
Use:
Preferences -> Storage Policy...
This shows resolved runtime paths for the active library/session, with copy/open actions.
Scanning and Indexing
Pipeline
- Pass 1 counts folders/files for totals.
- Pass 2 indexes into SQLite with batched writes and transactions.
After scan finalize:
- stale folders under the scanned root are removed by run id
- folder search index is refreshed for that root
- background workers run only after user action arms automation (for example scan/toggle); startup and library switches keep them paused until then
Traversal Exclusions
- hidden/system/reparse-point directories
System Volume Information$RECYCLE.BIN
Scan Monitor
- live progress and ETA
- streaming log
- encountered-extension legend
- extension CSV export
- fullscreen (
F11,Esc)
Background Incremental Indexing
Toggle in:
Preferences -> Background Incremental Indexing
Current behavior watches the active scan root context and schedules debounced incremental scans.
Classification
Classifier output:
domainkindsubkind
Current domain vocabulary:
Mesh,CAD,Slicer,CNC,Electronics,Images,Media,Code,Documents,Metadata,Archive,Other
Unknown extensions are indexed as Other.
Filtering, Search, Sorting, and Paging
Model-root query supports:
- text search (FTS5 prefix matching)
- optional doc-content search (
Search docs) - domain/kind/tag/category filters
- favorites-only, has-images-only, hide-noise, hide-NSFW
- minimum model/image constraints
- result limit + page navigation
- sort:
Model Count,Highest Richness
Limit clamp:
50..50000
Selective Doc Search
When Search docs is enabled, content search is applied to selected, small metadata docs:
README.txt,README.md,description.html,info.txt- size cap:
256 KB
NSFW filtering still applies.
Folder and Gallery Surfaces
Folder/Model Surface
- Generic container folder collapsing (
stl,obj,models, etc.) for display. - Ecosystem strip:
CAD -> Mesh -> SlicerProject -> SlicedOutput -> GCode. - Richness score (
0..100) with weighted signals. - Folder summaries include models/images/files/prints/subfolders/favorite.
Gallery Surface
- dedicated gallery tab with list/tile modes
- virtualized rendering (
VirtualizingWrapPanel+ virtualizedDataGrid) - chunked keyset paging (no load-all)
- debounce + cancel search updates
- thumbnail size slider (persisted)
- async thumbnail loading with LRU memory cache
- multi-select (Ctrl/Shift + additive checkbox support)
- bulk tagging/move/delete actions with safety-net flow and undo
Image-to-Model Linking
- explicit image/model link table:
image_model_links - deterministic “Go to model files for this image” resolution order:
- explicit link
- image folder if model root
- nearest parent model root
- fallback image folder
- auto-link suggestions based on path/name similarity + confidence
Cover Images
- per-model-root cover image support (
model_root_cover_images) - assign from gallery/context workflows
Preview and Open Routing
Preview Capability Routing
InternalPreviewExternalViewerRequiredOpenOnlyNoPreview
Internal Preview
- 3D mesh:
.stl,.obj,.3mf - image preview pipeline
- text snippet preview:
.txt,.md,.log(read-only, capped)
Embedded Slicer Preview Extraction
Supported image extraction for:
.lys,.lyt,.chitubox,.factory,.curaprofile
Includes cache/fallback handling and diagnostics logging.
When an embedded slicer thumbnail is available, ForgeIndex prioritizes that image in the main preview surface and keeps the textual project summary collapsed under a compact Project Summary expander until needed.
Open-Only
.html,.htm(browser).url(parsesURL=...).pdf(default PDF handler)
External Viewer Categories
SlicerVectorEditorImageEditorBrowserCADViewerEDAPDFViewer
Each tool supports executable path, argument template, optional extension list, and per-category default.
SolidWorks Optional Preview
.sldprt/.sldasmcan be converted to cached.stlwhenFreeCADCmd.exeis available viaPATHorFORGEINDEX_FREECADCMD_PATH.
Large STL Handling
- warning threshold around
1,000,000triangles for preview path - preview-only decimation for very large meshes
- source files are never modified
STL Print Detail Analysis
ForgeIndex now runs background STL detail analysis as part of mesh-stat enrichment.
- Geometry-derived metrics include triangle count, sampled triangle count, bounds, surface area, triangle density, edge-length distribution, curvature complexity, thin-feature score, surface smoothness, mesh cleanliness, estimated minimum meaningful feature size, and a composite detail score (
0..100). - The system is intentionally geometry-first: it does not label meshes as
8K,12K, or16K. Instead it estimates the smallest meaningful features in the STL and stores coarseResolution Benefit Class/Recommended Printer Typehints. - Legacy rows and changed STL files are automatically re-analyzed when the file
mtime, file size, or analysis version changes. - The model-files grid now exposes
DtlandMin mmcolumns for analyzed STL files, and the cell tooltip summarizes the score, minimum feature size, benefit class, and printer recommendation. - Histogram payloads for feature sizes and curvature distributions are stored in SQLite for future graphing/report workflows.
Screenshot Capture
- Save Screenshot writes PNG into selected folder
- collision-safe auto naming
- immediate DB index update of saved image
Tagging and Dictionary Inference
Automatic Theme/Tag Inference
- tokenizes folder/file names
- removes noise tokens
- matches dictionary terms
- writes auto tags with confidence/rule metadata
- re-derives auto tags on scan
- manual tags remain untouched
Layered Dictionary Model (v2)
Layers merged in order (later wins):
- Base:
Assets/TagInference/tag-dictionary.base.json - Community:
<storage-root>\dictionaries\tag-dictionary.community.json - User:
<storage-root>\dictionaries\tag-dictionary.user.json - Additional
*.jsonfiles in dictionaries folder load alphabetically between Community and User.
Merged snapshot:
<storage-root>\dictionaries\tag-dictionary.merged.json
Validation includes schema, references, confidence bounds, and fallback to last-known-good snapshot if needed.
Dictionary UI and Tooling
- dictionary hash display in main toolbar
- reload/info actions
- developer tool:
dotnet run --project tools/ForgeIndex.DictionaryTool -- validate Assets/TagInference/tag-dictionary.base.json
dotnet run --project tools/ForgeIndex.DictionaryTool -- normalize Assets/TagInference/tag-dictionary.base.json
dotnet run --project tools/ForgeIndex.DictionaryTool -- add-term Assets/TagInference/tag-dictionary.base.json --term "spider-man" --tags fr.marvel,char.spiderman --group "Marvel Characters"
dotnet run --project tools/ForgeIndex.DictionaryTool -- convert-v1 old-dict.json new-dict.json
dotnet run --project tools/ForgeIndex.DictionaryTool -- merge base.json community.json user.json
Offline Vision Tag Enrichment (ONNX/PT)
Vision can enrich tags offline from either .onnx or .pt model selection.
Providers
Auto(tries CUDA first, then CPU fallback)CUDACPU
Model Inputs and Resolver
.onnxpath: used directly..ptpath: auto-exported to ONNX and cached, then inferred through ONNX Runtime.- PT export uses a managed cache/venv pipeline under:
%LOCALAPPDATA%\TerkWerX\ForgeIndex\vision-cache
- Export cache key includes source path + write-time + file length + export arguments.
- Resolver diagnostics include cache hit/miss, chosen python, venv path, pip output, export command, and resolved ONNX path.
Labels Resolution
For each run, labels are resolved in this order:
- Active profile labels file override (if present and exists)
- PT cache labels (
<cacheKey>.labels.txt) when source is.pt - ONNX sibling labels:
model.labels.txt -> model.txt -> labels.txt
- fallback generated class names (
class_{id})
Library-Scoped Vision Profiles
- Profiles are stored in each library DB (
VisionModelProfiles) and do not leak across libraries. - Active profile id is stored per library (
vision_active_profile_idin settings). - Profile fields include model path, provider, optional Python override, export options (opset/imgsz/simplify/nms), and optional labels path.
- Switching libraries switches the active vision profile context automatically.
Data Model
- run/file processing state:
file_visual_tag_runs - pending and reviewed detections:
vision_detections - committed tag candidates:
file_visual_tag_candidates - per-profile confidence overrides:
vision_profile_label_confidence_overrides - committed file tags use source
AutoVision
Pending Review Workflow (Two-Phase)
- Inference stages detections as pending (
is_pending=1) rather than writing final tags immediately. - Pending review supports:
- label click filter and confidence sort
- live photo stream filtering by selected label
- multi-select +
Select all filtered - bulk pending edits:
- remove label
- replace label
- add label
- set per-profile minimum confidence override
- Finalization actions:
Commit Pendingconverts non-rejected pending detections into final candidates/tagsDiscard Pendingrejects/removes pending review state- Commit/discard operations are transactional and idempotent.
Single Active Pending Batch Rule
- Pending scope is model-identity specific (model path/file stamp + labels + provider + profile scope + PT export args).
- Normal start is blocked while pending exists for the current model identity.
- Explicit replace flow (
Start New Run (Replace Pending)) discards current pending first, then stages a new run. - Service-layer guardrails enforce this rule for UI and non-UI entry points.
Runtime Behavior
- Vision enrichment loop is background/cancellable, but remains paused until background automation is armed by user action.
- While pending review exists for the active model identity, background inference pauses and reports a pending-review status instead of continuing.
- Manual batch runs can still be launched from the Vision menu/control center, subject to pending-review guardrails.
UI
Vision -> Vision Control Center...Vision -> Vision Tagging Settings...Vision -> Vision Results Report...Vision -> Run One Vision Batch Now
Vision Control Center
- active profile selector with add/edit/duplicate/delete
- ONNX/PT model + labels + provider + threshold controls
- CUDA/cuDNN runtime-folder picker (
CUDA/cuDNN folder) to override native DLL discovery - optional Python executable picker for PT export
- image-type profile selector with built-in model guidance (best-fit model strategy + expected threshold range)
- one-click
Applyaction to set a profile-recommended threshold - live queue + throughput telemetry
- rolling photo stream and detected-object counters
- pending review banner and replace safety toggle
- commit/discard and bulk pending-label edit actions
- quick access to diagnostics and report
Vision Results Report
Report includes:
- total runs (ok/error/pending)
- top detected objects
- top auto-applied tags
- top run errors
- runs by model
- recent file-level outcomes
Export formats:
- Markdown (
.md) - JSON (
.json)
Model Compatibility Notes
- ForgeIndex uses
Microsoft.ML.OnnxRuntime.Gpu(GPU package) and blocks accidental CPU-package-only reference at build time. - CUDA execution requires NVIDIA drivers plus compatible runtime dependencies discoverable by the process.
- For current ONNX Runtime GPU setup in this repo (
1.22.x), targetCUDA 12 + cuDNN 9 + VC++ runtimecompatibility. - If CUDA is unavailable,
Autotransparently falls back to CPU execution. - Legacy saved provider value
DirectMLis normalized toAuto. - Supports classifier-style and YOLO-like rank-3 output patterns currently handled by runtime parsing.
- Detects Git LFS pointer stubs and surfaces explicit model/labels configuration errors.
- PT export requires Python + ultralytics tooling available (auto-provisioned in resolver venv when possible).
- Output quality depends on model architecture, training domain, and labels taxonomy.
CUDA Runtime Folder Override
- In
Vision Control Center, setCUDA/cuDNN folderwhen your CUDA/cuDNN DLLs are not reliably found via systemPATH. - The selected folder is persisted in settings (
vision_runtime_bin_path) and prepended to process DLL search at runtime. Clear Pathsin the Vision Control Center clears model path, labels path, and the CUDA runtime-folder override.- Live Reactor diagnostics include runtime readiness text and dependency-status text; when dependencies are identifiable, missing DLL names are surfaced there.
Data Intelligence and Hygiene
Classification Integrity
- integrated into comprehensive report (Markdown/JSON)
- standalone check action:
Preferences -> Run Classification Integrity Check...- checks include drift, conflicts, unknown extensions, and noise distributions
Root Naming / Display Alias Tool
- generic root detection + confidence + reason
- display aliases in
model_root_display_aliases - bulk apply/revert via:
Preferences -> Fix Generic Root Names...- display-only aliases (never renames disk folders)
Duplicate Structure Detection
- structural signatures in
model_root_signatures - ignore table
model_root_signature_ignores - exact cluster grouping + near-duplicate similarity view
Mesh Stats Enrichment (STL-first)
- stored in
file_mesh_stats - includes triangle count + bounding box + timestamps
- background worker, cancellable, with diagnostics counters
- filtering and warning badges use these stats
Health Dashboard
Open:
Preferences -> Health Dashboard...
Views include roots with:
- 0 images
- 0 model files
- large file counts
- archive-only
- metadata-only
- untagged
- missing cover image
Actions:
- Open root
- Assign cover
- Tag
- Add to ignore
Workflow:
- double-click/Enter navigates main panel to the selected root
- dashboard stays open for back-and-forth cleanup
- optional auto-advance selection mode
Data Quality Dashboard
Open:
Preferences -> Data Quality Dashboard...
Tracks and repairs:
- stale folder rows
- broken file rows
- orphan image-model links
- untagged images
- duplicate tags (case-insensitive)
Diagnostics, Maintenance, and Audit
Performance Diagnostics
Open:
Preferences -> Performance Diagnostics...
Includes live metrics for:
- gallery query latency
- thumbnail cache/decode activity
- UI-thread stall warnings
- classification integrity runtime
- signature build runtime
- mesh enrichment throughput/queue
- vision enrichment throughput/queue
- doc-search latency
Database Health Tools
Open:
Preferences -> Database Health Tools...
Actions:
integrity_checkvisibility- index stats
ANALYZEVACUUM- backup
- restore
Corruption Recovery Prompting
When SQLite corruption-like failures are detected (for example error 11 malformed image), ForgeIndex:
- classifies as corruption
- records audit event
- guides user to Database Health Tools for restore/switch flow
Operation Audit Log
Open:
Preferences -> Operation Audit Log...
Tracks core operations including deletes, stale cleanup, tag/category edits, print-type changes, external launches, report generation, integrity checks, alias/signature actions, mesh/vision batches, and hygiene actions.
Comprehensive Report
Open:
Preferences -> Generate Comprehensive Report...
Output:
- Markdown (
.md) or JSON (.json)
Includes counts, coverage window, domain/kind/extension distributions, tag/category usage, print-type breakdown, top folders, integrity section, and recent audit activity.
External Tools
Open:
Preferences -> External Tools...
File context menus support Open, Open With..., Reveal in Explorer, Copy Path, browser-open actions, and category-specific Open in <Tool>....
Discovery and Routing
Discover Installed Toolsnow probes a wide signature set across slicers, CAD viewers, EDA suites, vector editors, and image editors.- Detection sources include:
- common install roots (
Program Files,Program Files (x86), local app install folders) - registry App Paths (
HKLM/HKCU, includingWOW6432Node) - registry uninstall metadata (
HKLM/HKCU, includingWOW6432Node) - Discovered tools can include extension profiles so launch selection stays file-type aware when multiple tools exist in the same category.
Startup Experience
- On first launch, ForgeIndex opens maximized on the selected monitor with a centered splash image and branded Windows 11 icon before opening the main window.
- On later launches, ForgeIndex restores the last-used monitor, maximized/restored state, normal window bounds, and left/right pane widths before showing the main workspace.
- If the saved display layout is no longer available, the restored window bounds are clamped back onto an available monitor.
- Splash visibility is intentionally delayed to remain on-screen for at least 3.5 seconds.
Known Limitations
- Windows-only (WPF).
- Internal 3D preview is limited to
.stl,.obj,.3mf; other CAD/mesh formats use external tools. - Very large meshes can still be heavy to preview even with decimation safeguards.
- Incremental indexing currently focuses on active-root workflows; multi-root scheduling/profiles remain future work.
- Vision tagging quality is model-dependent and may produce low-value/no detections if model taxonomy does not match your dataset.
- Vision runtime override is currently a single folder path; if CUDA/cuDNN DLLs are split across multiple folders, use system/user
PATHin addition to the override.