Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

InfinityGrid Sticker Designer

InfinityGrid Sticker Designer is a self-hosted web app for creating Gridfinity-style label stickers with icon + text layouts and exporting them for printing/CAD workflows.

Features

  • Interactive editor with slot-based icon/text editing.
  • Export formats:
    • 3MF (multi-part, slicer-friendly color/material assignment)
    • STEP (multi-body CAD)
    • SVG (2D profile/mask)
  • Batch export for all saved tags in 3MF, STEP, or SVG.
  • JSON import/export for backup and sharing.
  • Local icon library from Icons_SVG/.
  • Browser-side local storage for saved tags.

Project Status

  • Actively maintained.
  • Suitable for personal/self-hosted use.
  • Contributions are welcome.

Stack

  • Frontend: index.html, assets/js/app.js, assets/css/app.css
  • Backend: FastAPI + Build123d (server.py)
  • Packaging: Docker (Dockerfile, docker-compose.yml)

Requirements

  • Python 3.12+
  • pip
  • Optional: Docker / Docker Compose

Local Development

  1. Create and activate a virtual environment.
  2. Install dependencies:
    • pip install -r requirements.txt
  3. Run:
    • python server.py
  4. Open:
    • http://localhost:3000

Validation

Install development dependencies with python -m pip install -r requirements-dev.txt. Run the regression checks (Node.js 22+ and the Python dependencies are required):

node --check assets/js/app.js
node --test tests/frontend-*.test.cjs
python -m unittest discover -s tests -v

The Python suite includes native STEP and 3MF round trips. The frontend suite covers label layouts, import/storage failures, caching, fonts, and editor state. Browser checks remain necessary for layout, keyboard navigation, and download behavior. GitHub Actions runs these automated checks on pushes and pull requests.

See the validation report for findings, local evidence, and remaining work. Tags are saved on the current device; use Export JSON for portable backups. Search and pagination keep large collections manageable. Clear All asks for confirmation and removes the entire saved collection, including hidden pages and search results. Export JSON before clearing if you need a backup.

Docker

Build and run locally:

  1. docker build -t infinitygrid-sticker:local .
  2. docker run --rm -p 3000:3000 infinitygrid-sticker:local
  3. Open http://localhost:3000

Cloudflared sidecar deployment is available via docker-compose.yml and .env.example. Note: docker-compose.yml currently references ghcr.io/10htts/infinitygrid-sticker:latest by default. Forks should update the image reference to their own registry/image. Runtime note: export workers use temporary files. In hardened deployments (read_only: true), keep a writable /tmp mount (tmpfs is recommended).

The Compose defaults reserve 768 MB of memory and a 64 MB /tmp mount. CAD runs in a separate process for each export, with one active worker and up to eight active/waiting requests. Default limits are 75 seconds for native work and 85 seconds for the queue plus native work. A client disconnect terminates its work. Uploads are bounded before multipart parsing, including chunked requests.

Export admission defaults to 12 requests/minute per direct peer with a burst of eight. Forwarded IP headers are not trusted: clients behind the same reverse proxy share that peer's budget. The browser retries short 429/503 responses. See .env.example for overrides; set INFINITYGRID_EXPORT_RATE_PER_MINUTE=0 to disable application rate limiting when an external proxy provides it.

Run the isolated local container checks with:

python scripts/qualify_docker.py

This builds a dedicated image, tests both native formats/styles and chunked uploads, checks resource usage and rate limits, and removes only containers carrying its validation ownership label. Publishing to GHCR requires the GitHub Actions validation job to pass first.

API

  • GET /api/icons
  • POST /api/export_step
  • POST /api/export_3mf

Repository Layout

  • server.py: API, export queue, and 3MF packaging.
  • cad_worker.py: isolated native geometry generation.
  • request_limits.py: request-body and export admission limits.
  • index.html: UI shell.
  • assets/js/app.js: frontend state/render/export flows.
  • assets/css/app.css: styling.
  • Icons_SVG/: icon source assets.
  • bases/: base STL assets used by export routines.
  • docs/: project notes and technical handoff docs.

Documentation

  • Contributing: CONTRIBUTING.md
  • Security policy: SECURITY.md
  • Code of conduct: CODE_OF_CONDUCT.md
  • Changelog: CHANGELOG.md
  • Support: SUPPORT.md
  • Third-party notices: THIRD_PARTY_NOTICES.md

License

This project is licensed under the MIT License. See LICENSE.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages