Windows-GPU-UNLOCK
RTX3090 UEFI 포트, 한국어 무리셋 윈도우 부팅 가이드, 검증된 소스와 벤치마크 제공
Local web app for cataloguing and browsing large STL/3MF model libraries. Features full-text search, tag filtering, variant grouping, 3D preview, metadata enrichment from Gumroad/Cults3D/MMF, and a Kit Builder for assembling multi-part prints. Stack: FastAPI + SQLite + React + Docker. Recently restyled with a refreshed dark-indigo visual design.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Free, open source, and self-hosted: a home base for a 3D print library that's gotten out of hand. Search, tag, group variants, and actually find that one file again instead of digging through nested folders. 📖 User documentation: the STL Studio Wiki is the canonical user guide. 🗺️ What's coming next: ROADMAP.md 🤝 Contributing: issues and PRs welcome. See CONTRIBUTING.md. The wiki is generated from the in-repo docs/ folder. The in-app Help page is maintained separately for concise, contextual guidance.README 전문 보기 ↗
Free, open source, and self-hosted: a home base for a 3D print library that's gotten out of hand. Search, tag, group variants, and actually find that one file again instead of digging through nested folders.
📖 User documentation: the STL Studio Wiki is the canonical user guide. 🗺️ What's coming next: ROADMAP.md 🤝 Contributing: issues and PRs welcome. See CONTRIBUTING.md.
Getting Started · Feature Guide · Scanning & Folder Structure · Troubleshooting
The wiki is generated from the in-repo
docs/folder. The in-app Help page is maintained separately for concise, contextual guidance.
Built because I had too many STL files and no good way to keep track of them. It's grown from a personal fix into something other makers, painters, and hobbyists use too.
Go to the Releases page and download the file for your OS:
STL-Studio-Setup-<version>.exestl-studio-linuxFor testing the newest successful main build before a versioned release,
use the rolling Main Build prerelease on the same Releases page.
On Windows, run the installer and launch STL Studio from the Start menu.
The Electron app opens in its own desktop window. On Linux, mark the binary
executable, run it, and open http://localhost:8484 in your browser.
Windows will warn you the first time. STL Studio is not yet code-signed, so SmartScreen shows "Windows protected your PC" with an unknown publisher. Choose More info → Run anyway. This is expected for every release today — see Windows blocked the installer for the full walkthrough, and Verifying your download if you want to confirm the file is genuine before running it.
Go to Settings and add the folder paths where your STL files live.
Click Scan Library — models appear within a few minutes.
Your library database is stored in your user data folder and survives app updates:
%LOCALAPPDATA%\STL-Inventory\~/.local/share/stl-inventory/Linux note: You may need to mark the binary as executable before running it:
chmod +x stl-studio-linux
Copy .env.example to .env and set your drive paths (forward slashes, even
on Windows):
STL_DRIVE_1=D:/3D STLs
STL_DRIVE_2=E:/More STLs # optional second drive
STL_ROOTS=/mnt/drive1,/mnt/drive2
STL_DRIVE_1 mounts at /mnt/drive1, STL_DRIVE_2 at /mnt/drive2. Both are
seeded as scan roots automatically on first boot.
Start everything:
docker compose up --build
Open http://localhost in your browser.
Click Scan Library to index your files.
Got models on more than two drives, or need to change mounts? See docs/docker.md — Docker can't be configured purely from the Settings page the way the standalone app can.
Prefer not to build? Pre-built
backendandfrontendimages are published to GHCR on every successfulmainbuild and every release — see docs/docker.md → Pre-built images.
<drive root>/
<Creator Name>/
<Model Name>/
*.stl / *.3mf / *.obj
*.jpg / *.png ← first image used as thumbnail
A folder is only indexed as a model if it contains 3D files.
Full_cutted, No_cuts, Semi_cutted under Akuma/) are collapsed into a single group card with a variant count badge; click to open the group and select individual variants{creator}/{character}/… layout, treats everything under a character folder as one variant group instead of guessing from names. Off by default; rescan to apply/triage)→ / Space = dismiss, S = skip, ← = back{creator}/{character}/{title}, with optional {scale}) to tidy files on disk{keep} (Settings → Library) to preserve the folder levels the template can't name — a faction, game system or release wave, however deep — instead of dropping them; it stops at the first level the destination already namesAlternate, their relative
folders, and companion files stay intact; uncertain package boundaries are
blocked rather than flattened. Character-level folders such as img/ and
Renders/ move too when every package for that character is selected; partial
selections leave those shared assets in place and say so in preview.The Paint Shelf is always available in the nav. Enabling Settings → Painting Guides additionally adds Guides (guide authoring/reading).
Paint Shelf — paint inventory: search/filter by brand, line, finish, and owned state, with color chips for swatches. Per-line code patterns (regex) validate paint codes on entry. CSV import/export in PaintRack format (by Courageous Octopus — not affiliated) with a diff preview (never a blind overwrite); optional Color column (#RRGGBB, "rgb(r,g,b)", or "hsv(h,s,v)") pre-populates swatches on import.
Color-match studio — match a reference photo against your shelf. A value ladder (shadow → mid → highlight ramp in the same hue family, anchored on the sampled mid-tone) plus a hue ranking (ΔE2000) and a labelled glaze/wash list, each with a confidence band — suggestions to confirm by eye, never auto-applied. Eyedropper: click the preview to sample a specific spot (skin, hair, leather), plus an automatic palette overview with the background excluded. Large photos are downscaled in-browser before upload.
Painting Guides — step-by-step guides tied to your Paint Shelf:
/import)Preview packs) shows one card per pack (each source subfolder); enrich each with creator/character/title/tags, pick a destination Library, and Import?is_inbox=1 filter)/install)<creator>/<character> — the download → extract → move → scan sequence in one action, with a live "Will install to" destination preview{creator} layout; any other layout is refused, since there's no tag value collected to place a non-default level withneeds_review queue is durable across rescans — a model is flagged only when first indexed, so unreviewed items persist and dismissed ones never return; the per-run count is reported as flagged_for_reviewmodel_tags table for fast filtering.db) of your index — tags,
favorites, and print queueREINDEX, and verifies integrity againWindows packaging CI smoke-tests the generated NSIS installer end to end. It qualifies custom and default install directories, Start-menu and desktop shortcuts, repair/reinstall, packaged-app launch and restart, database persistence, and uninstall cleanup while confirming user data is retained. This is a packaging smoke gate, not a replacement for manual UI acceptance testing on a clean Windows machine.
Release candidates also require the manually dispatched Installed Update
Smoke workflow, which verifies the published-bootstrap → candidate updater
path, installer replacement, relaunch version, and retained database state. See
docs/release-checklist.md.
Both frontend and backend are baked into their images — rebuild after any code change:
docker compose build backend && docker compose up -d backend
docker compose build frontend && docker compose up -d frontend
Or rebuild both at once:
docker compose build && docker compose up -d
For backend development, the docker-compose.dev.yml overlay bind-mounts the
source and runs uvicorn with --reload, so Python edits take effect without a
rebuild:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
(The base image runs without --reload — it's a dev-only flag.)
Tests run automatically on every commit via a Husky
pre-commit hook. After cloning, run npm install at the repo root once to wire it up,
then docker compose build backend so the pytest step has an image to run in.
Frontend (vitest)
npm --prefix frontend test
Backend (pytest — runs in Docker, no local Python env required)
docker run --rm --workdir /app \
-e DATABASE_URL="sqlite:///:memory:" \
-v "$(pwd)/backend:/app" \
-v "$(pwd)/packaging:/packaging" \
stl-inventory-backend:latest \
sh -c "pip install -q pytest==9.1.1 pytest-cov==7.1.0 && pytest tests/ -q --tb=short"
Every PR to main (and every push to main) also runs the suite via the Tests
workflow, so regressions are caught alongside the binary Build Check.
CI enforces regression floors against the current tested baseline: 88% backend statement coverage; 62% statements, 58% branches, 54% functions, and 65% lines for the frontend; and 48% statements, 83% branches, 86% functions, and 48% lines for the desktop process. Coverage reports are uploaded as workflow artifacts for 14 days so changes can be investigated without weakening the gates.
Run the same coverage checks locally with:
cd backend && pytest --cov=app
npm --prefix frontend run test:coverage
npm --prefix desktop run test:coverage
GitHub Actions builds the Windows NSIS installer and Linux headless binary.
One-click release: Go to the Actions tab → Release → Run workflow, pick
patch/minor/major. It computes the next version, creates the tag, and builds
a draft GitHub Release. The workflow validates the complete asset set, generates
SHA256SUMS, and runs the installed-update qualification before publishing it.
Manual tag (alternative): git tag v1.2.3 && git push origin v1.2.3 triggers the
same build.
Every PR to main runs Build Check, which compiles both supported platform
artifacts (without releasing) so packaging breaks are caught before merge.
| Service | Port |
|---|---|
| App (nginx) | 80 |
| Backend (FastAPI) | 8000 |
| Frontend (Vite dev) | 3000 |
STL Studio started because I had a problem: way too many STL files and no good way to keep track of them all. What began as a personal tool turned into something I thought other makers, painters, gamers, and hobbyists might find useful too.
If STL Studio has helped you organize your collection, rediscover forgotten models, or simply spend less time hunting through folders, please consider supporting the project through Patreon or Buy Me a Coffee.
Your support helps fund continued development, but it also helps keep resin in the printer, paint on the hobby desk, and supports my family as I balance software development, creativity, and caregiving.
There's absolutely no obligation—STL Studio is, and will remain, a passion project. But every bit of support is deeply appreciated and helps me continue building tools and content for the community.
Thank you for being here, and happy printing!
— Brent the Programmer