Compatibility and Ignored Input
The parser is deliberately permissive so older files and forward-looking source load without failing. This page records what's accepted but not doing anything yet; read it before assuming that parsing a line means it renders.
| Input | Parser behavior | Scene/runtime behavior |
|---|---|---|
| Unknown statement line | Skipped. | No effect. |
Unknown leading @directive |
Skipped. | No effect. |
Unknown property: value |
Retained as a generic property. | No guaranteed consumer. |
for <count> block inside imagine |
Recognized replicator. | Native vector and text copies evaluate and render with supported ordered modifiers; the structure is saved. See replication. |
Legacy for index from ... block |
Recognized AST node. | Not compiled into Scene. |
when block |
Recognized AST node. | Not compiled into Scene. |
maskMode, maskInvert, blendMode |
Retained properties. | Rendered in format 6; earlier releases ignored them. See compositing. |
shadow, outline, displacement, custom effect |
Parsed effect node. | No registered effect renderer. |
Inline cubic bezier ease (x1, y1, x2, y2) after from ... to ... over |
Accepted. | Dropped: the animation runs linear. Use the indented ease: option or a keyframe ease. |
Text stroke, strokeWidth |
Retained properties. | Text renderer ignores them. |
| Image fill on text | Retained as the fill property. |
Text renderer ignores it; use a color fill. |
| Arrays | Parsed and retained. | Compiler does not preserve square-array syntax. |
N% percent literals |
Parsed as a percent value. | Previously parsed as a broken modulo expression and resolved to nothing. It now resolves against the parent on position, size, width, and height, or as a fraction of 1 on opacity. |
Compatibility behavior is useful when inspecting imported files. New scenes should prefer the renderer-backed properties and effects in the generated references.
Multi-property animate blocks with matching from and to maps are fully
retained, evaluated, and emitted by the compiler. They are additive syntax and
do not change the behavior of existing single-property animations.
imagine card
shape: rectangle
maskMode: alpha
blendMode: "screen"
create cardFinding ignored input
Use # for comments. A // line loads because it is skipped, not because it
is a supported comment. Unknown properties can be saved without changing the
scene. Prefer the properties and effects listed in the references.
Wrapped paragraph spacing
Text with wordWrap: true and a width constraint advances one line-height after
every committed line, including the final line before a hard newline. Older
builds could place consecutive paragraphs on the same baseline. This layout
correction changes those overlapping captures without changing stored syntax or
file-format version.
Animation interpolation and constant keys
interpolation: timing and interpolation: spatial are retained, evaluated,
rendered and saved on single-property animations, including macro bodies.
Omission preserves legacy 2D position paths. Non-position tuples never use
spatial interpolation. Older readers ignore this new option, so a timing-only
position path may curve when opened there. Old files need no migration and the
file-format version is unchanged.
The compiler now writes supported bezier easing, speed, blend and weight in indented options, which the existing parser retains. It preserves full numeric key time precision with decimal spelling, including sub-microsecond keys. Inline from/to bezier easing remains the legacy ignored form documented above.
Constant key references now interpolate their resolved numeric/tuple values; older builds left them as strings. Aliases and tuple components use the existing root, immediate parent and local scope. Expressions in keys, expression-valued defines, unresolved names and cyclic references are not evaluated by this path. They remain authored values; parser acceptance alone does not imply meaningful interpolation, and validation does not yet diagnose every unresolved key name.
step(edge, x) and named expo/quint easing variants require this runtime.
Older runtimes report an unknown expression function for step and use their
legacy linear fallback for unrecognized easing names. Existing back variants,
selector identity and stagger ordering are unchanged.
Stroke trim
Native stroke trim is retained, animated, rendered and saved. Omitted values preserve existing output. Unsupported SVG trim styles and invalid values have explicit diagnostics. Older readers ignore trim properties; see stroke trim for limits.
Tempo and musical clocks
Scene-root bpm and beatOffset are retained and saved; expressions using
beat and beatPhase evaluate and render in
both expression paths. Legacy artboard migration keeps tempo at the scene
root. Omission preserves existing output. Older runtimes ignore tempo metadata
and cannot evaluate these two built-ins. The names bpm and beatOffset
are reserved for scene metadata; nonroot generic values remain retained but
do not set tempo and produce validation errors. See expressions.
Named cameras
Format 5 camera instances, active keys and pose animation tracks are
retained, evaluated, rendered and saved. Older readers reject format 5. Files
from format 4 keep their host view; see cameras for targeting,
depth and composition limits.
Text replication and text modifier blocks require this runtime. Older readers
may retain loops without rendering text, and discard text modifier blocks when
saving. Existing format-5 files require no migration.