framemill 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. framemill-0.1.1/.github/workflows/build.yml +38 -0
  2. framemill-0.1.1/.github/workflows/release.yml +77 -0
  3. framemill-0.1.1/.gitignore +54 -0
  4. framemill-0.1.1/CONTRIBUTING.md +37 -0
  5. framemill-0.1.1/LICENSE +674 -0
  6. framemill-0.1.1/PKG-INFO +816 -0
  7. framemill-0.1.1/README.md +116 -0
  8. framemill-0.1.1/docs/README.md +33 -0
  9. framemill-0.1.1/docs/architecture.md +65 -0
  10. framemill-0.1.1/docs/cli.md +69 -0
  11. framemill-0.1.1/docs/images/.gitkeep +0 -0
  12. framemill-0.1.1/docs/images/preview.png +0 -0
  13. framemill-0.1.1/docs/images/screenshot.png +0 -0
  14. framemill-0.1.1/docs/installation.md +151 -0
  15. framemill-0.1.1/docs/orientation.md +51 -0
  16. framemill-0.1.1/docs/recipes-and-metadata.md +54 -0
  17. framemill-0.1.1/docs/settings-reference.md +105 -0
  18. framemill-0.1.1/docs/troubleshooting.md +61 -0
  19. framemill-0.1.1/docs/workflow.md +67 -0
  20. framemill-0.1.1/framemill/__init__.py +3 -0
  21. framemill-0.1.1/framemill/app.py +1441 -0
  22. framemill-0.1.1/framemill/appconfig.py +45 -0
  23. framemill-0.1.1/framemill/assets/checker.png +0 -0
  24. framemill-0.1.1/framemill/assets/icon.svg +7 -0
  25. framemill-0.1.1/framemill/blender/__init__.py +4 -0
  26. framemill-0.1.1/framemill/blender/locate.py +53 -0
  27. framemill-0.1.1/framemill/blender/render_sprites.py +385 -0
  28. framemill-0.1.1/framemill/blender/runner.py +118 -0
  29. framemill-0.1.1/framemill/cli.py +143 -0
  30. framemill-0.1.1/framemill/compositor.py +130 -0
  31. framemill-0.1.1/framemill/export.py +352 -0
  32. framemill-0.1.1/framemill/guide.py +186 -0
  33. framemill-0.1.1/framemill/help_content.py +1320 -0
  34. framemill-0.1.1/framemill/preview_schedule.py +32 -0
  35. framemill-0.1.1/framemill/recipe.py +250 -0
  36. framemill-0.1.1/framemill/settings.py +428 -0
  37. framemill-0.1.1/main.py +9 -0
  38. framemill-0.1.1/packaging/build_appimage.sh +60 -0
  39. framemill-0.1.1/pyproject.toml +50 -0
  40. framemill-0.1.1/tests/test_compositor.py +93 -0
  41. framemill-0.1.1/tests/test_direction_layout.py +28 -0
  42. framemill-0.1.1/tests/test_export.py +135 -0
  43. framemill-0.1.1/tests/test_help_content.py +45 -0
  44. framemill-0.1.1/tests/test_integration_regressions.py +73 -0
  45. framemill-0.1.1/tests/test_packaging.py +46 -0
  46. framemill-0.1.1/tests/test_preview_schedule.py +36 -0
  47. framemill-0.1.1/tests/test_preview_settings.py +33 -0
  48. framemill-0.1.1/tests/test_recipe.py +130 -0
  49. framemill-0.1.1/tests/test_render_sampling.py +166 -0
  50. framemill-0.1.1/tests/test_sampling.py +92 -0
  51. framemill-0.1.1/tests/test_validation.py +102 -0
