On this page
#Changelog
#0.3.0
strictspec validation for scene and config documents, a working CLI on strictcli 0.36.0, and an enforced strictcli floor.
Context
Two breaking changes ship together. Scene and config documents are now validated by strictspec instead of jsonschema: every document must carry a top-level integer format_version, use elements must name their type, and a field may not be spelled both canonically and in snake_case. Separately, --dry-run became a framework-owned flag, so disabling it requires the explicit --no-dry-run spelling.
The release also repairs installs. predraw's CLI could not register against strictcli releases before 0.36.0; the manifest now declares that floor so a fresh install fails loudly at resolution time instead of producing a CLI that cannot start.
#Breaking
- Breaking.
--dry-runbool flag now requires explicit--no-dry-runto disable. - Breaking. Scene and config documents are now validated by strictspec with hard errors instead of jsonschema. Every document must carry a top-level integer
format_version(stamp existing files once withscripts/stamp_format_version.py);useelements must carry an explicittype; and a field may not use both its canonical and snake_case alias spelling. Documents previously tolerated (missing version, ambiguous alias pairs, numerically unrepresentable values, unknown keys) are now rejected.
#Fixes
- Fix pack command to use camelCase for stroke properties; watch excludes local-only files
- CI fix. Resolved dependency resolution failure by removing local path override for strictcli.
- Dependency installation no longer requires a machine-local checkout:
uv.lockpreviously carried a local path forstrictcli, breaking installs and CI outside the author's machine. It now resolves from PyPI (strictcli 0.24.0). - **The
predrawCLI works again on strictcli 0.36.0.**build --dry-runis unchanged for callers -- the flag is now supplied by the framework rather than declared by predraw, which is what the new version requires. - **Installs now refuse an incompatible
strictcli.**predrawdeclaresstrictcli>=0.36.0, so a fresh install can no longer resolve an older framework release that the CLI cannot register against.
#0.2.1
- No user-facing changes.
#0.2.0
#Features
- Place directions —
placepipeline step now supportsabove,left,rightin addition tobelow - Schemas moved into package —
predraw validatenow works after pip install - Stroke support (
stroke,strokeWidth,strokeDasharray,strokeLinecap,strokeLinejoin,strokeOpacity) - Gradient fills —
linear-gradientandradial-gradientas fill/stroke objects, rendered as SVG<defs> predraw init— create a starter project withmain.json+config.jsonpredraw watch— auto-rebuild on file changes (mtime polling, 0.3s debounce)predraw --versionflagpredraw build --dry-run— preview output plan without rendering
#0.1.2
#Features
- npm dual-publish — installable via
npm i -g predraw(Node shim delegates to Python) predraw validatedocumented in README
#0.1.1
#Features
- Bounding box calculation for paths —
placepipeline step now uses real geometry instead of font-size heuristic - Local
fonts/directory support — project-local fonts searched before system fonts for reproducible rendering - Component property overrides —
useelements can overridefill(replaces) andopacity(multiplies) on referenced components
#0.1.0
#Features
- Component system:
imports+usewith property overrides (fill, opacity cascade) text-to-pathspipeline step via fonttools (converts text to SVG path outlines)- Output formats: SVG, PNG (via cairosvg), WebP (via Pillow)
predraw unpack— convert packed file back to directory with components- JSON Schema for scene and config formats
predraw validate— validate scene/config files against the JSON Schema- Declarative JSON format for describing visual assets (rect, path, text, group, background)
$styletokens with light/dark mode variants, resolved at render time- Per-character text styling via
charStyles - Pipeline steps:
center,place,group,text-to-paths - Config-driven outputs with per-output mode selection (
config.json) predraw build— render all outputs from a project directory or single filepredraw pack— convert directory project to single portable JSON file