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.
- vixl_engine-0.15.0/.claude-plugin/marketplace.json +5 -0
- vixl_engine-0.15.0/.claude-plugin/plugin.json +11 -0
- vixl_engine-0.15.0/.github/workflows/agent-eval.yml +51 -0
- vixl_engine-0.15.0/.github/workflows/pypi.yml +46 -0
- vixl_engine-0.15.0/.github/workflows/release.yml +92 -0
- vixl_engine-0.15.0/.github/workflows/test.yml +27 -0
- vixl_engine-0.15.0/.gitignore +17 -0
- vixl_engine-0.15.0/.mcp.json +19 -0
- vixl_engine-0.15.0/CHANGELOG.md +219 -0
- vixl_engine-0.15.0/PKG-INFO +395 -0
- vixl_engine-0.15.0/README.md +361 -0
- vixl_engine-0.15.0/distribution/build_windows.ps1 +19 -0
- vixl_engine-0.15.0/distribution/engine.py +41 -0
- vixl_engine-0.15.0/distribution/launcher.py +119 -0
- vixl_engine-0.15.0/distribution/package_extensions.py +75 -0
- vixl_engine-0.15.0/distribution/package_release.py +43 -0
- vixl_engine-0.15.0/distribution/test_native_design.py +125 -0
- vixl_engine-0.15.0/distribution/test_native_mcp.py +81 -0
- vixl_engine-0.15.0/distribution/test_native_update.py +98 -0
- vixl_engine-0.15.0/distribution/test_windows_install.ps1 +87 -0
- vixl_engine-0.15.0/distribution/windows/vixl.iss +215 -0
- vixl_engine-0.15.0/docs/agent-resources.md +131 -0
- vixl_engine-0.15.0/docs/architecture.md +76 -0
- vixl_engine-0.15.0/docs/artistic-filters.md +67 -0
- vixl_engine-0.15.0/docs/brands.md +62 -0
- vixl_engine-0.15.0/docs/brushes-and-animation.md +113 -0
- vixl_engine-0.15.0/docs/color-and-print.md +83 -0
- vixl_engine-0.15.0/docs/commands.md +249 -0
- vixl_engine-0.15.0/docs/coverage.md +46 -0
- vixl_engine-0.15.0/docs/design-tools.md +168 -0
- vixl_engine-0.15.0/docs/example-poster.png +0 -0
- vixl_engine-0.15.0/docs/filter-gallery.png +0 -0
- vixl_engine-0.15.0/docs/interfaces.md +263 -0
- vixl_engine-0.15.0/docs/operations.md +83 -0
- vixl_engine-0.15.0/docs/pixel-animation-spacing.md +83 -0
- vixl_engine-0.15.0/docs/product-spec.md +2717 -0
- vixl_engine-0.15.0/docs/production.md +312 -0
- vixl_engine-0.15.0/docs/providers.md +169 -0
- vixl_engine-0.15.0/docs/releases.md +164 -0
- vixl_engine-0.15.0/docs/sizes-and-layouts.md +109 -0
- vixl_engine-0.15.0/docs/typography.md +56 -0
- vixl_engine-0.15.0/evals/README.md +100 -0
- vixl_engine-0.15.0/evals/__init__.py +1 -0
- vixl_engine-0.15.0/evals/baseline.json +21 -0
- vixl_engine-0.15.0/evals/harness.py +391 -0
- vixl_engine-0.15.0/evals/run.py +59 -0
- vixl_engine-0.15.0/evals/tasks/copy-between-documents.json +18 -0
- vixl_engine-0.15.0/evals/tasks/equal-spacing.json +20 -0
- vixl_engine-0.15.0/evals/tasks/fix-layout.json +26 -0
- vixl_engine-0.15.0/evals/tasks/font-pairing.json +64 -0
- vixl_engine-0.15.0/evals/tasks/layout-filled.json +56 -0
- vixl_engine-0.15.0/evals/tasks/photo-caption.json +25 -0
- vixl_engine-0.15.0/evals/tasks/print-cmyk.json +53 -0
- vixl_engine-0.15.0/evals/tasks/restore-deleted.json +20 -0
- vixl_engine-0.15.0/evals/tasks/roll-applied.json +70 -0
- vixl_engine-0.15.0/evals/tasks/story-list.json +23 -0
- vixl_engine-0.15.0/evals/tasks/svg-logo-import.json +67 -0
- vixl_engine-0.15.0/evals/tasks/template-creation.json +54 -0
- vixl_engine-0.15.0/evals/tasks/timeline-motion.json +88 -0
- vixl_engine-0.15.0/evals/tasks/variable-variants.json +20 -0
- vixl_engine-0.15.0/evals/tasks/workflow-checked-edit.json +100 -0
- vixl_engine-0.15.0/evals/tasks/youtube-thumbnail.json +25 -0
- vixl_engine-0.15.0/examples/after-hours.vixl +0 -0
- vixl_engine-0.15.0/examples/build_poster.py +129 -0
- vixl_engine-0.15.0/examples/build_production_demo.py +172 -0
- vixl_engine-0.15.0/examples/build_sprite.py +63 -0
- vixl_engine-0.15.0/examples/operations.json +9 -0
- vixl_engine-0.15.0/examples/portrait-cleanup.vixlscript +5 -0
- vixl_engine-0.15.0/pyproject.toml +36 -0
- vixl_engine-0.15.0/scripts/verify_fonts.py +94 -0
- vixl_engine-0.15.0/skills/vixl/SKILL.md +265 -0
- vixl_engine-0.15.0/skills/vixl/references/ai.md +90 -0
- vixl_engine-0.15.0/skills/vixl/references/artistic-filters.md +67 -0
- vixl_engine-0.15.0/skills/vixl/references/brushes-timeline.md +54 -0
- vixl_engine-0.15.0/skills/vixl/references/cli.md +314 -0
- vixl_engine-0.15.0/skills/vixl/references/design-system.md +61 -0
- vixl_engine-0.15.0/skills/vixl/references/mcp-rest-python.md +210 -0
- vixl_engine-0.15.0/skills/vixl/references/operations.md +202 -0
- vixl_engine-0.15.0/skills/vixl/references/production.md +33 -0
- vixl_engine-0.15.0/skills/vixl/references/recipes.md +228 -0
- vixl_engine-0.15.0/skills/vixl/references/resources.md +131 -0
- vixl_engine-0.15.0/skills/vixl/references/typography.md +58 -0
- vixl_engine-0.15.0/src/vixl/__init__.py +16 -0
- vixl_engine-0.15.0/src/vixl/__main__.py +3 -0
- vixl_engine-0.15.0/src/vixl/ai.py +1155 -0
- vixl_engine-0.15.0/src/vixl/animation.py +321 -0
- vixl_engine-0.15.0/src/vixl/artistic.py +190 -0
- vixl_engine-0.15.0/src/vixl/assets.py +74 -0
- vixl_engine-0.15.0/src/vixl/assurance.py +241 -0
- vixl_engine-0.15.0/src/vixl/automation.py +434 -0
- vixl_engine-0.15.0/src/vixl/brand.py +225 -0
- vixl_engine-0.15.0/src/vixl/brushes.py +510 -0
- vixl_engine-0.15.0/src/vixl/changes.py +167 -0
- vixl_engine-0.15.0/src/vixl/checks.py +498 -0
- vixl_engine-0.15.0/src/vixl/cli.py +890 -0
- vixl_engine-0.15.0/src/vixl/colors.py +1083 -0
- vixl_engine-0.15.0/src/vixl/commands.py +371 -0
- vixl_engine-0.15.0/src/vixl/constants.py +51 -0
- vixl_engine-0.15.0/src/vixl/data/DejaVuSans.ttf +0 -0
- vixl_engine-0.15.0/src/vixl/data/FONT-LICENSE.txt +78 -0
- vixl_engine-0.15.0/src/vixl/data/font-pairings.json +1499 -0
- vixl_engine-0.15.0/src/vixl/data/font-principles.md +98 -0
- vixl_engine-0.15.0/src/vixl/data/fonts.json +3657 -0
- vixl_engine-0.15.0/src/vixl/data/view.html +197 -0
- vixl_engine-0.15.0/src/vixl/data/xkcd-colors.json +944 -0
- vixl_engine-0.15.0/src/vixl/design.py +662 -0
- vixl_engine-0.15.0/src/vixl/design_cli.py +115 -0
- vixl_engine-0.15.0/src/vixl/design_render.py +426 -0
- vixl_engine-0.15.0/src/vixl/design_schema.py +133 -0
- vixl_engine-0.15.0/src/vixl/errors.py +13 -0
- vixl_engine-0.15.0/src/vixl/exports.py +184 -0
- vixl_engine-0.15.0/src/vixl/feature_cli.py +344 -0
- vixl_engine-0.15.0/src/vixl/fileio.py +50 -0
- vixl_engine-0.15.0/src/vixl/film.py +317 -0
- vixl_engine-0.15.0/src/vixl/fonts.py +56 -0
- vixl_engine-0.15.0/src/vixl/geometry.py +107 -0
- vixl_engine-0.15.0/src/vixl/history.py +104 -0
- vixl_engine-0.15.0/src/vixl/imports.py +319 -0
- vixl_engine-0.15.0/src/vixl/interfaces.py +737 -0
- vixl_engine-0.15.0/src/vixl/jobs.py +452 -0
- vixl_engine-0.15.0/src/vixl/layouts.py +1556 -0
- vixl_engine-0.15.0/src/vixl/mcp_tools.py +1319 -0
- vixl_engine-0.15.0/src/vixl/measure.py +155 -0
- vixl_engine-0.15.0/src/vixl/model.py +78 -0
- vixl_engine-0.15.0/src/vixl/models.py +314 -0
- vixl_engine-0.15.0/src/vixl/normalize.py +346 -0
- vixl_engine-0.15.0/src/vixl/operations.py +720 -0
- vixl_engine-0.15.0/src/vixl/pixel.py +138 -0
- vixl_engine-0.15.0/src/vixl/pixel_schema.py +97 -0
- vixl_engine-0.15.0/src/vixl/plugins.py +24 -0
- vixl_engine-0.15.0/src/vixl/production.py +465 -0
- vixl_engine-0.15.0/src/vixl/project.py +656 -0
- vixl_engine-0.15.0/src/vixl/proxy.py +160 -0
- vixl_engine-0.15.0/src/vixl/render.py +910 -0
- vixl_engine-0.15.0/src/vixl/render_cache.py +141 -0
- vixl_engine-0.15.0/src/vixl/resource_cli.py +170 -0
- vixl_engine-0.15.0/src/vixl/resources.py +375 -0
- vixl_engine-0.15.0/src/vixl/review.py +52 -0
- vixl_engine-0.15.0/src/vixl/schema.py +378 -0
- vixl_engine-0.15.0/src/vixl/sizes.py +425 -0
- vixl_engine-0.15.0/src/vixl/spacing.py +82 -0
- vixl_engine-0.15.0/src/vixl/svg.py +501 -0
- vixl_engine-0.15.0/src/vixl/svg_effects.py +266 -0
- vixl_engine-0.15.0/src/vixl/text.py +379 -0
- vixl_engine-0.15.0/src/vixl/timeline.py +917 -0
- vixl_engine-0.15.0/src/vixl/typefaces.py +407 -0
- vixl_engine-0.15.0/src/vixl/updater.py +506 -0
- vixl_engine-0.15.0/src/vixl/validation.py +273 -0
- vixl_engine-0.15.0/src/vixl/workflows.py +160 -0
- vixl_engine-0.15.0/tests/icc_helper.py +63 -0
- vixl_engine-0.15.0/tests/test_agent_adoption.py +398 -0
- vixl_engine-0.15.0/tests/test_agent_interface.py +315 -0
- vixl_engine-0.15.0/tests/test_agent_resources.py +457 -0
- vixl_engine-0.15.0/tests/test_artistic_svg_text.py +382 -0
- vixl_engine-0.15.0/tests/test_blanks_fonts_roll.py +257 -0
- vixl_engine-0.15.0/tests/test_brushes_timeline.py +288 -0
- vixl_engine-0.15.0/tests/test_character_animation.py +265 -0
- vixl_engine-0.15.0/tests/test_cli.py +128 -0
- vixl_engine-0.15.0/tests/test_color_print.py +225 -0
- vixl_engine-0.15.0/tests/test_design.py +502 -0
- vixl_engine-0.15.0/tests/test_engine.py +364 -0
- vixl_engine-0.15.0/tests/test_eval_harness.py +116 -0
- vixl_engine-0.15.0/tests/test_friction_fixes.py +142 -0
- vixl_engine-0.15.0/tests/test_group_checks.py +145 -0
- vixl_engine-0.15.0/tests/test_history_storage.py +197 -0
- vixl_engine-0.15.0/tests/test_interfaces_ai.py +234 -0
- vixl_engine-0.15.0/tests/test_logo_regressions.py +307 -0
- vixl_engine-0.15.0/tests/test_mcp_workspace.py +306 -0
- vixl_engine-0.15.0/tests/test_pixel_spacing.py +286 -0
- vixl_engine-0.15.0/tests/test_production_workflows.py +697 -0
- vixl_engine-0.15.0/tests/test_providers.py +155 -0
- vixl_engine-0.15.0/tests/test_providers_modern.py +203 -0
- vixl_engine-0.15.0/tests/test_sizes_layouts.py +193 -0
- vixl_engine-0.15.0/tests/test_updater.py +606 -0
|
@@ -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,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.
|