No description
Find a file
dlawler489 5fb3939bcd
All checks were successful
build-and-push / docker (push) Successful in 11s
Add first-run setup wizard for import sources
On a fresh install (no integration settings yet), prompt once for the
Thingiverse/MakerWorld/Printables tokens and FlareSolverr URL, with a
"skip for now" option. /api/config exposes setupComplete (true if any
setting is configured or setup was dismissed); POST /api/setup/complete
records dismissal. DB password stays a deploy-time env var by necessity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:35:18 +10:00
.forgejo/workflows CI: push image using a Forgejo access token 2026-06-22 17:48:57 +10:00
db Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
lib Add Docker packaging (Dockerfile, compose, sidecar deps) 2026-06-22 16:51:06 +10:00
public Add first-run setup wizard for import sources 2026-06-22 20:35:18 +10:00
tools Add Docker packaging (Dockerfile, compose, sidecar deps) 2026-06-22 16:51:06 +10:00
.dockerignore Add Forgejo Actions CI to build & push the image 2026-06-22 17:00:49 +10:00
.env.example Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
.gitignore Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
docker-compose.yml compose: pull image for deploy instead of building 2026-06-22 20:29:54 +10:00
Dockerfile Add Docker packaging (Dockerfile, compose, sidecar deps) 2026-06-22 16:51:06 +10:00
package-lock.json Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
package.json Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
README.md Initial commit: Printhive 3D-print file library 2026-06-22 13:15:17 +10:00
server.js Add first-run setup wizard for import sources 2026-06-22 20:35:18 +10:00

Printhive

A self-hosted web app for organizing your 3D-printing files (STL, 3MF, OBJ, STEP, GCODE, ZIP) into a searchable library — with in-browser 3D previews, collections, license/commercial-use tracking, and one-paste import from popular model sites.

Features

  • Library of models, each owning one or more files; tags, collections, descriptions, print settings.
  • Import from URL:
    • Thingiverse — downloads files automatically via the official API (needs a free app token).
    • Printables — downloads files automatically via its public GraphQL API (no auth needed for free models).
    • MakerWorld — downloads files via FlareSolverr (solves Cloudflare) + your account token.
    • cubee3d (Hive) and any other URL — imports title/description/preview image; you add the files manually.
  • In-browser 3D viewer (Three.js) for STL/OBJ, and for 3MF via a server-side trimesh GLB conversion (handles Bambu/MakerWorld production-extension files the JS loader can't).
  • Auto thumbnails rendered from the model; embedded 3MF thumbnails used when present.
  • License & commercial-use tracking — captured per source, with a "sellable / non-commercial" indicator (a guide; verify before selling).
  • Collections — group models (a model can be in many); rename/delete without losing models.
  • Editing — rename/retag, edit print settings, override commercial-use, refresh metadata from source, re-download files, download all files as a zip.
  • Settings — API tokens / FlareSolverr URL stored in the database (with .env fallback), secrets masked.

Tech stack

  • Node.js + Express, vanilla-JS frontend (no build step), PostgreSQL.
  • Three.js (viewer) via CDN import map.
  • Python + trimesh sidecar for 3MF→GLB conversion and volume.
  • Optional FlareSolverr for Cloudflare-protected sources.

Setup

  1. Postgres — create a database and point DATABASE_URL at it. The schema is applied automatically on startup.
  2. Python sidecar (for 3MF previews/volume):
    python3 -m venv tools/venv
    tools/venv/bin/pip install trimesh numpy networkx lxml
    
  3. Install deps and run:
    npm install
    cp .env.example .env   # set DATABASE_URL (+ optional tokens)
    npm start
    
  4. Open http://localhost:3000

Configuration

Settings live in the database (editable in the app's Settings menu) and fall back to environment variables:

Setting Env var Purpose
Thingiverse API token THINGIVERSE_TOKEN Thingiverse auto-download
FlareSolverr URL FLARESOLVERR_URL Read Cloudflare-protected sites (MakerWorld)
MakerWorld auth token MAKERWORLD_TOKEN MakerWorld downloads (bearer token from your session)
Printables auth token PRINTABLES_TOKEN Optional; account-gated Printables files

Notes

  • Auto-download from MakerWorld/Printables relies on their private/session APIs and can break if they change; failed/partial imports can be recovered with "Download files from source".
  • The commercial-use badge is a best-effort read of the license — always confirm on the source page before selling.