vixl-engine 0.15.0__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 (174) hide show
  1. vixl_engine-0.15.0/.claude-plugin/marketplace.json +5 -0
  2. vixl_engine-0.15.0/.claude-plugin/plugin.json +11 -0
  3. vixl_engine-0.15.0/.github/workflows/agent-eval.yml +51 -0
  4. vixl_engine-0.15.0/.github/workflows/pypi.yml +46 -0
  5. vixl_engine-0.15.0/.github/workflows/release.yml +92 -0
  6. vixl_engine-0.15.0/.github/workflows/test.yml +27 -0
  7. vixl_engine-0.15.0/.gitignore +17 -0
  8. vixl_engine-0.15.0/.mcp.json +19 -0
  9. vixl_engine-0.15.0/CHANGELOG.md +219 -0
  10. vixl_engine-0.15.0/PKG-INFO +395 -0
  11. vixl_engine-0.15.0/README.md +361 -0
  12. vixl_engine-0.15.0/distribution/build_windows.ps1 +19 -0
  13. vixl_engine-0.15.0/distribution/engine.py +41 -0
  14. vixl_engine-0.15.0/distribution/launcher.py +119 -0
  15. vixl_engine-0.15.0/distribution/package_extensions.py +75 -0
  16. vixl_engine-0.15.0/distribution/package_release.py +43 -0
  17. vixl_engine-0.15.0/distribution/test_native_design.py +125 -0
  18. vixl_engine-0.15.0/distribution/test_native_mcp.py +81 -0
  19. vixl_engine-0.15.0/distribution/test_native_update.py +98 -0
  20. vixl_engine-0.15.0/distribution/test_windows_install.ps1 +87 -0
  21. vixl_engine-0.15.0/distribution/windows/vixl.iss +215 -0
  22. vixl_engine-0.15.0/docs/agent-resources.md +131 -0
  23. vixl_engine-0.15.0/docs/architecture.md +76 -0
  24. vixl_engine-0.15.0/docs/artistic-filters.md +67 -0
  25. vixl_engine-0.15.0/docs/brands.md +62 -0
  26. vixl_engine-0.15.0/docs/brushes-and-animation.md +113 -0
  27. vixl_engine-0.15.0/docs/color-and-print.md +83 -0
  28. vixl_engine-0.15.0/docs/commands.md +249 -0
  29. vixl_engine-0.15.0/docs/coverage.md +46 -0
  30. vixl_engine-0.15.0/docs/design-tools.md +168 -0
  31. vixl_engine-0.15.0/docs/example-poster.png +0 -0
  32. vixl_engine-0.15.0/docs/filter-gallery.png +0 -0
  33. vixl_engine-0.15.0/docs/interfaces.md +263 -0
  34. vixl_engine-0.15.0/docs/operations.md +83 -0
  35. vixl_engine-0.15.0/docs/pixel-animation-spacing.md +83 -0
  36. vixl_engine-0.15.0/docs/product-spec.md +2717 -0
  37. vixl_engine-0.15.0/docs/production.md +312 -0
  38. vixl_engine-0.15.0/docs/providers.md +169 -0
  39. vixl_engine-0.15.0/docs/releases.md +164 -0
  40. vixl_engine-0.15.0/docs/sizes-and-layouts.md +109 -0
  41. vixl_engine-0.15.0/docs/typography.md +56 -0
  42. vixl_engine-0.15.0/evals/README.md +100 -0
  43. vixl_engine-0.15.0/evals/__init__.py +1 -0
  44. vixl_engine-0.15.0/evals/baseline.json +21 -0
  45. vixl_engine-0.15.0/evals/harness.py +391 -0
  46. vixl_engine-0.15.0/evals/run.py +59 -0
  47. vixl_engine-0.15.0/evals/tasks/copy-between-documents.json +18 -0
  48. vixl_engine-0.15.0/evals/tasks/equal-spacing.json +20 -0
  49. vixl_engine-0.15.0/evals/tasks/fix-layout.json +26 -0
  50. vixl_engine-0.15.0/evals/tasks/font-pairing.json +64 -0
  51. vixl_engine-0.15.0/evals/tasks/layout-filled.json +56 -0
  52. vixl_engine-0.15.0/evals/tasks/photo-caption.json +25 -0
  53. vixl_engine-0.15.0/evals/tasks/print-cmyk.json +53 -0
  54. vixl_engine-0.15.0/evals/tasks/restore-deleted.json +20 -0
  55. vixl_engine-0.15.0/evals/tasks/roll-applied.json +70 -0
  56. vixl_engine-0.15.0/evals/tasks/story-list.json +23 -0
  57. vixl_engine-0.15.0/evals/tasks/svg-logo-import.json +67 -0
  58. vixl_engine-0.15.0/evals/tasks/template-creation.json +54 -0
  59. vixl_engine-0.15.0/evals/tasks/timeline-motion.json +88 -0
  60. vixl_engine-0.15.0/evals/tasks/variable-variants.json +20 -0
  61. vixl_engine-0.15.0/evals/tasks/workflow-checked-edit.json +100 -0
  62. vixl_engine-0.15.0/evals/tasks/youtube-thumbnail.json +25 -0
  63. vixl_engine-0.15.0/examples/after-hours.vixl +0 -0
  64. vixl_engine-0.15.0/examples/build_poster.py +129 -0
  65. vixl_engine-0.15.0/examples/build_production_demo.py +172 -0
  66. vixl_engine-0.15.0/examples/build_sprite.py +63 -0
  67. vixl_engine-0.15.0/examples/operations.json +9 -0
  68. vixl_engine-0.15.0/examples/portrait-cleanup.vixlscript +5 -0
  69. vixl_engine-0.15.0/pyproject.toml +36 -0
  70. vixl_engine-0.15.0/scripts/verify_fonts.py +94 -0
  71. vixl_engine-0.15.0/skills/vixl/SKILL.md +265 -0
  72. vixl_engine-0.15.0/skills/vixl/references/ai.md +90 -0
  73. vixl_engine-0.15.0/skills/vixl/references/artistic-filters.md +67 -0
  74. vixl_engine-0.15.0/skills/vixl/references/brushes-timeline.md +54 -0
  75. vixl_engine-0.15.0/skills/vixl/references/cli.md +314 -0
  76. vixl_engine-0.15.0/skills/vixl/references/design-system.md +61 -0
  77. vixl_engine-0.15.0/skills/vixl/references/mcp-rest-python.md +210 -0
  78. vixl_engine-0.15.0/skills/vixl/references/operations.md +202 -0
  79. vixl_engine-0.15.0/skills/vixl/references/production.md +33 -0
  80. vixl_engine-0.15.0/skills/vixl/references/recipes.md +228 -0
  81. vixl_engine-0.15.0/skills/vixl/references/resources.md +131 -0
  82. vixl_engine-0.15.0/skills/vixl/references/typography.md +58 -0
  83. vixl_engine-0.15.0/src/vixl/__init__.py +16 -0
  84. vixl_engine-0.15.0/src/vixl/__main__.py +3 -0
  85. vixl_engine-0.15.0/src/vixl/ai.py +1155 -0
  86. vixl_engine-0.15.0/src/vixl/animation.py +321 -0
  87. vixl_engine-0.15.0/src/vixl/artistic.py +190 -0
  88. vixl_engine-0.15.0/src/vixl/assets.py +74 -0
  89. vixl_engine-0.15.0/src/vixl/assurance.py +241 -0
  90. vixl_engine-0.15.0/src/vixl/automation.py +434 -0
  91. vixl_engine-0.15.0/src/vixl/brand.py +225 -0
  92. vixl_engine-0.15.0/src/vixl/brushes.py +510 -0
  93. vixl_engine-0.15.0/src/vixl/changes.py +167 -0
  94. vixl_engine-0.15.0/src/vixl/checks.py +498 -0
  95. vixl_engine-0.15.0/src/vixl/cli.py +890 -0
  96. vixl_engine-0.15.0/src/vixl/colors.py +1083 -0
  97. vixl_engine-0.15.0/src/vixl/commands.py +371 -0
  98. vixl_engine-0.15.0/src/vixl/constants.py +51 -0
  99. vixl_engine-0.15.0/src/vixl/data/DejaVuSans.ttf +0 -0
  100. vixl_engine-0.15.0/src/vixl/data/FONT-LICENSE.txt +78 -0
  101. vixl_engine-0.15.0/src/vixl/data/font-pairings.json +1499 -0
  102. vixl_engine-0.15.0/src/vixl/data/font-principles.md +98 -0
  103. vixl_engine-0.15.0/src/vixl/data/fonts.json +3657 -0
  104. vixl_engine-0.15.0/src/vixl/data/view.html +197 -0
  105. vixl_engine-0.15.0/src/vixl/data/xkcd-colors.json +944 -0
  106. vixl_engine-0.15.0/src/vixl/design.py +662 -0
  107. vixl_engine-0.15.0/src/vixl/design_cli.py +115 -0
  108. vixl_engine-0.15.0/src/vixl/design_render.py +426 -0
  109. vixl_engine-0.15.0/src/vixl/design_schema.py +133 -0
  110. vixl_engine-0.15.0/src/vixl/errors.py +13 -0
  111. vixl_engine-0.15.0/src/vixl/exports.py +184 -0
  112. vixl_engine-0.15.0/src/vixl/feature_cli.py +344 -0
  113. vixl_engine-0.15.0/src/vixl/fileio.py +50 -0
  114. vixl_engine-0.15.0/src/vixl/film.py +317 -0
  115. vixl_engine-0.15.0/src/vixl/fonts.py +56 -0
  116. vixl_engine-0.15.0/src/vixl/geometry.py +107 -0
  117. vixl_engine-0.15.0/src/vixl/history.py +104 -0
  118. vixl_engine-0.15.0/src/vixl/imports.py +319 -0
  119. vixl_engine-0.15.0/src/vixl/interfaces.py +737 -0
  120. vixl_engine-0.15.0/src/vixl/jobs.py +452 -0
  121. vixl_engine-0.15.0/src/vixl/layouts.py +1556 -0
  122. vixl_engine-0.15.0/src/vixl/mcp_tools.py +1319 -0
  123. vixl_engine-0.15.0/src/vixl/measure.py +155 -0
  124. vixl_engine-0.15.0/src/vixl/model.py +78 -0
  125. vixl_engine-0.15.0/src/vixl/models.py +314 -0
  126. vixl_engine-0.15.0/src/vixl/normalize.py +346 -0
  127. vixl_engine-0.15.0/src/vixl/operations.py +720 -0
  128. vixl_engine-0.15.0/src/vixl/pixel.py +138 -0
  129. vixl_engine-0.15.0/src/vixl/pixel_schema.py +97 -0
  130. vixl_engine-0.15.0/src/vixl/plugins.py +24 -0
  131. vixl_engine-0.15.0/src/vixl/production.py +465 -0
  132. vixl_engine-0.15.0/src/vixl/project.py +656 -0
  133. vixl_engine-0.15.0/src/vixl/proxy.py +160 -0
  134. vixl_engine-0.15.0/src/vixl/render.py +910 -0
  135. vixl_engine-0.15.0/src/vixl/render_cache.py +141 -0
  136. vixl_engine-0.15.0/src/vixl/resource_cli.py +170 -0
  137. vixl_engine-0.15.0/src/vixl/resources.py +375 -0
  138. vixl_engine-0.15.0/src/vixl/review.py +52 -0
  139. vixl_engine-0.15.0/src/vixl/schema.py +378 -0
  140. vixl_engine-0.15.0/src/vixl/sizes.py +425 -0
  141. vixl_engine-0.15.0/src/vixl/spacing.py +82 -0
  142. vixl_engine-0.15.0/src/vixl/svg.py +501 -0
  143. vixl_engine-0.15.0/src/vixl/svg_effects.py +266 -0
  144. vixl_engine-0.15.0/src/vixl/text.py +379 -0
  145. vixl_engine-0.15.0/src/vixl/timeline.py +917 -0
  146. vixl_engine-0.15.0/src/vixl/typefaces.py +407 -0
  147. vixl_engine-0.15.0/src/vixl/updater.py +506 -0
  148. vixl_engine-0.15.0/src/vixl/validation.py +273 -0
  149. vixl_engine-0.15.0/src/vixl/workflows.py +160 -0
  150. vixl_engine-0.15.0/tests/icc_helper.py +63 -0
  151. vixl_engine-0.15.0/tests/test_agent_adoption.py +398 -0
  152. vixl_engine-0.15.0/tests/test_agent_interface.py +315 -0
  153. vixl_engine-0.15.0/tests/test_agent_resources.py +457 -0
  154. vixl_engine-0.15.0/tests/test_artistic_svg_text.py +382 -0
  155. vixl_engine-0.15.0/tests/test_blanks_fonts_roll.py +257 -0
  156. vixl_engine-0.15.0/tests/test_brushes_timeline.py +288 -0
  157. vixl_engine-0.15.0/tests/test_character_animation.py +265 -0
  158. vixl_engine-0.15.0/tests/test_cli.py +128 -0
  159. vixl_engine-0.15.0/tests/test_color_print.py +225 -0
  160. vixl_engine-0.15.0/tests/test_design.py +502 -0
  161. vixl_engine-0.15.0/tests/test_engine.py +364 -0
  162. vixl_engine-0.15.0/tests/test_eval_harness.py +116 -0
  163. vixl_engine-0.15.0/tests/test_friction_fixes.py +142 -0
  164. vixl_engine-0.15.0/tests/test_group_checks.py +145 -0
  165. vixl_engine-0.15.0/tests/test_history_storage.py +197 -0
  166. vixl_engine-0.15.0/tests/test_interfaces_ai.py +234 -0
  167. vixl_engine-0.15.0/tests/test_logo_regressions.py +307 -0
  168. vixl_engine-0.15.0/tests/test_mcp_workspace.py +306 -0
  169. vixl_engine-0.15.0/tests/test_pixel_spacing.py +286 -0
  170. vixl_engine-0.15.0/tests/test_production_workflows.py +697 -0
  171. vixl_engine-0.15.0/tests/test_providers.py +155 -0
  172. vixl_engine-0.15.0/tests/test_providers_modern.py +203 -0
  173. vixl_engine-0.15.0/tests/test_sizes_layouts.py +193 -0
  174. vixl_engine-0.15.0/tests/test_updater.py +606 -0
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "vixl",
3
+ "owner": {"name": "Vixl contributors"},
4
+ "plugins": [{"name": "vixl", "source": "./", "description": "Editable graphics with Vixl MCP and its design skill"}]
5
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "vixl",
3
+ "description": "Editable graphics, brand kits and human review with the Vixl engine.",
4
+ "author": {
5
+ "name": "Vixl contributors"
6
+ },
7
+ "homepage": "https://github.com/jxburros/Vixl",
8
+ "skills": "./skills/",
9
+ "mcpServers": "./.mcp.json",
10
+ "version": "0.15.0"
11
+ }
@@ -0,0 +1,51 @@
1
+ name: Agent eval
2
+ on:
3
+ schedule:
4
+ - cron: '0 15 * * 1'
5
+ workflow_dispatch:
6
+ inputs:
7
+ model:
8
+ description: Claude model ID
9
+ default: claude-opus-5-5
10
+ effort:
11
+ description: Effort (low, medium, high, xhigh, max; empty = model default)
12
+ default: ''
13
+ permissions:
14
+ contents: read
15
+ jobs:
16
+ eval:
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ schema: [full, slim]
22
+ env:
23
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-python@v5
27
+ with:
28
+ python-version: '3.12'
29
+ - run: python -m pip install -e ".[dev]"
30
+ - name: Verify offline reference against stored baseline
31
+ run: python -m evals.run --schema '${{ matrix.schema }}' --tools core --baseline evals/baseline.json --out reference-results
32
+ - name: Run the agent eval (spends API credits)
33
+ if: env.ANTHROPIC_API_KEY != ''
34
+ env:
35
+ MODEL: ${{ inputs.model || 'claude-opus-5-5' }}
36
+ EFFORT: ${{ inputs.effort }}
37
+ SCHEMA: ${{ matrix.schema }}
38
+ run: |
39
+ args=(--agent claude --model "$MODEL" --schema "$SCHEMA" --tools core --baseline evals/baseline.json --out eval-results --keep)
40
+ if [ -n "$EFFORT" ]; then args+=(--effort "$EFFORT"); fi
41
+ python -m evals.run "${args[@]}" | tee -a "$GITHUB_STEP_SUMMARY"
42
+ - name: Explain unavailable live evaluation
43
+ if: env.ANTHROPIC_API_KEY == ''
44
+ run: echo 'Live agent eval skipped — configure ANTHROPIC_API_KEY. Offline baseline was checked.' >> "$GITHUB_STEP_SUMMARY"
45
+ - uses: actions/upload-artifact@v4
46
+ if: always()
47
+ with:
48
+ name: agent-eval-${{ matrix.schema }}
49
+ path: |
50
+ eval-results
51
+ reference-results
@@ -0,0 +1,46 @@
1
+ name: Publish Python and agent bundles
2
+ on:
3
+ push:
4
+ tags: ['v*']
5
+ workflow_dispatch:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: '3.12'
16
+ - run: python -m pip install -e '.[dev]' build twine
17
+ - run: pytest -q
18
+ - name: Verify release version
19
+ if: startsWith(github.ref, 'refs/tags/')
20
+ env:
21
+ RELEASE_TAG: ${{ github.ref_name }}
22
+ run: python -c "import os; from vixl import __version__; assert os.environ['RELEASE_TAG'] == 'v' + __version__"
23
+ - run: python -m build && python -m twine check dist/*.whl dist/*.tar.gz
24
+ - run: python distribution/package_extensions.py
25
+ - uses: actions/upload-artifact@v4
26
+ with:
27
+ name: pypi-and-agent-bundles
28
+ path: dist/*
29
+ publish:
30
+ if: startsWith(github.ref, 'refs/tags/')
31
+ needs: build
32
+ runs-on: ubuntu-latest
33
+ environment:
34
+ name: pypi
35
+ url: https://pypi.org/p/vixl-engine
36
+ permissions:
37
+ id-token: write
38
+ steps:
39
+ - uses: actions/download-artifact@v4
40
+ with:
41
+ name: pypi-and-agent-bundles
42
+ path: dist
43
+ - run: mkdir packages && cp dist/*.whl dist/*.tar.gz packages/
44
+ - uses: pypa/gh-action-pypi-publish@release/v1
45
+ with:
46
+ packages-dir: packages/
@@ -0,0 +1,92 @@
1
+ name: Windows installer and releases
2
+ on:
3
+ pull_request:
4
+ push:
5
+ tags: ['v*']
6
+ workflow_dispatch:
7
+ permissions:
8
+ contents: read
9
+ concurrency:
10
+ group: release-${{ github.ref }}
11
+ cancel-in-progress: false
12
+ jobs:
13
+ verify:
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: python -m pip install -e ".[dev]" build
21
+ - run: pytest -q
22
+ - name: Verify stable tag and package versions agree
23
+ if: startsWith(github.ref, 'refs/tags/')
24
+ env:
25
+ RELEASE_TAG: ${{ github.ref_name }}
26
+ run: |
27
+ python -c "import os; from vixl import __version__; assert os.environ['RELEASE_TAG'] == 'v' + __version__"
28
+ - run: python -m build
29
+ - run: python distribution/package_extensions.py
30
+ - uses: actions/upload-artifact@v4
31
+ with:
32
+ name: python-distributions
33
+ path: |
34
+ dist/*.whl
35
+ dist/*.tar.gz
36
+ dist/*.mcpb
37
+ dist/*-claude-code.zip
38
+ windows:
39
+ runs-on: windows-latest
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - uses: actions/setup-python@v5
43
+ with:
44
+ python-version: '3.12'
45
+ - run: python -m pip install -e ".[dev]" pyinstaller==6.16.0
46
+ - run: pytest -q
47
+ - name: Build bundled runtime, stable launcher, and installer
48
+ shell: pwsh
49
+ run: ./distribution/build_windows.ps1
50
+ - name: Verify installation, PATH, native updates, and uninstall
51
+ shell: pwsh
52
+ run: ./distribution/test_windows_install.ps1
53
+ - uses: actions/upload-artifact@v4
54
+ with:
55
+ name: windows-release
56
+ path: dist/release/*
57
+ if-no-files-found: error
58
+ publish:
59
+ if: startsWith(github.ref, 'refs/tags/')
60
+ needs: [verify, windows]
61
+ runs-on: ubuntu-latest
62
+ permissions:
63
+ contents: write
64
+ steps:
65
+ - uses: actions/checkout@v4
66
+ - uses: actions/download-artifact@v4
67
+ with:
68
+ pattern: '*distributions'
69
+ path: release
70
+ merge-multiple: true
71
+ - uses: actions/download-artifact@v4
72
+ with:
73
+ name: windows-release
74
+ path: release
75
+ - name: Publish an immutable, fully uploaded stable release
76
+ env:
77
+ GH_TOKEN: ${{ github.token }}
78
+ GH_REPO: ${{ github.repository }}
79
+ RELEASE_TAG: ${{ github.ref_name }}
80
+ run: |
81
+ python - <<'PYNOTES'
82
+ import os
83
+ from pathlib import Path
84
+ version = os.environ["RELEASE_TAG"].removeprefix("v")
85
+ changelog = Path("CHANGELOG.md").read_text(encoding="utf-8")
86
+ notes = changelog.split(f"## {version}\n", 1)[1].split("\n## ", 1)[0].strip()
87
+ notes += "\n\nSee [installation and release documentation](https://github.com/jxburros/Vixl/blob/" + os.environ["RELEASE_TAG"] + "/docs/releases.md).\n"
88
+ Path("release-notes.md").write_text(notes, encoding="utf-8")
89
+ PYNOTES
90
+ gh release create "$RELEASE_TAG" --verify-tag --draft --title "Vixl $RELEASE_TAG" --notes-file release-notes.md
91
+ gh release upload "$RELEASE_TAG" release/*
92
+ gh release edit "$RELEASE_TAG" --draft=false --latest
@@ -0,0 +1,27 @@
1
+ name: Test and package
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ test:
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, windows-latest, macos-latest]
15
+ python: ['3.11', '3.12', '3.13', '3.14']
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: ${{ matrix.python }}
21
+ - run: python -m pip install -e ".[dev]"
22
+ - run: pytest -q
23
+ - run: python -m pip wheel . --no-deps --wheel-dir dist
24
+ - uses: actions/upload-artifact@v4
25
+ with:
26
+ name: vixl-${{ matrix.os }}-${{ matrix.python }}
27
+ path: dist/*.whl
@@ -0,0 +1,17 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .venv/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ *.egg-info/
7
+ dist/
8
+ build/
9
+ .vixl-session.json
10
+ .vixl-jobs/
11
+ .vixl-cache/
12
+ *.vixl.lock
13
+ *.vixl
14
+ !examples/after-hours.vixl
15
+ .env
16
+
17
+ examples/output/
@@ -0,0 +1,19 @@
1
+ {
2
+ "mcpServers": {
3
+ "vixl": {
4
+ "command": "uvx",
5
+ "args": [
6
+ "--from",
7
+ "https://github.com/jxburros/Vixl/archive/refs/tags/v0.15.0.tar.gz",
8
+ "vixl",
9
+ "mcp",
10
+ "--workspace",
11
+ ".",
12
+ "--tools",
13
+ "core",
14
+ "--schema",
15
+ "slim"
16
+ ]
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,219 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.15.0
6
+
7
+ - Cross-platform agent distribution: base-package MCP dependency, PyPI Trusted Publishing workflow,
8
+ Claude Code plugin/marketplace and Claude Desktop MCPB build artifacts with the complete skill.
9
+ - Streamable HTTP MCP with the REST bearer-token policy and loopback protection; stdio remains available.
10
+ - Live `view` page for renders, layers, history and persistent review notes shared with CLI/MCP agents.
11
+ - Workspace `brand.json` defaults for layouts, templates and rolls, embedded fonts/logos, and brand checks.
12
+ - `roll --apply` applies fonts and a layout atomically; layout results expose unfilled slots directly.
13
+ - Editable SVG shape/path import, compound-path rendering, and optional raster PDF page import.
14
+ - Sixteen offline agent briefs, stored acceptance baseline, weekly full/slim live comparisons when configured,
15
+ and a documented core/slim setup that reduces tool schema context by approximately 46%.
16
+
17
+ ## 0.14.0
18
+
19
+ - **Character animation and sharper motion.** A new `pivot` operation (`vixl pivot arm 0.5 0.05`,
20
+ anchor names, `--px`, `--clear`) makes rotation and scale turn about a joint that stays fixed in
21
+ renders, timeline frames, layout bounds and SVG; animated rotation no longer drifts; group
22
+ `translate`/`rotation`/`scale` keyframes carry their children; `animate`, `animate-preset` and
23
+ `keyframe` accept `targets` (CLI `a,b`). `export-timeline --scale` (now up to 16) renders frames at
24
+ full resolution instead of enlarging them, and `export --scale` and large icon-set sizes re-render
25
+ text, shapes and vectors the same way. `export-animation` gains `--sampling smooth|nearest` with
26
+ fractional smooth scales, and frame animation works at any canvas size within the pixel budget (the
27
+ 256×256 cap is gone). GIFs are much smaller with no visual change (frame differencing for opaque
28
+ animations), accept `--colors 2–256`, and the export result warns above 1 MB; a 728×90 4 s banner
29
+ went from 929 KB to 190 KB (76 KB at 64 colors). New REST `POST /animation/export`.
30
+ - **MCP as two servers.** `vixl mcp --tools core` serves editing, rendering, checks, export and the
31
+ catalogs; `--tools ai` serves the provider-backed tools plus workspace/open/inspect/preview. Both
32
+ share the workspace and see each other's saved edits. The default (`all`) is unchanged.
33
+ - **Windows: `vixl` works in already-open sessions.** The installer also places the launcher in
34
+ `%LOCALAPPDATA%\Microsoft\WindowsApps` (already on the user PATH of running programs) when that
35
+ folder is on PATH, never over another program's `vixl.exe`, and removes it on uninstall. The copy
36
+ finds the installation through `VIXL_HOME`, the installer's `HKCU\Software\Vixl\InstallRoot`
37
+ record, or `%LOCALAPPDATA%\Programs\Vixl`. The agent skill tells agents to check the standard
38
+ install locations and `python -m vixl` before asking where Vixl is, and the MCP docs now give the
39
+ correct install path.
40
+ - **Palettes, fonts and templates.** `palette apply` also sets the role swatches (`@background`,
41
+ `@ink`, `@accent` …), recoloring layouts and templates (`roles: false` adds only numbered swatches).
42
+ Templates roll their colors into role swatches and give text `heading`/`body` font roles, so
43
+ `font pair` re-fonts them. `text`/`text-set` accept `font` as a registered name, role or file, and
44
+ `missing_font` lists the registered fonts.
45
+ - **Checks and layouts.** On print sizes, legibility is judged in printed points (below 6 pt) instead
46
+ of at thumbnail width. `event-poster` grows its type on large formats, keeps the date on one line
47
+ and sets the facts at the foot. `render --data` checks every row and attaches a `check` report to
48
+ outputs with problems (`--no-check` skips it). Icon sets warn when they enlarge embedded images.
49
+ `vixl text --help` shows `text add` usage, and `inspect` accepts `--target`.
50
+ - **Fixes from a ten-design hands-on pass.** Stroked polygons, stars and closed paths now join
51
+ their first vertex instead of leaving a notch. `text-set` keeps a `text-layout` box, so changing
52
+ the color, size or copy of wrapped text no longer collapses it to one long line. SVG export now
53
+ names the cause of a `repeat`, lookup-table or raster-mask fallback instead of reporting a
54
+ generic "unsupported vector appearance".
55
+
56
+ - **Fill-in-the-blank layouts and templates.** Layouts and built-in templates no longer render
57
+ invented sample copy. Unfilled slots appear as visible `[Label]` placeholders recorded in
58
+ `state.blanks`, and the new default `blanks` check reports them as errors. `unfilled: "omit"`
59
+ leaves them out instead. Copy for a slot a layout doesn't use now fails with `unused_slot` and
60
+ lists the slots it does use, instead of being silently dropped. `layout show` / `vixl_layouts_list`
61
+ describe each layout's slots. Built-in templates roll their colors from a seeded palette unless
62
+ colors are supplied; custom templates can declare `blanks` and `roll`.
63
+ - **Typefaces.** A researched catalog of open-licensed Google Fonts families (classification,
64
+ weights, x-height, width, contrast, era, mood, roles, misuse cautions), curated heading/body
65
+ pairings with the reasoning behind each, and a pairing-principles guide (`vixl fonts`,
66
+ `font show`, `font pairings`, `font principles`, MCP `vixl_fonts`, REST `/typefaces`).
67
+ `font install FAMILY --weight N` and `font pair NAME|random` download on request, cache per user,
68
+ embed and register fonts, and set the document typography (`font-register` gains `role`) that
69
+ layouts use by default. The bundled font is now a proofing fallback, and a new default `fonts`
70
+ check warns when text uses it.
71
+ - **Dice.** `vixl roll` / `vixl_roll` / `GET /roll` rolls a coherent direction from one seed: a
72
+ pairing, a mood-consistent palette, a layout suited to the purpose and canvas, and its parameters,
73
+ returned as a ready `layout-apply` operation. Choices can be locked. Layouts and templates accept
74
+ `seed: "random"`, record which choices were rolled, and suggest exploring when parameters were thin.
75
+
76
+ - Add persistent design check suites with structural/pixel baselines, explicit time coverage,
77
+ measured failures and needs-review outcomes. Checked actions commit only when suites pass;
78
+ reusable repairs cannot modify their contracts.
79
+ - Add typed template metadata, portable document recipes with example validation, named
80
+ actions, minimum-size text fitting, grid arrangement, explicit vertical reflow, semantic
81
+ layer roles and staggered/relative motion recipes.
82
+ - Add bounded variant matrices, draft/final production, per-output checks/repairs,
83
+ contact sheets, checksum-verified resume and selective rebuilding.
84
+ - Add versioned editable component libraries and optional persistent layer/frame caching
85
+ with font/runtime invalidation and corrupt-cache fallback.
86
+ - Add durable background production/image/video/film jobs with frozen inputs, worker locks,
87
+ cooperative cancellation and recovery without blindly repeating external inference.
88
+ - Add shot sequences for stills, document timelines and video clips, camera movement,
89
+ crossfades, captions, explicit audio mixing and staged ZIP/MP4/WebM exports. Generated
90
+ video uses an opt-in HTTP job gateway; live service calls are not part of offline tests.
91
+ - Expose production through `vixl workflow`, Python and workspace MCP, with fixed-project
92
+ REST checks/actions/planning. Keep the inline MCP operation schema below its existing
93
+ size budget by hoisting shared constraints and moving field prose to schema discovery.
94
+ - Add an offline production example and [workflow reference](docs/production.md).
95
+
96
+ ## 0.13.0
97
+ - **Color language.** Every color field accepts CSS Color 4/5 notations (`lab()`, `lch()`, `oklab()`, `oklch()`, `hwb()`, `color(display-p3|rec2020|srgb-linear|xyz …)`, `color-mix()`), `cmyk()`/`device-cmyk()`, `gray()`, `kelvin()`, 148 CSS and 938 public-domain (CC0) xkcd survey color names, and modifiers (`lighten`, `darken`, `saturate`, `desaturate`, `mix`, `tint`, `shade`, `tone`, `alpha`, `rotate`, `complement`, `invert`, `grayscale`, `readable`). Swatches work inside expressions and may build on other swatches. Out-of-gamut colors are mapped by OKLCH chroma reduction.
98
+ - **Color tools.** `vixl color` / `vixl_color` / `POST /color` describe, convert, harmonize (10 schemes), build 50–950 scales, mix and check WCAG contrast; `palette-generate` stores scales and harmonies as swatches.
99
+ - **Print output.** CMYK JPEG/TIFF/PDF export via a supplied ICC profile (LittleCMS, rendering intents, embedded profile) or device-naive GCR with black generation and total ink limits; PDF and ICO export; `export-icons` for web/Apple/Android/Windows icon sets; dpi metadata from the canvas; soft proofing; color-vision simulation (Machado 2009). Opt-in `print` (ink coverage, effective image ppi, type under 6 pt, live area, bleed) and `color_vision` checks.
100
+ - **Named sizes.** 150 sizes across print, stationery, photo, posters, packaging, social, web, ads, email, video, slides, screens, app stores, icons, logos and games. Print sizes keep physical units, dpi, bleed and a safe area with generated trim/safe guides. `vixl new NAME`, `canvas size`, `Project.sized()`, `vixl_document_create(size=…)`, and named artboard presets.
101
+ - **Principled layouts.** 33 `layout-apply` composition systems (hero statement, editorial grid, split screen, rule of thirds, golden section, Z/F patterns, asymmetric balance, big number, quote, framed, diagonal band, typographic poster, product card, event poster, banner, letterhead, business card, slides, logo lockups, emblem, monogram, app icon, thumbnail, vertical story, price list, photo caption, minimal mark, bento grid). They adapt to the canvas and vary by seed (or content): contrast-checked color roles, a modular type scale, margins, alignment, accents and grids. Type is shrunk to fit small formats, and the choices are recorded in `state.layout`. `type-scale` defines character styles; new guidance covers typography, color, layout, accessibility, print, icons, motion and brushes.
102
+ - **Brushes.** Editable paint layers store strokes and render them deterministically with 17 brushes (round, soft-round, airbrush, pencil, ink, fineliner, brush-pen, marker, highlighter, calligraphy, chalk, charcoal, crayon, watercolor, dry-brush, spray, splatter). Strokes support explicit or simulated pressure, tapers, paper/grain/canvas textures, wet edges, bristles, spray, erase, SVG-path input, per-stroke overrides and `brush-define`.
103
+ - **Animation timelines.** `timeline-set`, `keyframe`, `keyframe-remove`, `animate`, `animate-preset` (22 presets) and `marker` animate any layer property (position, translate, scale, rotation, opacity, size, colors in OKLab, text, visibility, effect amounts) and the canvas background with 30+ easings. Frames render with `render --time`, contact sheets show motion at a glance, and `export-timeline` writes GIF, APNG, animated WebP, sprite sheets, PNG-sequence ZIPs, or MP4/WebM with ffmpeg.
104
+ - **Interfaces.** New MCP tools `vixl_sizes_list`, `vixl_layouts_list`, `vixl_brushes_list`, `vixl_color`, `vixl_timeline_inspect`, `vixl_timeline_preview`, `vixl_export_timeline` and `vixl_export_icons`; preview/export/check tools gain time, proof, simulation and print options. REST adds `/sizes`, `/layouts`, `/brushes`, `/color`, `/timeline`, `/timeline/frame` and `/timeline/export`.
105
+ - **Fixes.** Project lock files are removed after use (filelock 3.21+ is now required). Model routing consults a saved catalog before loading an optional SDK, and the native Anthropic adapter test skips without the `anthropic` extra. CSS color names keep priority even after Pillow caches parsed names. Swatch definitions may reference other swatches.
106
+ - **Docs.** The provider documentation records that the adapters have been used successfully against real services. New guides cover [sizes and layouts](docs/sizes-and-layouts.md), [color and print](docs/color-and-print.md) and [brushes and animation](docs/brushes-and-animation.md), and the agent skill gains matching references.
107
+
108
+ ## 0.12.1
109
+ - Reject inaccessible pending runtimes without crashing the launcher, including Windows access-denied errors during file inspection. Preserve the active runtime even when no previous version exists, retain the underlying error/path in update status, and keep update settings available without starting the engine.
110
+ - Activate explicit `vixl update` commands before returning, with a final installed-path health check, accurate active/previous version reporting, and rollback retention. Background updates still stage without disrupting running sessions.
111
+ - Handle update/check/rollback in the stable Windows launcher even when the active engine cannot import. Existing launchers gain these controls by running the new installer.
112
+ - Inspect visible nested group content in design checks and contrast measurements, accounting for group transforms, opacity, clipping and child targeting instead of reporting zero text layers.
113
+ - Report vector-only status and raster fallback reasons in saved SVG CLI results; retain strict SVG rejection and vector group/text regressions.
114
+ - Document same-session PATH setup, multiple-install/version diagnosis, and migration from older staged updaters.
115
+
116
+ ## 0.12.0
117
+ - Add 19 local, editable artistic filters: sepia, duotone, solarize, pixelate, halftone, crosshatch, ink-blot, stamp, photocopy, pencil-sketch, charcoal, find-edges, emboss, oil-paint, watercolor, swirl, ripple, wave and glass. No AI provider/model is used; seeded treatments are repeatable.
118
+ - Share HarfBuzz shaping, bidi/script runs, layout and outlined glyph geometry between PNG and SVG, including ligatures, combining characters, supported Unicode scripts, wrapping/fitting, multiline/path text and warp presets. Outline rendering can slightly change text spacing/antialiasing from earlier versions.
119
+ - Keep common color adjustments, blur, drop shadow, glow, stroke, color overlays, vector clipping and supported adjustment layers native in SVG. Preserve unaffected vector layers around unsupported raster appearances.
120
+ - Add strict SVG export policy through CLI, Python, REST and MCP, with responsible layer/effect details and no output overwrite on rejection. SVG filters are allowed; bitmap sources and unsupported appearances remain explicit limitations.
121
+ - Add visual/filter/history/parameter regression tests and frozen Windows checks for the new shaping and rendering dependencies.
122
+
123
+ ## 0.11.1
124
+ - Fix Windows CLI normalization/Unicode response encoding, including frozen executables and redirected output; successful saved edits no longer fail while printing normalization notes.
125
+ - Correct native SVG rotation to use the same clockwise direction as PNG.
126
+ - Preserve scalable logo groups, gradients, pixel grids, opaque boolean silhouettes and outlined plain ASCII wordmarks in SVG. Report remaining raster fallbacks in SVG metadata; complex text and unsupported appearances remain faithful raster fallbacks.
127
+ - Compress embedded fonts again while retaining original compressed image bytes without recompression; restore compact font-heavy logo project sizes.
128
+ - Load the image engine lazily for version/global-help commands, reducing startup overhead on discovery paths.
129
+ - Reconcile agent skill/output/blur/path documentation, and add independent SVG rendering plus frozen Windows workflow regressions.
130
+
131
+ ## 0.11.0
132
+
133
+ - Position Vixl and its documentation as a headless application designed for autonomous AI agents.
134
+ - Add self-contained SVG exports with native simple shapes/Bézier paths and documented raster fallbacks; expose export formats through CLI, Python, REST and MCP. Verify transparent PNG and JPEG background flattening.
135
+ - Add 16 shape/path shortcuts, editable single-contour Bézier paths, and geometry guidance for rotated logo construction.
136
+ - Add 32 palettes, six reusable design templates, custom resource registration, and portable overall/style design guidance included in AI planning.
137
+ - Add explicit local/HTTPS TTF/OTF font imports, registered document fonts, and workspace font tools.
138
+ - Add document-independent command discovery/help and compact CLI edit responses with `--detail full` opt-in.
139
+ - Add authenticated model discovery, capability routing, and native Anthropic/Gemini plus OpenAI-compatible Mistral/Meta adapters. Midjourney is supported only through a user-configured HTTP gateway.
140
+ - Cover new features with offline regression tests; live paid-provider inference requires user credentials and is not exercised by CI.
141
+
142
+
143
+ Vixl's main users are AI agents; this release targets long agent sessions, fewer round trips and fewer tokens.
144
+
145
+ **Long sessions**
146
+ - History stores structural deltas with a full snapshot every 32 revisions (`.vixl` format 2; format 1 still loads). Historical revisions are validated when restored.
147
+ - Reaching `max_history` squashes the oldest unreferenced revisions instead of making the document read-only.
148
+ - Edits no longer deep-copy the whole history: edit latency stays flat (≈20 ms after hundreds of edits instead of growing past 100 ms).
149
+ - Imported PNG/JPEG/WebP files keep their original bytes and image assets are stored without recompression: a 24 MP JPEG document is 2.8 MB instead of 25 MB and an edit autosaves in ≈0.04 s instead of ≈1.1 s. Unreferenced assets are dropped on save.
150
+ - Saving preserves an existing file's permissions (it used to force 0600) and new files honor the umask.
151
+
152
+ **Agent ergonomics**
153
+ - A shared normalizer accepts common model guesses in every interface (shape/type aliases, camelCase keys, `font_size`, `fill`/`color`, opacity 0–100, CSS `rgba()`, style shorthands, `"N%"` and `"center"` geometry) and reports each rewrite under `normalized`. Blur `radius` is read as `amount` (it was previously accepted and silently ignored). The command line no longer divides opacity separately.
154
+ - Errors carry `operation_index`, `operation_type`, `field`, `allowed` and `suggestions`; MCP now passes this structure through instead of a flat string.
155
+ - MCP results are minified JSON without duplicated structured content; advertised schemas drop pydantic titles and Optional wrappers. Compact diffs return new values only; new layers return name/type/bounds; `vixl_document_inspect` defaults to a compact summary; measurements summarize histograms unless `histogram: "full"`.
156
+ - `vixl mcp --schema slim` plus `vixl_operation_schema` for on-demand field lookup. `vixl_ai_plan` is opt-in (`--planner`).
157
+ - New: `vixl_check` / `vixl check` / `Project.check` / `POST /check` (bounds, text overlap, WCAG contrast, safe area and reserved zones, thumbnail legibility); `vixl_render_compare` / `POST /compare` (side-by-side or diff of revisions, `head~N`, `previous`); zoomable previews (`region`); `vixl_document_close`; `Project.at(ref)` and `Project.resolve_ref(ref)`.
158
+ - Sessions keep up to 8 documents open; every MCP tool accepts `document`. `vixl_import_image` accepts base64 or data URLs. `vixl_import_image` now returns a compact layer summary.
159
+
160
+ **Speed**
161
+ - Plain layers composite only over their own bounds (12 MP, 30 layers: 8.5 s → 0.09 s). Decoded images are cached; JPEGs decode at reduced scale when shown smaller.
162
+ - Previews render a scaled proxy of the document: a 24 MP preview takes ≈0.25 s instead of ≈2.7 s.
163
+
164
+ **AI providers**
165
+ - New Gemini (`gemini-3.1-flash-image`, `gemini-3.8-flash`), Black Forest Labs FLUX (`flux-2-pro`, `flux-pro-1.0-fill`) and Anthropic (`claude-opus-5-5`, official SDK via the `anthropic` extra, server-side refusal fallbacks) adapters.
166
+ - OpenAI defaults to `gpt-image-2.5-flare` with multiple-of-16 sizes and `gpt-5-mini` for vision/planning.
167
+ - Preset-size providers' images are fitted to the canvas and the original size recorded as `resized_from`. Detection results share one shape. AI plan safety checks run after normalization.
168
+
169
+ **Evaluation**
170
+ - `evals/`: eight design briefs with programmatic checks and reference solutions, a harness that drives the real MCP server, a Claude agent (official SDK), and a manual GitHub workflow for live runs.
171
+
172
+ **Documentation**
173
+ - Add the `skills/vixl` agent skill covering MCP tools, CLI commands, REST routes, the Python API, every operation type, AI providers and tested recipes, updated for this release (check/compare/zoom tools, structured errors, normalization, multi-document sessions, new providers).
174
+
175
+ **Packaging**
176
+ - The version is single-sourced from `vixl.__version__`.
177
+
178
+ ## 0.10.0
179
+
180
+ - Rename the application to Vixl throughout: `vixl` CLI, `vixl-engine` distribution, `vixl` Python API, and `VixlError`.
181
+ - Use `.vixl` documents, `.vixlscript` scripts, `vixl_*` MCP tools, `VIXL_*` environment variables, and Vixl configuration/session paths.
182
+ - Brand Windows installers, bundled executables, update manifests, release assets, repository links, documentation, and examples as Vixl.
183
+ - Start a distinct Windows installation identity; no legacy command, import, or file-format compatibility aliases are provided.
184
+
185
+ ## 0.9.0
186
+
187
+ - Add opt-in spacing analysis for equal gaps, expected distances and balanced space before/after an object, with tolerances and structured measurements.
188
+ - Add compact palette-indexed pixel layers, integer pixel/line/rectangle/flood-fill tools, named animation frames with timing, and nearest-neighbor GIF/APNG/sprite-sheet export.
189
+ - Expose compact pixel/frame inspection and spacing tools through CLI, Python, REST and typed MCP tools; keep frame-save responses free of full snapshots by default in MCP.
190
+
191
+ - Add editable design operations: groups/clipping, procedural shapes, layer styles, linked typography and swatches, frames, repeats/blends, guides/grids, pathfinder and symbols.
192
+ - Add artboards, CSV data-set rendering, layer comps and multi-scale screen exports.
193
+ - Add richer gradients, adjustment layers, histogram-based automatic corrections, named 3D LUTs, text box/warp/polyline layout, and read-only pixel/histogram/contrast measurements.
194
+ - Expose shared operations through CLI/Python/REST/MCP and AI plans, plus provider-backed Remove, Content-Aware Fill and Select Subject.
195
+ - Rebuild the example poster with one repeated stripe clipped to a live ellipse.
196
+
197
+ ## 0.8.0
198
+
199
+ - Expose canonical operation schemas directly in MCP tools/list, including required fields and enums; no resource fetch needed.
200
+ - Return changed layer fields by default; opt into full snapshots with `detail: "full"`. Paginate MCP history and allow inspection of one layer.
201
+ - Bound MCP PNG previews to 1024×1024 and 1 MiB by default, with explicit dimension/byte controls and aspect-preserving resizing.
202
+ - Add workspace browsing, document creation/opening, path-based image import, and full-resolution file export. Start with `vixl mcp --workspace DIR` without an existing project.
203
+ - Replace MCP CLI-string AI dispatch with typed tools for generation, background removal, selection, planning, analysis, upscale, regeneration, and outpainting.
204
+ - Keep service projects loaded between calls, detect external file changes, and serialize edits across threads/processes without losing updates. Discard cached state after failed operations/saves.
205
+ - MCP migration: `vixl_import_image` now accepts `path` instead of `image_base64`; `vixl_ai` is replaced by the typed `vixl_ai_*` tools. Existing `--project FILE mcp` launch configurations still work, with the project's parent as workspace. CLI/Python AI interfaces remain compatible.
206
+
207
+ ## 0.7.0
208
+
209
+ - Add a per-user Windows installer with bundled Python, font, REST and MCP dependencies.
210
+ - Register a stable `vixl` command in the Windows user PATH; uninstall without removing user projects.
211
+ - Check published stable GitHub releases in the background once per day when Vixl starts.
212
+ - Verify downloaded runtime checksums, validate archive paths, and health-check side-by-side runtimes before activation.
213
+ - Preserve existing sessions and the previous runtime; add manual check/update, opt-out/status, and rollback commands.
214
+ - Build installer/update/Python artifacts and publish complete GitHub releases from matching version tags.
215
+ - Add Python 3.14 CI and native Windows installer/update/uninstall tests.
216
+
217
+ ## 0.6.0
218
+
219
+ - Initial programmable image engine with editable projects, CLI/shell, automation, AI provider adapters, REST, and MCP.