manyfold

festion's avatarfrom festion

Self-hosted 3D model library manager for organizing, viewing, and managing 3D print files. Use when the user asks about deploying, configuring, or using Manyfold for managing STL/OBJ/3MF collections. Triggers on phrases like "Manyfold", "3D model library", "manage my 3D prints", "self-hosted model manager", "organize STL files", "3D print collection", or any Docker/homelab deployment involving 3D model organization.

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 16, 2025⬇️1downloads

When & Why to Use This Skill

Manyfold is a powerful, self-hosted 3D model library manager designed to streamline the organization, visualization, and management of 3D print files. It serves as a centralized digital asset management (DAM) system for makers and designers, supporting various formats like STL, OBJ, and 3MF with interactive 3D previews. By offering robust Docker deployment options and integration with external platforms like Thingiverse, Manyfold simplifies the workflow from file storage to print preparation in homelab or professional environments.

Use Cases

  • Case 1: Deploying a self-hosted 3D model repository using Docker Compose for private homelab use.
  • Case 2: Organizing large, unsorted collections of STL and 3MF files into searchable libraries with custom tags and metadata.
  • Case 3: Synchronizing 3D model metadata and preview images directly from external sites like Thingiverse, MyMiniFactory, and Cults3D.
  • Case 4: Setting up a multi-user 3D asset management platform with OIDC Single Sign-On for collaborative maker spaces or design studios.
  • Case 5: Managing 3D print file storage across local directories and S3-compatible cloud storage while maintaining interactive web-based previews.
namemanyfold
descriptionSelf-hosted 3D model library manager for organizing, viewing, and managing 3D print files. Use when the user asks about deploying, configuring, or using Manyfold for managing STL/OBJ/3MF collections. Triggers on phrases like "Manyfold", "3D model library", "manage my 3D prints", "self-hosted model manager", "organize STL files", "3D print collection", or any Docker/homelab deployment involving 3D model organization.

Manyfold Skill

Manyfold is a self-hosted web application for managing 3D print file collections with interactive previews, metadata organization, and Fediverse federation support.

Quick Reference

Docker Image: ghcr.io/manyfold3d/manyfold:latest Default Port: 3214 Web UI: http://{server}:3214

Deployment Options

Minimal (Solo with SQLite)

services:
  manyfold:
    image: ghcr.io/manyfold3d/manyfold-solo:latest
    ports:
      - "3214:3214"
    volumes:
      - /path/to/config:/config
      - /path/to/models:/libraries
    environment:
      SECRET_KEY_BASE: <generate-128-char-hex>
      PUID: 1000
      PGID: 1000
    restart: unless-stopped

Production (PostgreSQL + Redis)

services:
  manyfold:
    image: ghcr.io/manyfold3d/manyfold:latest
    ports:
      - "3214:3214"
    volumes:
      - /path/to/models:/libraries
    environment:
      DATABASE_URL: postgresql://manyfold:password@db/manyfold?pool=5
      REDIS_URL: redis://redis:6379/1
      SECRET_KEY_BASE: <generate-128-char-hex>
      PUID: 1000
      PGID: 1000
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - SETUID
      - SETGID
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: manyfold
      POSTGRES_PASSWORD: password
      POSTGRES_DB: manyfold

  redis:
    image: redis:7

volumes:
  db_data:

Required Environment Variables

Variable Description
SECRET_KEY_BASE 128-char hex string for cookie signing. Generate with openssl rand -hex 64
PUID / PGID User/group ID for file permissions. Get with id command
REDIS_URL Redis connection (not needed for solo image). Format: redis://host:6379/1

Database Configuration

Option 1: DATABASE_URL (recommended)

  • PostgreSQL: postgresql://user:pass@host/dbname?pool=5
  • MySQL: mysql2://user:pass@host/dbname?pool=5
  • SQLite: sqlite3:/config/manyfold.sqlite3?pool=5

