No description
  • Python 69.6%
  • TypeScript 29.2%
  • CSS 0.6%
  • Dockerfile 0.2%
  • Shell 0.2%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-21 07:48:39 +02:00
backend P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
docs P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
examples P2-T14: lithophane presets 25–27 (procedural seeded photos), examples and preset menu for both modes; readback insets boundary samples past float32 displacement (D62); thread-independent sparse resampling for tier R (D63); ROADMAP 25–27 implemented 2026-10-21 05:38:16 +02:00
frontend P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
scripts P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
spec P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
.dockerignore T18: Docker multi-stage image, compose, base path /phos/, static UI from the backend, make docker-smoke (API smoke + §10b in the container) 2026-10-20 22:32:52 +02:00
.env.example T18: Docker multi-stage image, compose, base path /phos/, static UI from the backend, make docker-smoke (API smoke + §10b in the container) 2026-10-20 22:32:52 +02:00
.gitignore P2-T12: lithophane browser↔backend vectors (6 images × 3 edit stacks × 2 models) checked in Node and in the Chromium worker; TC-I (a) measured 2.64e-7, 1e-5 kept; port fixes (half-even rounding, reflect/wrap stage-4 blur); live histogram and decode report; D61 2026-10-21 04:41:06 +02:00
.pre-commit-config.yaml T1: scaffold — root CLAUDE/STATUS, GPL-3.0 LICENSE, SPDX headers, licence report, uv+pnpm tooling, Makefile, lint/test skeleton 2026-10-20 18:38:37 +02:00
CLAUDE.md Phase 1 final report (SPEC §13) in STATUS.md; Gate 1b passed on a clean clone 2026-10-20 23:14:40 +02:00
docker-compose.smoke.yml T18: Docker multi-stage image, compose, base path /phos/, static UI from the backend, make docker-smoke (API smoke + §10b in the container) 2026-10-20 22:32:52 +02:00
docker-compose.yml T18: Docker multi-stage image, compose, base path /phos/, static UI from the backend, make docker-smoke (API smoke + §10b in the container) 2026-10-20 22:32:52 +02:00
Dockerfile T18: Docker multi-stage image, compose, base path /phos/, static UI from the backend, make docker-smoke (API smoke + §10b in the container) 2026-10-20 22:32:52 +02:00
instructions.md New instructions: No refraction, but Lithophanes 2026-10-20 13:33:58 +02:00
LICENSE T1: scaffold — root CLAUDE/STATUS, GPL-3.0 LICENSE, SPDX headers, licence report, uv+pnpm tooling, Makefile, lint/test skeleton 2026-10-20 18:38:37 +02:00
Makefile T20: docs (user guide, physical validation, adding presets, benchmarks; 1b updates), doc link test, scripts/bench.py; editor keyboard undo routing and tool-switch race fixed; setup installs the Playwright browser 2026-10-20 22:52:39 +02:00
README.md P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00
STATUS.md P2-T15/T16: lithophane browser acceptance (§10b) with independent STL re-verification; Docker/API smoke for lithophanes; A-L8 cell-centre check (D65); worker memory fixes (D64); cover/contain fit corrected; E8/E9 ported to numerics; S7 closed at 2 M triangles; Phase 2 docs and benchmarks 2026-10-21 07:48:39 +02:00

PHŌS

Self-hosted web application for designing opaque shadow stencils and lithophanes (later reflectors and mathematical lighting objects) and verifying them by forward simulation of the exported, reloaded file. Licence: GPL-3.0-or-later (LICENSE).

Status: Phase 1 (inverse single-view shadow design) approved; Phase 2 (Lithophane Studio: photo → edits → planar or cylindrical lithophane, verified STL/3MF) implemented and awaiting review — see STATUS.md. Specification: spec/SPEC.md, spec/PHASE-1.md, spec/PHASE-2.md.

Run it (Docker)

GIT_COMMIT=$(git rev-parse HEAD) docker compose up -d --build

Then open http://localhost:8000/phos/ — exactly this address: requests from any other origin (e.g. 127.0.0.1) are rejected by the CSRF protection and the app shows a banner. To serve it under another address set PHOS_PUBLIC_URL in .env. Then follow the user guide. Settings: .env.example, deployment.

Develop

make setup         # uv sync (backend/) + pnpm install (frontend/) + Playwright browser
make lint          # ruff, mypy, eslint, tsc, dependency-licence check
make test          # backend pytest + frontend vitest
make numerics      # reference-numerics suite; prints measured vs threshold
make e2e           # Playwright against a fresh backend + Vite dev server (incl. both §10b acceptance tests)
make docker-smoke  # build + start the image, API smoke and browser acceptance against the container

Requires uv (Python 3.12 is fetched by uv), pnpm and, for docker-smoke, Docker with compose. Development servers: cd backend && uv run uvicorn --factory phos.api.app:create_app --no-proxy-headers --port 8000 and cd frontend && pnpm dev (proxies /api). Conventions: right-handed, Z up, millimetres everywhere.

Documentation

User guide · architecture · coordinate systems · optics · shadow simulation · inverse shadow design · lithophanes · image pipeline · manufacturing · tolerances · provenance · HTTP API · deployment · benchmarks · physical validation · adding presets · dependency licences