@@ -0,0 +1,38 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: "3.12"
17
+ - run: pip install -e ".[dev]"
18
+ - run: ruff check .
19
+ - run: pytest -q
20
+
21
+ # Build the from-source distribution artifacts (wheel + sdist) on every push so
22
+ # regressions in packaging metadata surface early. These are the primary release
23
+ # artifacts; platform binaries are built best-effort in release.yml on a tag.
24
+ dist:
25
+ needs: test
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: "3.12"
32
+ - run: pip install build
33
+ - run: python -m build
34
+ - run: python -m pip install dist/*.whl && framemill --help
35
+ - uses: actions/upload-artifact@v4
36
+ with:
37
+ name: framemill-dist
38
+ path: dist/*
@@ -0,0 +1,77 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ # Build the wheel + sdist once and hand them to the later jobs.
13
+ build:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.12"
20
+ - run: pip install build
21
+ - run: python -m build
22
+ - run: python -m pip install dist/*.whl && framemill --help
23
+ - uses: actions/upload-artifact@v4
24
+ with:
25
+ name: dist
26
+ path: dist/*
27
+
28
+ # Attach the wheel + sdist to the GitHub release with generated notes.
29
+ github-release:
30
+ needs: build
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/download-artifact@v4
34
+ with:
35
+ name: dist
36
+ path: dist
37
+ - uses: softprops/action-gh-release@v2
38
+ with:
39
+ files: dist/*
40
+ generate_release_notes: true
41
+ fail_on_unmatched_files: true
42
+
43
+ # Publish to PyPI via Trusted Publishing (OIDC). No stored token.
44
+ # Requires a PyPI "pending publisher" pointing at this repo, this workflow
45
+ # file (release.yml), and the "pypi" environment before the first tag.
46
+ pypi:
47
+ needs: build
48
+ runs-on: ubuntu-latest
49
+ environment: pypi
50
+ permissions:
51
+ id-token: write
52
+ steps:
53
+ - uses: actions/download-artifact@v4
54
+ with:
55
+ name: dist
56
+ path: dist
57
+ - uses: pypa/gh-action-pypi-publish@release/v1
58
+
59
+ # Self-contained Linux AppImage: bundles a manylinux Python plus framemill.
60
+ # Best-effort: a failure here does not block the wheel/sdist/PyPI release.
61
+ appimage:
62
+ needs: github-release
63
+ runs-on: ubuntu-latest
64
+ continue-on-error: true
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+ - uses: actions/setup-python@v5
68
+ with:
69
+ python-version: "3.12"
70
+ - name: Build AppImage
71
+ id: build
72
+ run: bash packaging/build_appimage.sh
73
+ - name: Attach AppImage to the release
74
+ if: steps.build.outcome == 'success'
75
+ uses: softprops/action-gh-release@v2
76
+ with:
77
+ files: dist/*.AppImage
@@ -0,0 +1,54 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+ env/
11
+
12
+ # Flet / Flutter build output
13
+ build/
14
+ *.app/
15
+ *.AppImage
16
+ *.dmg
17
+ *.msi
18
+
19
+ # Test / coverage
20
+ .pytest_cache/
21
+ .coverage
22
+ htmlcov/
23
+
24
+ # OS / editor
25
+ .DS_Store
26
+ Thumbs.db
27
+ .idea/
28
+ .vscode/
29
+
30
+ # Local runtime data (never commit user paths / config)
31
+ *.log
32
+ /tmp_render/
33
+ scratch/
34
+ sample_models/
35
+
36
+ # Source models (inputs only, never repo content) and rendered/demo output.
37
+ # Guards against committing game assets or generated sprite sheets.
38
+ *.fbx
39
+ *.glb
40
+ *.gltf
41
+ *.obj
42
+ *.tga
43
+ *.bmp
44
+ /*.png
45
+ /renders/
46
+ /out/
47
+
48
+ # Private local orchestration and environment data
49
+ .archon/
50
+ .env
51
+ .env.*
52
+ !.env.example
53
+ .ruff_cache/
54
+ *.recipe.json
@@ -0,0 +1,37 @@
1
+ # Contributing
2
+
3
+ Thanks for your interest in framemill!
4
+
5
+ ## Dev setup (project-local virtualenv)
6
+
7
+ framemill's Python dependencies live in a **per-project virtualenv**. They are
8
+ not installed system-wide. Nothing here needs to be registered with your OS
9
+ package manager; `pyproject.toml` is the source of truth for dependencies.
10
+
11
+ ```bash
12
+ python3 -m venv .venv
13
+ . .venv/bin/activate # Windows: .venv\Scripts\activate
14
+ pip install -e ".[dev]" # framemill + Flet, Pillow, NumPy, pytest, ruff
15
+
16
+ framemill # launch the GUI
17
+ pytest -q # unit tests (no Blender needed)
18
+ ruff check .
19
+ ```
20
+
21
+ Blender is **not** a pip dependency. Install it separately from
22
+ [blender.org](https://www.blender.org/download/). framemill auto-detects it.
23
+
24
+ ## Testing changes that touch rendering
25
+
26
+ Compositing, export, direction layout, preview settings, sampling, recipes,
27
+ validation and framing helpers have Blender-free tests. Sampling tests use
28
+ doubles; they do not validate Blender's actual mesh deformation, materials or
29
+ camera output. Changes to `framemill/blender/render_sprites.py` need a manual
30
+ check against a real model. Please note in your PR which Blender version and
31
+ model you tested with.
32
+
33
+ ## Scope
34
+
35
+ framemill aims to stay a focused "model -> directional sprite sheet" tool.
36
+ Engine-specific export quirks are welcome as optional formats; please keep
37
+ defaults neutral so the tool works for any model out of the box.