Import, collection import and synced collections from MyMiniFactory, alongside MakerWorld, Printables and Thingiverse. - Backend: API v2 client with an instance-wide API key for metadata, collections and authors; files from MyMiniFactory's own download links (free models need no login). Paid models, and free ones whose files are archives, download as the user from their MyMiniFactory library through their session (PHPSESSID), fetching the model files MyMiniFactory unpacked from each archive. Paid models are left out of collection listings and syncs. - One migration: MyMiniFactory category ids, username and session columns, plus a data migration giving existing users' starter categories the new category ids. Category matching now prefers the most specific site category. - Frontend: provider everywhere the others appear (badges, Configuration and Administration providers, sync Browse tab, user menu, link detection, System Health, category ids), shared instance-key form for Thingiverse and MyMiniFactory, en and lt. - Thingport Grab: new provider sites are allowed once from the popup (optional all-sites access, content script registered at runtime), so adding one never makes the browser disable the extension; captures the signed-in MyMiniFactory username and session; paid-model notice. - Docs, website, store assets and screenshots updated.
Running Thingport on CasaOS
Thingport is a 4-container stack (Postgres, FlareSolverr, backend, frontend) that talk to
each other by container name -- the frontend's nginx config, for example, proxies /api/*
straight to http://backend:8000. CasaOS's App Store is built around single-container
"customized apps" with a compose editor underneath, so the easiest paths are either pasting
the full stack into that editor or running compose yourself over SSH.
Option A: Install a customized app
- App Store -> Install a customized app (the "+" / custom install button, wording varies slightly by CasaOS version) -> switch to the Docker Compose / YAML editor.
- Paste in
docker-compose.ymlfrom this folder. - Copy
.env.exampleinto the environment variables section and fill in:AUTH_SECRET-- any random string, e.g.openssl rand -hex 32from a terminalPOSTGRES_PASSWORD-- any password
- Install/submit the form.
Option B: Plain docker compose over SSH
- SSH into CasaOS and create a folder for the stack, e.g. under
/DATA/AppData/thingport. - Copy
docker-compose.ymland.env.exampleinto it, renaming the latter to.envand filling in the same values listed in Option A. - From inside that folder, run:
docker compose up -d
Either way, Thingport creates two folders on first start:
/DATA/AppData/thingport/postgres (database) and /DATA/AppData/thingport/storage (your
imported models) -- CasaOS's conventional appdata location, so they show up in the Files
app alongside your other apps' data.
Open it
Once all 4 containers show healthy/running, open http://<your-casaos-ip>:<WEB_PORT>
(default port 80). If you used Option A, CasaOS should also pick up the exposed port and
add a dashboard tile for it automatically; if not, add one manually from the app's
settings. The first account you register becomes the admin account.
Then open Administration → Overview → System Health and click Run full test. Everything marked Required or Recommended should be green; anything that isn't means part of Thingport won't work until it's fixed. See System Health.
Notes
- Do not rename the
backendservice/container. The frontend's nginx config resolves it by that exact name over the compose network; renaming it breaks/api/*requests. - If the backend can't write to
/DATA/AppData/thingport/storage, check that folder's owning uid/gid and setPUID/PGIDin your.envto match. - Provider setup (MakerWorld / Thingiverse / MyMiniFactory credentials) works the same as any other install
-- see
docs/PROVIDER_SETUP.mdin the main repo. - To pin a specific build instead of
:latest, see the tagging note indocker-compose.deploy.ymland setBACKEND_IMAGE/FRONTEND_IMAGEaccordingly (add those two env vars to the stack and swap theimage:lines to${BACKEND_IMAGE:-...}/${FRONTEND_IMAGE:-...}if you want that flexibility).