Option 2: Individual variables

  • DATABASE_ADAPTER: postgresql, mysql2, or sqlite3
  • DATABASE_HOST, DATABASE_PORT, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME

Key Optional Features

Variable Description
MULTIUSER=enabled Enable login, roles, permissions
FEDERATION=enabled ActivityPub/Fediverse support
HTTPS_ONLY=enabled Force HTTPS, set HSTS headers
DEMO_MODE=enabled Disable all destructive operations

OIDC Single Sign-On

OIDC_CLIENT_ID=<client-id>
OIDC_CLIENT_SECRET=<secret>
OIDC_ISSUER=https://auth.example.com/
OIDC_NAME=Authentik
FORCE_OIDC=enabled  # Optional: disable local login

Email (SMTP)

SMTP_SERVER=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME=user
SMTP_PASSWORD=pass
SMTP_FROM_ADDRESS=manyfold@example.com
PUBLIC_HOSTNAME=manyfold.example.com

Performance Tuning

Variable Default Description
WEB_CONCURRENCY 4 Web worker processes
RAILS_MAX_THREADS 16 Threads per worker
DEFAULT_WORKER_CONCURRENCY 4 Background job threads
PERFORMANCE_WORKER_CONCURRENCY 1 Heavy job threads (analysis, conversion)

Security Settings

MAX_FILE_UPLOAD_SIZE=536870912    # 512MB in bytes
MAX_FILE_EXTRACT_SIZE=1073741824  # 1GB in bytes
MIN_PASSWORD_SCORE=4              # 0-4, higher = stricter

Core Concepts

  • Library: Storage location (local folder or S3 bucket) containing models
  • Model: A folder containing related 3D files (parts, images, docs)
  • Creator: Content author/designer
  • Collection: Grouping of related models
  • Tags: Organizational keywords

User Workflows

Initial Setup

  1. Access web UI at http://server:3214
  2. Create admin account (email, username, password)
  3. Add first library (path inside container, e.g., /libraries)
  4. Scan runs automatically to index existing files

Scanning

  • Scan for new files: Detect new folders/files added outside Manyfold
  • Rescan all models: Re-check existing models for problems/metadata

Uploading

  • Upload ZIP archives (extracted as separate models)
  • Upload individual STL/OBJ files (creates single model)
  • Progress shown during upload, extraction happens in background

External Integrations (v0.118+)

Import metadata from Thingiverse, MyMiniFactory, Cults3D:

  1. Configure API keys in Settings > Integrations
  2. Add link to model page
  3. Click sync icon to import metadata/images
  4. Or paste URL in search bar for direct import

Supported File Formats

See references/supported_formats.md for complete list.

3D Models with Preview: STL, OBJ, 3MF, GLTF/GLB, FBX, PLY, 3DS Slicer Files: GCode (preview), Chitubox, Lychee Images: PNG, JPG, GIF, WebP, SVG, TIFF, BMP Documents: PDF, Markdown, TXT Archives: ZIP, RAR, 7z, gzip, bzip2

Troubleshooting

Container won't start

  • Ensure SECRET_KEY_BASE is set
  • Check PUID/PGID have read/write access to mounted volumes
  • Verify Redis is accessible (for full image)

Files not appearing

  • Check library path matches container mount (not host path)
  • Run manual scan from web UI
  • Verify file extensions are supported

Permission errors

  • Match PUID/PGID to owner of library folders
  • Ensure container has write access for temp files

Health check

wget --no-verbose --tries=1 --spider http://localhost:3214/health

Reverse Proxy

Set RAILS_RELATIVE_URL_ROOT=/manyfold for non-root paths.

Required headers for HTTPS proxy:

  • X-Forwarded-Proto: https
  • X-Forwarded-For
  • Host

Note: Federation requires domain root (no subpath).

Additional References

  • Configuration details: references/configuration.md
  • All supported formats: references/supported_formats.md