PinePaper Studio Ontology

Formal OWL vocabulary for canvas elements, relations, animations, generators, and semantic dimensions.

Version: 0.5.4-beta Generated: 2026-08-24 License: CC0 1.0 (Public Domain)
Free to use, no attribution required. The PinePaper Studio Ontology (the pp: vocabulary) is dedicated to the public domain under CC0 1.0 Universal. You may use these terms in your own canvases, exports, training data, models, or downstream systems with no licensing obligations. (Note: this CC0 dedication covers only the vocabulary; PinePaper Studio software itself is separately licensed — see Terms of Service.)

Downloads

Summary

Namespace

@prefix pp: <https://pinepaper.studio/ontology/>

Classes (Node Types)

NameDescriptionParentAnchorAbstractParameters
ConceptAbstract conceptual resource — addressable independently of canvas items.skos:ConceptYes
CanvasElementAbstract root of everything drawn on the canvas. Every element has a position, a transform and an identity in the registry, which is what lets a relation address it and an export find it.schema:CreativeWorkYes
CanvasShapeAbstract: elements defined by vector geometry — paths, closed forms, strokes. They can be filled, stroked, trimmed, morphed and deformed at the vertex level, none of which a raster or a text run supports.CanvasElementYes
CanvasTextAbstract: elements whose content is language. They carry the scene's meaning, are what a screen reader announces, and re-measure when the content changes — so anything depending on their bounds must run after.CanvasElementYes
CharacterAssetAbstract: a generated character part — eyes, a skin, a rigged body. Produced by an asset generator from parameters, so it is modifiable and re-generatable rather than a fixed file.CanvasElementschema:CreativeWorkYes
CharacterEyeA parametric eye: an outer silhouette, an optional pupil and a highlight, emitted under the eye_/pupil_ roles the expression system drives so it blinks and looks without further wiring. Not the anatomical organ — a drawn component of a character.CharacterAsset
CharacterSkinA named appearance for a character body — palette plus proportions. A starting point that accepts overrides, not a fixed costume.CharacterAsset
RiggedCharacterA character whose parts are bound to a skeleton, so a pose or a walk cycle drives the artwork. Anchored on skeletal animation — the technique that defines it.CharacterAssetwd:Q1813564
StoreAbstract: persistent state a scene can read and write, surviving a page reload. Addressable and non-visual — it exists so a relation has somewhere to put a value, which is what keeps saving a score an assertion rather than a script.CanvasElementYes
LocalStoreSynchronous key/value storage of strings, around 5 MB. Readable and writable during a frame, which is why a counter can increment on click and be read in the same tick. Shares the HOST PAGE's origin, so keys are namespaced and nothing private belongs here.Store
IndexedStoreAsynchronous structured storage, large enough for scene-sized state. Resolves LATER than the frame that asked, so it suits loading and saving rather than per-frame reads — that asynchrony is the whole reason it is a separate type from pp:LocalStore.Store
CustomShaderEffectA fragment shader supplied by the author and rendered over an item's silhouette. Registered at runtime through registerShaderEffect, which COMPILES AND LINKS it first and refuses it with the driver log — a shader that fails otherwise renders nothing while appearing to apply, because the error goes to a console production strips.Concept
TextEffectA character-level text animation: one text item decomposed into per-character glyphs that arrive under a named effect (scattered, matrix, decrypt…). The composition is addressed through its ROOT glyph, which carries the content, font and origin it was built from — so the effect can be changed without retyping the text.CanvasTextwd:Q638636
TextEffectGlyphOne character of a pp:TextEffect. An ordinary text item with its own keyframes; it points back at the composition root through pp:glyphOf, which is what lets the whole effect be re-targeted or removed as a unit.CanvasText
CanvasContainerAbstract: elements that hold other elements and transform them as a unit. Containment comes from the scene tree, so a child inherits the parent's transform, opacity and blend unit.CanvasElementYes
DiagramAbstract diagram domain — flowcharts, UML, network topologies. Parent of pp:DiagramShape, pp:Connector, and the flow-relation hierarchy.CanvasElementYes
GeoFeatureAbstract geographic feature — regions, markers, administrative areas. Parent of pp:MapRegion and pp:Marker. Matches the GeoJSON \"feature\" concept.CanvasElementYes
TemplateA complete authored scene, loadable as a starting point and parameterisable. Templates are the engine's worked examples — they exercise the same public API a caller has, so anything a template does is reproducible.schema:VisualArtwork
TextA run of characters rendered as vector glyphs, sized by `fontSize` and set in `fontFamily`. The only type whose content is language, so it carries the scene's meaning and is what a screen reader announces. `contentType` makes it LIVE — clock, timer, countdown, stopwatch — updating itself without any animation attached. Becomes pp:LetterCollage when a Text Style is applied and pp:TextEffect when split per character; both REPLACE the text item, so reach for them last.CanvasTextschema:CreativeWork
GlyphA single character rendered as an editable vector outline (CompoundPath) — distinct from pp:Text (system-font text). Use to animate, morph, scale, or boolean a letter/digit as geometry. Emitted as custom Paper.js code (a CompoundPath per glyph).CanvasShape
CircleA closed round shape defined by `radius` alone — a circle has no width/height, and passing them sizes it by the SMALLER of the two. Choose it over pp:Ellipse whenever the shape is meant to stay round under scaling, because an ellipse with equal axes will drift the moment either is animated.CanvasShape
RectangleA closed four-sided shape defined by `width` and `height`, with optional `cornerRadius` for rounded corners. The default container for panels, cards, bars and backdrops. Choose pp:DiagramShape instead when the rectangle is a NODE that connectors should attach to — a plain rectangle has no ports, so a connector aimed at it will not track it.CanvasShape
PatternRepeating decorative field (scanlines, stripes, grid, dots) materialized as ONE item — a single CompoundPath tiling an area. The scale-safe form of what would otherwise be hundreds of individual primitives.CanvasShape
PathVector path — semantically incomplete without open/closed distinction. Defined by its curveType (mathematical function family). Refined to OpenPath or ClosedPath during graph extraction.CanvasShape
OpenPathOpen path (trajectory/stroke) — has start and end points, does not enclose area. Defined by curveType: the mathematical function governing its segments.Path
ClosedPathClosed path (region/boundary) — encloses area, no start/end distinction. Functionally equivalent to a shape defined by its boundary equation.Path
StarStar shape (geometrically: concave polygon with alternating radii)CanvasShape
TriangleA closed three-sided shape. Beyond `width`/`height` it accepts `kind` — right, equilateral, isosceles, obtuse, acute, scalene — or an explicit `angles` array, so the shape can be specified by its geometry rather than by computing vertices. Angles that nearly sum to 180 are normalised rather than refused.CanvasShape
PolygonA regular N-sided shape defined by `sides` (3 or more) and `radius` — every side and interior angle equal. Choose pp:Path when the outline is irregular; a polygon cannot express one, and forcing it produces a shape that silently ignores the vertices you meant.CanvasShape
EllipseA closed oval defined by independent `width` and `height`. Choose pp:Circle when the shape must remain round; use an ellipse precisely when the two axes should differ or animate apart.CanvasShape
LineAn open two-point path from `from` to `to`, drawn with `strokeColor`/`strokeWidth` and NOT filled — a fill on an open path renders as the region between its endpoints, which is rarely what is wanted. Choose pp:Connector when the line joins two diagram nodes and should follow them; a plain line is fixed in place and will not.CanvasShape
ArcAn open curved path through three points — `from`, `through`, `to` — where the middle point sets the bulge. The curve is defined by geometry rather than by control handles, so it is the cheapest way to get a controlled curve without authoring béziers. Choose pp:Path for anything needing more than one bend.CanvasShape
GroupA container whose children transform, animate and export as one unit: moving, scaling or rotating the group applies to everything inside it. Selection resolves to the group, so click-through requires ⌥/Alt. Choose pp:Precomp instead when the contents need their OWN timeline — a group shares the scene's clock and cannot loop independently.CanvasContainer
LetterCollageText rebuilt as per-letter artwork so each character can be styled independently — tiles, magazine cut-out, gradient fills. It REPLACES the text item, so apply it once the wording is settled; the letters are hit-tested by their ink, not by a bounding box.CanvasText
PrecompA nested composition with its OWN timeline, so its contents can loop independently of the scene clock. That local clock is the whole difference from pp:Group, which shares the scene's time and cannot.CanvasContainer
World3DA BOUNDED procedural volume rendered under the canvas: a square heightfield of `terrain.size` across with sky above it — a cuboid extent, not an open or shared world. Seeded terrain, scattered props and lighting, addressed as a parameter set rather than as geometry. Anchored on virtual place (any digitally created environment); NOT wd:Q444835 virtual world, whose sense is a multi-user simulated environment and which this is not.CanvasContainerwd:Q107307154
WorldTerrainThe heightfield a world is built on — seed, size, amplitude and relief. One height function serves both the mesh and collision.CanvasElementwd:Q271669
WorldObjectAn object placed at chosen coordinates in a 3D world, as opposed to procedurally scattered.CanvasElement
ShaderMeshGeometry in a 3D world drawn by an author-supplied vertex and fragment program. Unlike pp:WorldObject, which is a box with a colour, its SHAPE and its SHADING are both the author's: vertices and triangles supplied as data, transformed by a vertex program that may displace them per frame. A registry citizen under its own id, so relations can target it — anchor a label to a procedural surface, or drive its uniforms from an event.WorldObjectwd:Q1154597
WorldMaterialA named, SHARED surface description referenced by many world objects: one node, many users, so a single edit restyles all of them. That sharing is the whole point — a per-object colour already existed, and a material that styled one thing would be a rename rather than a capability. Carries colour and emissive only, because those are what this renderer consumes; there is no roughness or metalness here because there is no BRDF to read them, and opacity waits on sorted transparency. Anchored to nothing: a plausible-looking Wikidata concept would be worse than none.CanvasElement
WorldLightA point light placed in a 3D world: a position, a colour, an intensity and a RANGE at which its contribution reaches exactly zero. A light as an OBJECT rather than a constant — addressable, so a relation can move it and a lamp that follows a character is an edge rather than a special case in the renderer. Casts no shadow: each shadow-casting light doubles the geometry passes, and the sun remains the single directional caster.CanvasElementwd:Q1146001
WorldCharacterA controllable body in a 3D world — walks, jumps and collides with the terrain. Drivable by keyboard, timeline, relations or an agent.CanvasElementwd:Q1062345
SkeletonA hierarchy of bones that drives artwork bound to it. Poses, walk cycles and expression presets are all defined against a skeleton's bone NAMES, so the naming is what makes stock animation work without per-character wiring.CanvasContainer
BoneOne segment of a skeleton: a joint position, a length and an angle, with children starting at its tip. Rotating a bone rotates everything below it — which is forward kinematics, and why a rig is authored root-first.CanvasElement
PoseNamed bone-angle map saved on a skeleton, addressable by id. Multiple poses per skeleton form a pose library.Concept
BreakdownPoseA pose keyframe that shapes the ARC and SPACING of the transition between key poses rather than being a storytelling extreme. Carries `favor` (−1..1, biases spacing toward the previous/next key) and a `breakdown` flag; interpolation naturally arcs in bone-angle space. Breakdowns are what turn robotic pose-to-pose into believable motion (traditional keys → breakdowns → in-betweens).Pose
favor (default 0)
breakdown (default false)
TimingCurveA per-segment cubic-bezier ease { o:{x,y}, i:{x,y} } from [0,0]→[1,1] with y UNCLAMPED, so overshoot/anticipation are representable — a Disney timing/spacing chart as data. Schema-aligned with the LLM timing-deformation-graph spec (Lottie o/i tangents). Overrides the named ease on a pose keyframe.Concept
curve
PoseOverlapPer-bone timing offsets on a pose keyframe { boneId: lag∈[0,0.95) } — lagged bones trail during the transition so the tip drags the root: overlapping action / follow-through / drag (e.g. a \"delay foot\" on a kick).Concept
boneOffsets
MovingHoldA pose hold that slowly DRIFTS toward the next key (by a small holdDrift) instead of dead-stopping — keeps a held pose alive and anticipating the next action.Concept
movingHold (default false)
holdDrift (default 0.06)
IKTargetPathA spatial motion PATH (Lottie ti/to-style waypoints with bezier tangents) that an IK chain's effector follows, so it travels an ARC instead of a straight line to a static target. Temporal ease (pp:TimingCurve) is orthogonal to this spatial curvature.Concept
waypoints
duration (default 1)
loop (default false)
ShapeKeyPer-item visual delta (segments, opacity, color, size) saved on a skeleton with a rest baseline. Weighted blends drive facial-style animation.Concept
CompositionPatternAbstract named composition — an arrangement recipe expressed as structural relations rather than coordinates.Conceptskos:ConceptYes
CollagePatternA named arrangement of N sibling items (grid-2x2, hero-plus-strip, editorial-split, stacked-depth). Instantiating one positions a single root and wires beside/below/on_top_of edges for the rest.CompositionPattern
AudioSyncA composition timed to an audio track — the detected tempo and onset times that decide when each item lands. Held in the graph so a beat-synced piece can be re-cut or re-timed rather than re-detected.Concept
CameraTreatmentA named shot-list recipe (sheet-reveal, hero-then-details, slow-pan, push-through) compiled into a camera_animates track. Held separately from the pattern so one composition can be filmed several ways.CompositionPattern
IKChainInverse-kinematics chain on a skeleton — ordered bones + solver (fabrik / two_bone / ccd), optional pole vector, optional driving target item.Concept
ConstructionSequenceOrdered set of pp:ConstructionStep, played on the timeline to reveal a geometric construction one step at a time (replayable, scrubbable). Persisted as timed pp:constructionReveal relations, not a script.Concept
ConstructionStepOne step of a pp:ConstructionSequence: the item(s) introduced at a given stepOrder, mapped to a timeline reveal time (stepOrder × stepDuration).Concept
EventNamed event channel — pulsed by interaction relations (on_click_fire, etc.) and listened to by reaction relations (on_event_set_property, etc.). Carries optional payload (Numeric/String/Boolean/Pulse). Frame-coherent dispatch.CanvasElement
BonePhysicsVerlet integration layer over a skeleton — each bone has a particle at its tip, distance constraints preserve bone lengths, spring motors pull toward animated angles. Enabled per skeleton; blendWeight per bone mixes animated vs simulated. Use for hit reactions, hair/tail secondary motion, ragdoll.Concept
BoneJiggleSecondary-motion config attached to a bone — overshoots and oscillates around the animated angle with stiffness/damping. Use for jiggly accessories (ponytail, antenna, scarf) without authoring per-frame keyframes.Concept
stiffness (default 100)
damping (default 0.85)
gravity (default 0)
BoneColliderCollision shape that bone-physics particles bump against. Lives on a skeleton; multiple colliders per skeleton are allowed. Concrete subtypes select the shape primitive.ConceptYes
GroundColliderHorizontal ground plane at a fixed y. Bones above this y stay above it — used for floors and standing surfaces.BoneCollider
y (px, default 600)
CircleColliderCircular obstacle. Bones pushed out radially when they enter the disc. Use for balls, posts, round platforms.BoneCollider
x (px, default 0)
y (px, default 0)
radius (px, default 50)
RectColliderAxis-aligned rectangular obstacle. Bones pushed out to the nearest edge. Use for boxes, walls, platforms.BoneCollider
x (px, default 0)
y (px, default 0)
width (px, default 100)
height (px, default 100)
PathSkinningPer-vertex bone-weight binding of a Path or CompoundPath to a skeleton — linear blend skinning in 2D. Each path segment carries a list of (boneId, weight) influences, computed once at skin time from vertex-to-bone distances. Use for cloth, capes, and any deformable surface that should flex with the underlying rig.Concept
maxInfluences (default 2)
maxDistance (px, default 150)
falloff (default 2)
SpriteSheetAtlas+metadata package generated by rendering a rigged character across multiple poses or an animation timeline. Contains the packed image (TexturePacker JSON Hash format), per-frame uv data, and named animation cycles (e.g., walk / run / idle). Use to ship character animation as a single image for game engines or pre-rendered playback.CanvasElementschema:ImageObject
padding (px, default 1)
framePadding (px, default 4)
powerOfTwo (default true)
maxAtlasSize (px, default 4096)
SpriteFrameSingle frame inside a pp:SpriteSheet — a captured raster of the rigged character at one pose. Has a name, source rect in the atlas, trim metadata, and the original capture bounds.Concept
SpriteAnimationNamed playback cycle in a pp:SpriteSheet — ordered list of frame names, playback FPS, loop flag, and direction (forward / reverse / pingpong). Game engines and PinePaper's built-in player consume this for character animation.Concept
fps (frames/s, default 12)
loop (default true)
direction (default forward)
SpritePlayerRuntime playback session for a pp:SpriteAnimation on the canvas. Owns the per-frame delta-time accumulator, the current frame index, and the Raster item displaying the active frame. Use to play a generated atlas back on the canvas without re-rigging.Concept
VideoClipVideo media item — frame-sampled raster source with playhead, in/out trim, and optional per-frame GPU filters. Referenced by pp:MediaRef handle.CanvasElementschema:VideoObject
AudioClipAudio media item — sample-buffer source with volume, gain, and timeline placement. May coexist with a video pp:MediaRef or stand alone.CanvasElementschema:AudioObject
MediaRefShared media handle for a video / audio source. Multiple clips can reference the same source — two timeline copies of one uploaded video share one MediaRef. Use this to deduplicate media across a scene and across exports.Concept
SoundA synthesized audio source in the graph — a named voice whose value is a continuous waveform signal (ExpressionIR) over a [t0,t1] window, rendered by the Web Audio renderer. The synthesis counterpart to the sample-based pp:AudioClip; can hold a single tone, a chord, or an arbitrary partial set.CanvasElementschema:AudioObject
ToneA single synthesized voice: a pitch (note or base frequency), a timbre (waveform → additive harmonic partials), an ADSR envelope, gain, and pan. The atomic building block of a pp:Sound.Sound
ChordA renowned, instrument-agnostic frequency-ratio pattern (major, minor, dom7, maj7, min7, sus2/4, dim, aug, power) named over a root note; expands deterministically to N pp:Tone partials. \"Name it, the engine computes the frequencies\" — a weak model supplies root+kind, not Hz.Sound
PhysicsBodyBox2D rigid body attached to a canvas item. Subtype determines simulation behavior: static (immobile), dynamic (full sim), kinematic (animation-driven, can push dynamics).ConceptYes
StaticBodyImmobile rigid body — collides with dynamics but never moves under force. Used for walls and obstacles.PhysicsBody
DynamicBodyFully simulated rigid body — gravity, forces, impulses, collisions all act on it.PhysicsBody
KinematicBodyAnimation-driven rigid body — ignores forces but pushes dynamic bodies. Used for animated platforms, controlled characters.PhysicsBody
PhysicsGroundConvenience static body at the bottom of the canvas — provides a floor for dynamic bodies to land on.StaticBody
PhysicsJointConstraint between two physics bodies. Subtype determines the degrees of freedom allowed.ConceptYes
RevoluteJointHinge joint — bodies pivot around a shared anchor point with optional motor and angle limits.PhysicsJoint
DistanceJointFixed-length tether between two bodies — like a rigid rope. Use for tethers, pendulums and ropes; unlike a weld it permits rotation at both ends.PhysicsJoint
WeldJointRigidly fuses two bodies — eliminates relative motion. Used for compound objects.PhysicsJoint
SceneScriptTime-orchestrated container of character actions on a timeline. Loops, plays at variable speed, seekable.Concept
SceneActionSingle scheduled action inside a pp:SceneScript. Concrete subtypes are the composable character verbs (move/jump/crouch/idle/custom). All actions accept a duration (seconds) at the SceneScript level controlling how long they remain active.ConceptYes
actionMoveLeftWalk-cycle action toward negative-X. Per-tick displacement = speed*delta. Defaults: speed=120 px/s, so 2 px/frame at 60 Hz.SceneAction
speed (px/s, default 120)
delta (s, default 0.01667)
actionMoveRightWalk-cycle action toward positive-X. Per-tick displacement = speed*delta. Defaults: speed=120 px/s, so 2 px/frame at 60 Hz.SceneAction
speed (px/s, default 120)
delta (s, default 0.01667)
actionJumpParabolic-arc jump with anticipation and landing squash. Height/duration parametrize the arc; gravity is derived to make the character return to ground after `duration` seconds.SceneAction
height (px, default 100)
duration (s, default 0.6)
actionCrouchCrouched pose hold for the action duration. No parameters — the pose is fixed; duration is set on the SceneAction wrapper.SceneAction
actionIdleIdle / rest pose hold for the action duration. No parameters — clears velocity and returns to the idle pose.SceneAction
DataVisualizationAbstract data visualization — classified along 5 orthogonal dimensions: mark primitive, coordinate system, encoding channel, analytical task, and composition modeCanvasElementschema:CreativeWorkYes
MarkTypeAbstract mark primitive — the visual element used to represent data pointsYes
PointMarkDiscrete position mark (scatter, bubble, dot) Position is read accurately, so scatter is the right mark for correlation; it degrades fastest under overplotting.MarkType
LineMarkConnected trajectory mark (line, step, spline) Connecting points asserts CONTINUITY between them, so it is wrong for unordered categories no matter how good it looks.MarkType
BarMarkRectangular extent mark (bar, column, histogram bin) Length from a common baseline is the most accurately-read encoding there is, which is why bars beat pie for comparison. The baseline must be zero or the lengths lie.MarkType
AreaMarkFilled region mark (area, stream, band) Fills emphasise volume and accumulation; stacked areas make the TOTAL easy and the individual series hard.MarkType
ArcMarkAngular sector mark (pie slice, donut, sunburst) Angle is read poorly, so reserve it for part-to-whole with few slices — a pie with many segments is a bar chart that has been made harder.MarkType
CellMarkGrid cell mark (heatmap, matrix, waffle) For dense matrices where the PATTERN matters more than any single value; colour carries the value, so the scale choice decides what a reader sees.MarkType
TextMarkData-positioned text mark (word cloud, label) The only mark that states its value exactly rather than encoding it — use it where precision beats comparison, and sparingly, because text does not scan.MarkType
CoordinateSystemAbstract coordinate system for spatial data mapping The choice decides which comparisons are easy: Cartesian favours magnitude, polar favours cycles, geographic favours location.Yes
CartesianCoordinatesCartesian X/Y axes — the most common coordinate system for chartsCoordinateSystem
PolarCoordinatesPolar angle/radius coordinates (pie, radar, rose charts) Makes cyclical structure obvious and magnitudes hard, since radius encodes area rather than length.CoordinateSystem
GeographicCoordinatesGeographic lat/lon projection (choropleth, bubble map) The projection is a real decision — every one distorts something, and the usual default exaggerates area toward the poles.CoordinateSystem
ParallelCoordinatesParallel axes for multivariate comparison For multivariate data where relationships BETWEEN axes matter; axis ORDER changes which relationships are visible, so it is part of the analysis.CoordinateSystem
EncodingChannelAbstract visual encoding channel — maps data values to perceptual propertiesYes
PositionEncodingPosition on x/y axes — highest-bandwidth encoding Use it for the most important variable — nothing else is read as precisely.EncodingChannel
SizeEncodingWidth, height, or radius — encodes magnitude Area is systematically UNDER-estimated by readers, so size exaggerates differences unless the scale corrects for it.EncodingChannel
ColorEncodingFill, stroke, or opacity — encodes category or intensity Use a sequential ramp for magnitude and distinct hues for categories — and keep categories under about seven, past which they stop being distinguishable.EncodingChannel
ShapeEncodingPoint shape or dash pattern — encodes category Robust in print and greyscale where colour is not, but slow to read; best for a small number of categories.EncodingChannel
AngleEncodingRotation or arc sweep — encodes proportion Read least accurately of the common channels — acceptable for part-to-whole, poor for comparison.EncodingChannel
TextEncodingLabel content — encodes identity or value States a value exactly instead of encoding it, so it does not scale: a label per datum stops being readable long before the chart does.EncodingChannel
AnalyticalTaskAbstract analytical task — the question a visualization helps answerYes
ComparisonTaskCompare magnitudes across categories (which is bigger?) Favours position and length: bars and dot plots. This is the most common task and the one most often served by the wrong chart.AnalyticalTask
TrendTaskShow change over time (how does it evolve?) Favours a continuous horizontal axis with lines; the aspect ratio materially changes how steep a trend appears, so it is a real choice.AnalyticalTask
DistributionTaskShow spread or frequency of values (how is it distributed?) Favours histograms and box plots. Bin width IS the analysis — the same data tells different stories at different widths.AnalyticalTask
CompositionTaskShow parts of a whole (what proportion?) Favours stacked bars or a treemap; reach for a pie only with very few parts, since angle is read poorly.AnalyticalTask
RelationshipTaskShow correlation between variables (how do they relate?) Favours scatter plots. Beware of implying causation from a visible correlation — the chart cannot distinguish them.AnalyticalTask
SpatialTaskShow geographic distribution (where?) Favours a map, but only when LOCATION is the variable; when it is merely an attribute, a bar chart usually reads better than a map.AnalyticalTask
HierarchyTaskShow nested structure (how is it organized?) Favours treemaps, sunbursts and node-link trees. Treemaps show magnitude well and structure poorly; node-link trees do the reverse.AnalyticalTask
CompositionModeAbstract composition mode — how multiple data series are visually arrangedYes
SingleSeriesOne data series displayed alone The clearest option; add a second series only when the comparison is the point.CompositionMode
StackedSeriesSeries stacked vertically (cumulative) Makes the TOTAL easy to read and every series except the bottom one hard, because only the first shares a baseline.CompositionMode
GroupedSeriesSeries placed side by side for comparison Keeps every series on a common baseline so all are comparable, at the cost of width — it degrades quickly past a handful of groups.CompositionMode
LayeredSeriesSeries overlaid with transparency Preserves each series' own baseline, but overlapping fills obscure one another; best with two or three.CompositionMode
FacetedSeriesSmall multiples — separate panels per series Small multiples: each panel is simple and all share a scale, so comparison is across panels rather than within one. The scale must be shared or the panels lie.CompositionMode
BarChartBar chart — rectangular marks on Cartesian axes for categorical comparisonDataVisualization
LineChartLine chart — connected marks showing trends over a continuous axisDataVisualization
ScatterPlotScatter plot — point marks encoding two quantitative variables as positionDataVisualization
AreaChartArea chart — filled region under a line, showing volume and trendsDataVisualization
HistogramHistogram — binned bar chart showing value distribution Bin width is the analysis, not a display detail — the same data tells different stories at different widths.DataVisualization
BubbleChartBubble chart — scatter plot with size-encoded third variableScatterPlot
PieChartPie chart — arc marks in polar coordinates showing part-to-wholeDataVisualization
HeatmapHeatmap — cell marks with color encoding for matrix data For dense matrices where the pattern matters more than any single cell; the colour scale decides what a reader sees.DataVisualization
StackedBarChartStacked bar chart — bars subdivided by category showing compositionBarChart
DiagramShapeA flowchart, UML or network node — a shape that carries PORTS, so connectors attach to it and keep tracking it when it moves. That attachment is the whole difference from the plain shape of the same outline: choose this whenever anything will be connected to it, and a plain pp:Rectangle or pp:Ellipse when nothing will.Diagram
FlowchartShapeAbstract: shapes in flowchart notation, where the OUTLINE carries the meaning. A reader infers the role from the silhouette before reading a word, so using the wrong shape actively misinforms.DiagramShapeYes
ProcessShapeA rectangle: an action or step that DOES something. The default flowchart node — reach for another shape only when the step is not a plain action.FlowchartShape
DecisionShapeA diamond: a branch point with two or more labelled outgoing edges. The labels are load-bearing — an unlabelled decision tells a reader that a choice happens but not what decides it.FlowchartShape
TerminalShapeA stadium/rounded form: where a process STARTS or ENDS. Conventionally exactly one start; multiple ends are normal and often clearer than funnelling every path together.FlowchartShape
DataShapeA parallelogram: input or output crossing the process boundary. Distinct from pp:DatabaseShape, which is where data RESTS rather than where it moves.FlowchartShape
DocumentShapeA rectangle with a wavy lower edge: a printed or reported artefact produced by the process — something a person receives, rather than data a system stores.FlowchartShape
DatabaseShapeA cylinder: a persistent data store. Signals that state SURVIVES the process, which is the distinction a reader most wants from a diagram.FlowchartShape
PreparationShapeA hexagon: initialisation or setup performed before the main flow — declaring a variable, opening a connection. Separating it keeps the main path readable.FlowchartShape
UMLShapeAbstract: shapes in UML notation, where both the shape AND the connector style are formally defined. Unlike a flowchart, UML meanings are standardised, so a wrong arrowhead states something specific and false.DiagramShapeYes
UMLClassShapeA three-compartment box — name, attributes, operations. The compartments are the notation: collapsing them loses the distinction between what a class HAS and what it DOES.UMLShape
UMLUseCaseShapeAn ellipse: a goal the system fulfils for an actor, named as a verb phrase from the actor's point of view. It describes an outcome, not an implementation step.UMLShape
UMLActorShapeA stick figure: a role OUTSIDE the system that interacts with it — a person, or another system. It marks the boundary of what is being designed.UMLShape
NetworkShapeAbstract: shapes in network-topology notation, where the subject is what CONNECTS to what rather than what happens first.DiagramShapeYes
CloudShapeA cloud outline: a network or service whose internals are deliberately out of scope — the internet, a third party, anything you do not control.NetworkShape
ServerShapeA host that runs something. The concrete counterpart to pp:CloudShape: this is infrastructure you own and can reason about.NetworkShape
ConnectorAn edge between two diagram shapes that re-routes as they move, with configurable `routing` (direct, orthogonal, curved), head and tail arrowheads and an optional label. It binds to PORTS, not coordinates — which is why it survives layout changes and why a plain pp:Line, which does not, is the wrong tool for joining nodes.Diagram
SequenceConnectorA connector carrying CONTROL flow — what happens next. The default flowchart edge; a solid arrow means the process continues along it.Connector
DataConnectorA connector carrying DATA rather than control — what is passed, not what happens next. Drawn distinctly so the two can be told apart at a glance.Connector
AssociationConnectorA plain link between elements with no direction of control or data implied — UML's weakest relationship. Use it when a stronger edge would overstate the coupling.Connector
DependencyConnectorA connector meaning \"a change there may force a change here\". Conventionally dashed, because the coupling is weaker than containment but stronger than an association.Connector
MapRegionA rendered region shape on a map, filled and selectable. Unanchored for the same reason as pp:Marker: the drawn polygon DEPICTS an administrative area, it is not one, and rdfs:subClassOf would say it is.GeoFeature
MarkerA pin drawn on a map at a geographic coordinate. Deliberately UNANCHORED: `anchor` compiles to rdfs:subClassOf, and a marker is a graphical annotation that POINTS AT a place — it is not one. Asserting schema:Place would publish that every marker has an address and real-world coordinates, when what it has is a fill colour and a canvas position.GeoFeature
MaskedItemAn item clipped to a mask shape, existing as a composite of the two. The registry identity follows the COMPOSITE rather than the original, which is why relations pointing at the item keep working after a mask is applied.CanvasElement
ImageA raster bitmap placed from `src` — pixels, not vectors, so it does not scale infinitely and cannot be morphed or path-animated. `crossOrigin` defaults to 'anonymous' so a CORS-friendly host keeps exports untainted; a non-CORS host fails VISIBLY as an empty slot rather than silently tainting every export of the scene.CanvasElementschema:ImageObject
CompoundPathMultiple sub-paths as single item (SVG imports, boolean ops)CanvasShape
UnclassifiedItem type not expressible in current vocabulary. Enables vocabulary gap discovery — count and inspect unclassified items to identify missing types.CanvasElement
DetectedObjectA real-world object detected in an image or video by on-device vision (DETR/YOLO). Registered as an addressable design node so relations (follows, circumscribes, indicates) can bind graphics to it; subclasses alias one-way to a public Wikidata entity.CanvasElementYes
DetectedPersonA human being.DetectedObjectwd:Q5
DetectedBicycleA pedal-driven two-wheeled vehicle.DetectedObjectwd:Q11442
DetectedCarA motorized road vehicle designed to carry a few people rather than goods.DetectedObjectwd:Q1420
DetectedMotorcycleA two- or three-wheeled motor vehicle.DetectedObjectwd:Q34493
DetectedAirplaneA powered fixed-wing aircraft.DetectedObjectwd:Q197
DetectedBusA large road vehicle for carrying passengers.DetectedObjectwd:Q5638
DetectedTrainA connected series of rail vehicles that move along a track.DetectedObjectwd:Q870
DetectedTruckA large commercial or utilitarian motor vehicle for carrying goods.DetectedObjectwd:Q43193
DetectedBoatA small watercraft.DetectedObjectwd:Q35872
DetectedTrafficLightA signalling device that controls competing flows of road traffic.DetectedObjectwd:Q8004
DetectedFireHydrantA street connection point by which firefighters tap into a water supply.DetectedObjectwd:Q634299
DetectedStopSignA traffic sign requiring vehicles to make a complete stop.DetectedObjectwd:Q250429
DetectedParkingMeterA device that collects payment for the right to park a vehicle for a limited time.DetectedObjectwd:Q953960
DetectedBenchA long seat on which several people can sit at once.DetectedObjectwd:Q204776
DetectedBirdA winged, feather-covered, beaked vertebrate animal.DetectedObjectwd:Q5113
DetectedCatA small domesticated carnivorous mammal.DetectedObjectwd:Q146
DetectedDogA domesticated canine animal.DetectedObjectwd:Q144
DetectedHorseA large domesticated four-footed mammal of the equine family.DetectedObjectwd:Q726
DetectedSheepA domesticated ruminant animal bred for meat, wool, and milk.DetectedObjectwd:Q7368
DetectedCowA large domesticated cloven-hooved herbivore (cattle).DetectedObjectwd:Q830
DetectedElephantA very large terrestrial mammal with a trunk and tusks.DetectedObjectwd:Q7378
DetectedBearA large carnivoran mammal of the family Ursidae.DetectedObjectwd:Q30090244
DetectedZebraA black-and-white striped African member of the horse family.DetectedObjectwd:Q32789
DetectedGiraffeA very tall, long-necked African mammal.DetectedObjectwd:Q862089
DetectedBackpackA bag carried on one’s back.DetectedObjectwd:Q5843
DetectedUmbrellaA folding canopy on a frame, used as protection against rain or sun.DetectedObjectwd:Q41607
DetectedHandbagA handled bag used to hold personal items.DetectedObjectwd:Q467505
DetectedTieA necktie — a strip of cloth worn around the neck with a shirt.DetectedObjectwd:Q44416
DetectedSuitcaseA rectangular piece of luggage for carrying clothes and belongings.DetectedObjectwd:Q200814
DetectedFrisbeeA gliding disc thrown and caught for recreation or sport.DetectedObjectwd:Q131689
DetectedSkisLong narrow runners fixed to boots for gliding over snow.DetectedObjectwd:Q172226
DetectedSnowboardA board ridden over snow, with both feet attached.DetectedObjectwd:Q2000617
DetectedSportsBallA round object used in sports or for playing.DetectedObjectwd:Q18545
DetectedKiteA tethered aircraft flown in the wind on a rope or string.DetectedObjectwd:Q42861
DetectedBaseballBatA smooth club used to hit the ball in baseball.DetectedObjectwd:Q809910
DetectedBaseballGloveA large leather glove worn by baseball fielders to catch the ball.DetectedObjectwd:Q809894
DetectedSkateboardA short wheeled board ridden standing up.DetectedObjectwd:Q15783
DetectedSurfboardA long board used to ride ocean waves.DetectedObjectwd:Q457689
DetectedTennisRacketA strung bat used to hit the ball in tennis.DetectedObjectwd:Q153362
DetectedBottleA closable narrow-necked container for liquids.DetectedObjectwd:Q80228
DetectedWineGlassA stemmed drinking glass for wine.DetectedObjectwd:Q1531435
DetectedCupA small open vessel for drinking.DetectedObjectwd:Q81727
DetectedForkAn eating utensil with prongs for spearing food.DetectedObjectwd:Q81881
DetectedKnifeA tool with a cutting blade.DetectedObjectwd:Q32489
DetectedSpoonAn eating utensil with a small shallow bowl on a handle.DetectedObjectwd:Q81895
DetectedBowlA round, open-top container used as tableware.DetectedObjectwd:Q153988
DetectedBananaAn elongated, curved, edible yellow fruit.DetectedObjectwd:Q503
DetectedAppleA round edible fruit of the apple tree.DetectedObjectwd:Q89
DetectedSandwichA dish of fillings held between or wrapped in bread.DetectedObjectwd:Q28803
DetectedOrangeA round citrus fruit of the orange tree.DetectedObjectwd:Q13191
DetectedBroccoliAn edible green vegetable in the cabbage family.DetectedObjectwd:Q47722
DetectedCarrotAn edible orange root vegetable.DetectedObjectwd:Q81
DetectedHotDogA cooked sausage served in a sliced bun.DetectedObjectwd:Q181055
DetectedPizzaA flat dough base baked with toppings.DetectedObjectwd:Q177
DetectedDonutA ring-shaped fried sweet dough (doughnut).DetectedObjectwd:Q192783
DetectedCakeA sweet baked dessert.DetectedObjectwd:Q13276
DetectedChairA single-person seat with a back and legs.DetectedObjectwd:Q15026
DetectedCouchA long upholstered seat for several people (sofa).DetectedObjectwd:Q131514
DetectedPottedPlantA plant grown in a container or pot.DetectedObjectwd:Q27993793
DetectedBedA piece of furniture used for sleeping or resting.DetectedObjectwd:Q42177
DetectedDiningTableA flat-topped piece of furniture on legs, used for dining.DetectedObjectwd:Q14748
DetectedToiletA sanitary fixture for the disposal of human waste.DetectedObjectwd:Q7813355
DetectedTvA television set — a device with a screen for viewing broadcasts.DetectedObjectwd:Q8075
DetectedLaptopA foldable portable personal computer.DetectedObjectwd:Q3962
DetectedMouseA hand-held pointing device for a computer.DetectedObjectwd:Q7987
DetectedRemoteA hand-held device for controlling another device wirelessly.DetectedObjectwd:Q185091
DetectedKeyboardA computer input device with a set of keys.DetectedObjectwd:Q1921606
DetectedCellPhoneA portable mobile telephone.DetectedObjectwd:Q17517
DetectedMicrowaveA microwave oven — a kitchen appliance that heats food with microwaves.DetectedObjectwd:Q127956
DetectedOvenAn enclosed chamber for heating or cooking food.DetectedObjectwd:Q36539
DetectedToasterA small appliance for toasting slices of bread.DetectedObjectwd:Q14890
DetectedSinkA bowl-shaped plumbing fixture for washing.DetectedObjectwd:Q140565
DetectedRefrigeratorAn appliance that preserves food at a low temperature.DetectedObjectwd:Q37828
DetectedBookA bound set of printed or written pages.DetectedObjectwd:Q571
DetectedClockAn instrument that measures and shows the time.DetectedObjectwd:Q376
DetectedVaseAn open container, typically for holding cut flowers.DetectedObjectwd:Q191851
DetectedScissorsA hand-operated cutting tool with two pivoted blades.DetectedObjectwd:Q40847
DetectedTeddyBearA soft stuffed toy in the shape of a bear.DetectedObjectwd:Q213477
DetectedHairDrierAn electrical appliance that blows warm air to dry hair.DetectedObjectwd:Q15004
DetectedToothbrushA small brush for cleaning the teeth.DetectedObjectwd:Q134205

Object Properties (Relations)

NameDescriptionCategoryBehaviorParentParameters
RelationAbstract root of the behaviour graph. A relation is a live rule evaluated per frame or on an event, not a stored value — which is why changing one param changes the motion without re-authoring anything.abstract
SpatialRelationAbstract: relations that write POSITION. The source is moved by the rule each frame, so any position keyframe on the same item fights it — one owner per channel.abstractRelation
TransformRelationAbstract: relations that write ROTATION or SCALE rather than position, so they compose with a spatial relation on the same item instead of fighting it.abstractRelation
AnimationRelationAbstract: relations driven by TIME — they read the scene clock, so they scrub with the timeline and bake into exports.abstractRelation
ProceduralRelationAbstract: relations computed from a function or expression rather than from another item, so they need no target and are deterministic from a seed.abstractRelation
containsStructural: the target is a child of the source, so it inherits the parent's transform, opacity and blend unit. Containment comes from the scene tree rather than from an authored relation, which is why removing the parent removes the child.structural
maskedByStructural: the source is clipped to the target's outline — only the region inside the mask shape is drawn. The mask itself is not rendered, and the pair becomes one composite whose registry identity follows the composite, not the original.structural
onTopOfSource bottom edge sits on target top edge. Use for stacking (a cocktail on a bar). Params: gap, align (left/center/right), overhang.structuralconstraintSpatialRelation
belowSource top edge sits on target bottom edge (mirror of on_top_of). Params: gap, align, overhang.structuralconstraintSpatialRelation
besideSource is placed to the left or right of the target. Params: side (left/right), gap, align (top/center/bottom).structuralconstraintSpatialRelation
insideSource is placed inside the target bounds at a 9-way anchor. Places (contrast contained_in_place, which clamps a moving item). Params: anchor, padding.structuralconstraintSpatialRelation
centeredOnSource center = target center + offset. Concentric when offset is 0 (use for concentric rings). Params: offsetX, offsetY.structuralconstraintSpatialRelation
alignedWithOne axis (x or y) of the source center matches the target center; the other axis stays free (partial write). Params: axis (required), offset.structuralconstraintSpatialRelation
orbitsSource revolves around target at a fixed radius. Use for celestial mechanics, satellites, rotating-around-X relationships. Spatial params (radius) accept canvas-relative units (e.g. '30vmin' = 30% of min(canvasW,canvasH)) so the scene adapts to any size/aspect.spatialconstraintSpatialRelation
followsSmooth pursuit with lag — source asymptotically approaches target. Use for trailing, delay, easing motion. Contrast: attached_to is rigid (zero lag).spatialconstraintSpatialRelation
attachedToRigid parent-child transform — source moves with target instantly via fixed offset. Zero-lag variant of follows. Use for labels, attachments, child objects.spatialconstraintSpatialRelation
maintainsDistanceSource stays at a fixed distance from target as either moves. Use for tethering, leash dynamics, fixed-spacing groups.spatialconstraintSpatialRelation
pointsAtSource rotates to always face target. Use for compass needles, gun turrets, gaze direction, arrows tracking a target.transformconstraintTransformRelation
mirrorsSource's transform mirrors target across an axis. Use for reflections, symmetry, mirrored character poses.transformconstraintTransformRelation
parallaxSource moves at a depth-scaled fraction of target's motion. Use for background layers, parallax scrolling, depth illusion.spatialconstraintSpatialRelation
boundsToSource's position is clamped within target's bounds. Use for keeping characters inside a frame or viewport-bounded motion.spatialconstraintSpatialRelation
growsFromSource scales up from zero starting at target's position. Use for spawn-from-point effects, ripple-into-being entrances.animationtriggerTransformRelation
staggeredWithStored as pairwise edges with index param to reconstruct group ordering. Conceptually 1→N but decomposed into binary pairs.animationtriggerAnimationRelation
waveThroughStored as pairwise edges with index param for phase offset. Conceptually 1→N but decomposed into binary pairs.animationconstraintAnimationRelation
morphsToSource's path interpolates into target's path over time. Use for shape morphing, geometry transitions.animationtriggerAnimationRelation
groupMorphsToSource paper.Group's children migrate into target Group's children's positions, paired by index. Path.Line children deform via segment endpoints; other items translate. Excess children fade. Generic across any two groups.animationtriggerAnimationRelation
movesAlongPathItem position is driven along a user-supplied path stored as params. Self-relation; named easing curves (linear / easeIn / easeOut / easeInOut / sine / bounce / pingpong).animationproceduralProceduralRelation
circumscribesSource's bounds scale to fully enclose target. Use for halo highlights, selection rings, labels framing content.animationtriggerTransformRelation
isMidpointOfSource is held at the midpoint of the target and params.other (a second anchor). Live: drag either anchor and the source follows.spatialconstraintSpatialRelation
liesOnLineSource is constrained to the line through the target and params.other, at fraction params.t along it (0=target, 1=other).spatialconstraintSpatialRelation
isCentroidOfSource is held at the centroid (average position) of the target and params.others (more anchor ids).spatialconstraintSpatialRelation
isCircumcenterOfSource is held at the circumcenter of the triangle target, params.other1, params.other2 (inactive when the three are collinear).spatialconstraintSpatialRelation
concentricWithSource's center is held on the target's center (shared center / concentric).spatialconstraintSpatialRelation
constructionRevealSelf-relation: source fades in (opacity 0→1) starting at params.revealAt over params.fadeIn seconds, driven by the timeline (playbackTime). Used by pp:ConstructionSequence to play a construction back one step at a time.animationproceduralProceduralRelation
indicatesTemporary emphasis effect. mathematically: pulseScale on source triggered by target reference.animationtriggerAnimationRelation
drivenBySource property linearly maps from a target property. Use for parameter linking, slaved values, reactive controls.proceduralproceduralProceduralRelation
wiggleSource position / rotation jitters via noise-driven offset. Use for hand-drawn liveliness, idle motion, organic shake.proceduralproceduralProceduralRelation
timeExpressionSource property evaluates a math expression of time each frame. Use for custom oscillations, formula-driven motion.proceduralproceduralProceduralRelation
cameraFollowsCamera viewport tracks target's position with smooth pursuit. Use for cinematic follow shots, subject-lock cameras.cameraconstraintSpatialRelation
cameraAnimatesCamera viewport interpolates between keyframed positions. Use for choreographed pans / zooms, fly-throughs, scripted shots.cameratriggerAnimationRelation
boneAttachedSource canvas item rides a skeleton bone — inherits its transform. Use for character props, weapons, accessories on a rig.riggingconstraintSpatialRelation
boneSkinnedSource path is skinned to a skeleton — each vertex deforms by linear blend of nearby bones' transforms. Contrast with attached_to (rigid follow) and bone_attached (inherits one bone's transform): this is per-vertex deformation enabling cloth, capes, soft-tissue. Stored as one self-edge per skinned path; the per-vertex weights live on the path's segments.riggingconstraintSpatialRelation
ikTargetTarget item is the end-effector goal for an IK chain on source skeleton. Use for hand-reaches-cup, foot-lock, gaze-to-target.riggingconstraintSpatialRelation
blendReactsToSource blend mode changes when target enters proximity / state. Use for collision-triggered visuals, reactive composition.blendingproceduralProceduralRelation
blendTransitionSource cycles through blend modes on a timed loop. Use for animated mood shifts, rhythmic visual changes.blendingproceduralProceduralRelation
partOfSource is a named sub-element of target (e.g. eye_left part_of face). Use for compound items and named sub-element addressing.riggingconstraintSpatialRelation
expressesSource plays a named expression preset (smile, blink, surprise) driving its part_of children. Use for facial animation, character emotion.riggingproceduralProceduralRelation
EffectRelationAbstract: particle effects attached to an item — sparkle, smoke, fire and the rest. The particles are system-owned visuals, not registry items, so they never appear in a selection or an item query.abstractProceduralRelation
effectSparkleTwinkling particles cascade from the item. Use for celebration, magic, attention-draw moments.effectproceduralEffectRelation
effectBlastOutward radial burst of particles emits once. Use for impacts, explosions, energy release.effectproceduralEffectRelation
effectSmokeRising smoke trail emanates from the item. Use for damage, weight, atmosphere.effectproceduralEffectRelation
effectFireAnimated flame emerges from the item. Use for heat, burning, energy.effectproceduralEffectRelation
effectRainFalling raindrops cover the canvas area. Use for weather scenes, melancholy mood.effectproceduralEffectRelation
effectSnowFalling snowflakes drift across the canvas area. Use for winter scenes, peaceful slow motion.effectproceduralEffectRelation
effectConfettiColored streamers fall from above. Use for celebrations, accomplishments, party scenes.effectproceduralEffectRelation
effectRippleConcentric expanding rings emanate from the item. Use for water-drop, shockwave hint, attention pulse.effectproceduralEffectRelation
effectGlowSoft luminous halo surrounds the item. Use for highlighting, importance, magical quality.effectproceduralEffectRelation
effectElectricCrackling electric arcs jump around the item. Use for energy, danger, sci-fi power.effectproceduralEffectRelation
effectBubblesRising bubbles emerge from the item. Use for underwater, liquid, light-hearted scenes.effectproceduralEffectRelation
effectDustSlowly drifting dust motes fill the area. Use for old / abandoned moods, sunbeam visualizations.effectproceduralEffectRelation
effectFirefliesSlow-blinking glowing particles drift around the item. Use for magical night scenes, romantic ambiance.effectproceduralEffectRelation
effectShockwaveSingle explosive ring expands outward from the item once. Use for impact moments, dramatic emphasis.effectproceduralEffectRelation
effectTrailParticle trail follows the item as it moves. Use for motion blur, speed lines, comet tails.effectproceduralEffectRelation
ShaderEffectRelationAbstract shader-rendered effect relation (silhouette-clipped GPU shader)abstractEffectRelation
anchoredInWorldA 2D item tracks a point in a 3D world (pp:World3D), projected onto the canvas — labels, markers and callouts that follow a character or a place as the camera moves. Use to caption, annotate or attach UI to 3D content.spatialprojectiveSpatialRelation
effectHeatmapAnimated thermal-color noise fills the item's silhouette. Use for temperature visualization, dramatic glow, abstract energy. APPLIED WITH applyEffect(item, 'heatmap'), NOT addRelation: unlike the particle effects beside it this is a shader aura owned by ItemAuraSystem and persisted on item.data.aura, so no effect_heatmap rule is registered and addRelation would no-op silently.effectproceduralShaderEffectRelation
effectLiquidMetalReflective chrome-flow shader stylizes the item with banded highlights. Use for metallic logos, sci-fi aesthetic, polish. APPLIED WITH applyEffect(item, 'liquid_metal'), NOT addRelation: unlike the particle effects beside it this is a shader aura owned by ItemAuraSystem and persisted on item.data.aura, so no effect_liquid_metal rule is registered and addRelation would no-op silently.effectproceduralShaderEffectRelation
effectGemSmokeVolumetric curling smoke wreath encircles the item silhouette. Use for ornate emphasis, ritual or magical contexts. APPLIED WITH applyEffect(item, 'gem_smoke'), NOT addRelation: unlike the particle effects beside it this is a shader aura owned by ItemAuraSystem and persisted on item.data.aura, so no effect_gem_smoke rule is registered and addRelation would no-op silently.effectproceduralShaderEffectRelation
effectInkBleedFluid ink dispersion and paper-grain capillary bleed shader. Use for sketches, watercolor bleed, calligraphy and fluid dynamic art. APPLIED WITH applyEffect(item, 'ink_bleed'), NOT addRelation: owned by ItemAuraSystem and persisted on item.data.aura.effectproceduralShaderEffectRelation
AuraModeAura composite mode enumeration (silhouette clipping strategy)abstractConcept
ShaderStageWhich stage of the rendering pipeline a shader program occupies. The stages are not interchangeable and not equally open: only pp:shaderStageItem accepts an author-supplied shader today, and a definition naming a closed stage is refused with the reason rather than silently applied as something else.abstractConcept
AnimationCurveAnimation channel curve enumeration (transforms raw time into shader uniform)abstractConcept
DesignRegisterA design language — the idiom a composition speaks. Sets the budget for distinct hues and decorative elements, the type-scale ratio, spacing proportions, alignment discipline and motion policy, so those move together instead of being chosen one at a time. A CHOICE, never a ranking.abstractConcept
DesignLevelCraft level WITHIN a register — how well the chosen design language is executed, from accepted defaults to art direction. Applied as proportional modifiers, so a level means the same thing in every register and leaves each recognisably itself. Climbing never widens a budget: restraint is the direction of craft.abstractConcept
DesignMediumWhat makes the marks — the mark-maker, not the style. A medium is a set of physical constraints that produce characteristic marks: thread looks the way it does because a needle lays a directional stitch of finite length with sheen, overlapping its neighbours. Every medium declares a pp:MediumFidelity, because a vector engine can genuinely make some of these marks and can only impersonate others.abstractConcept
MediumFidelityHow faithfully a VECTOR engine can render a medium. Exists so the engine can never quietly claim a medium it cannot make: the honest answer for half of them is \"an impression, not the medium\", and collapsing that to a boolean is how a tool ends up claiming to paint in oils.abstractConcept
StitchKindA kind of embroidery stitch — the mark of the thread medium. Each is a short oriented segment with a taper and a sheen, which is what makes thread native to a vector engine rather than approximated by one.abstractConcept
MotionAnything that makes a rig move over time, as distinct from the structure that can be moved. A pose is a snapshot; a motion is a function of scene time.abstractConcept
ProceduralMotionMotion generated from a rule rather than authored key by key. One call produces a layer that keeps running — the reason a character can idle or breathe without anyone keyframing it.abstractMotion
ExpressionA named facial state driven through part_of roles rather than through bones — blink, smile, frown, surprise. Works on any character whose parts carry the standard role tokens, with no skeleton required.abstractMotion
PoseSequenceKeyed poses over scene time, each naming a saved pose or an inline bone-angle map. Sampled as a pure function of playbackTime, so it scrubs, pauses and bakes. ONE per skeleton: starting another replaces it, which is why joining clips is a planning problem rather than a second playback slot.motionMotion
MotionClipOne bounded span of motion offered for joining — a walk cycle, a jump, a held idle. Carries how it joins as well as what it plays: whether it is cyclic (and so can be entered at any phase), how many times it repeats, and how long its seam should be.motionMotion
MotionSeamThe join between two clips: an overlap in which both are sampled and cross-faded per bone. Reports the angular mismatch it could NOT remove, in degrees — near zero is a real match, a large number means the blend is hiding a cut. That figure is the difference between a transition and an edit, and it is measurable rather than a matter of taste.motionMotion
PoseBlendA pose part way between two others, interpolated per bone along the SHORTEST arc. Going the long way round turns a 20° step across ±180 into a 340° swing, which reads as a limb rotating backwards rather than as a blend.motionMotion
PoseLayerAn additive motion layer over whatever pose is current, cycling its own pose list on its own clock. Layers compose, which is what lets a breath run underneath a walk instead of replacing it.motionMotion
GaitCycleA looping limb pattern — the walk or run cycle itself, as a set of named poses (walk_00…, walk_contact_L, walk_passing_L) rather than a formula. Because it is a cycle, it can be entered at any phase, which is what makes joining it to another motion tractable.motionMotion
LocomotionTrackRoot translation across the world over SCENE SECONDS — what makes a figure travel rather than march on the spot. Sampled deterministically rather than integrated per frame, so it scrubs and exports; keyed on the same clock as the pose sequence, so a track shorter than the performance lands the figure early and leaves it standing.motionMotion
SecondaryMotionSpring-driven follow-through on a chain of bones — a tail, hair, cloth — that lags the motion driving it. Not decoration: the lag is what makes a rig read as having mass rather than as a diagram of one.motionMotion
BakedAnimationA rig sampled frame by frame into plain item keyframes, so motion that only a skeleton could produce survives into formats that have no concept of one. Writes onto the ATTACHED items — a skeleton with nothing bound to it bakes to nothing.motionMotion
MotionCaptureRecorded motion driving a rig — a BVH clip, a Spine export, or live landmarks from a camera. Retargeting maps it by bone NAME, so the names are the contract; root translation is kept as a separate track rather than baked into the poses, because a walk whose root motion was dropped is a march on the spot.motionMotion
motionWalkA walk cycle played from saved walk poses. A pose PLAYER, not a generator: it needs at least two poses named walk_00… or walk_contact_L…, which is exactly what the humanoid and quadruped libraries save.enumProceduralMotion
motionIdleA small continuous shift so a character at rest is not a still image. Finds its bones by NAME — head, hip, upper_hub, spine — and declines on a rig that uses others.enumProceduralMotion
motionBreathA slow rise and fall through the spine. Finds spine, chest, upper_spine or body by name, and is the cheapest single thing that makes a rig look alive.enumProceduralMotion
motionJumpA parabolic root arc with an impact compression at the landing, cleaning itself up afterwards. Combines a pose layer with root physics, which is why it reads as weight rather than as a translation.enumProceduralMotion
expressionBlinkEyes close and reopen, periodically. Scales the eye_* roles and hides the pupil_* ones — which is why an imported layer set maps its iris to pupil rather than to a pupil-shaped name.enumExpression
expressionSmileThe mouth role curves upward and the eyes narrow slightly. Sustained rather than periodic.enumExpression
expressionFrownThe mouth role curves down and the brows draw in. Sustained.enumExpression
expressionSurpriseEyes widen and the mouth opens. Sustained, and the one preset where the eye roles grow rather than shrink.enumExpression
DeformRelationAbstract: vertex-level deformations that move a path's actual segments and bezier handles, rather than applying a transform to the whole item.abstractProceduralRelation
deformFoldItem creases along a fold line and lays flat. Use for paper-fold animations, panel reveals.deformproceduralDeformRelation
deformSqueezeItem pinches inward symmetrically. Use for cartoon expression, compression visuals.deformproceduralDeformRelation
deformSquashItem flattens vertically and stretches horizontally (area-preserving). Use for bounce-landing impact, weight.deformproceduralDeformRelation
deformPinchItem draws toward a central point. Use for vacuum-up, focus pull, gravity well.deformproceduralDeformRelation
deformBulgeItem bows outward from center. Use for inflation, swelling, expansion.deformproceduralDeformRelation
deformTwistItem rotates progressively along an axis. Use for whirlpool, candy-cane, screw motion.deformproceduralDeformRelation
deformRippleItem's surface ripples with concentric waves. Use for water disturbance, energy pulse on shape.deformproceduralDeformRelation
deformWaveItem undulates with a traveling sine wave. Use for flag-waving, fabric, liquid surface.deformproceduralDeformRelation
deformBreatheItem rhythmically scales in and out. Use for living / idle motion, organic presence.deformproceduralDeformRelation
deformMeltItem droops downward as if liquefying. Use for dissolution, dali-esque scenes, decay.deformproceduralDeformRelation
deformShearItem slants progressively along one axis. Use for italic-like lean, motion shear, gravity drag.deformproceduralDeformRelation
deformInflateItem swells uniformly outward. Use for balloon, pre-pop state, growth.deformproceduralDeformRelation
deformWobbleItem jiggles asymmetrically like jelly. Use for playful, liquid, unstable motion.deformproceduralDeformRelation
deformFluidBleedItem vertices diffuse outward into capillary paper-grain fibers like wet ink. Use for sketch art, watercolor bleeding, and fluid dispersion.deformproceduralDeformRelation
ImageFilterAbstract per-item GPU image filter applied once to a Raster (not animated)abstractConcept
DiagramFlowRelationAbstract: connector semantics in a diagram notation. The subtype is what the EDGE MEANS — control flow, data flow, association, dependency — and it selects the arrowhead and line style that notation expects.abstractRelation
sequenceFlowControl flow between diagram shapes — \"this step, then that one\". The default flowchart edge; in BPMN and flowchart notation a solid arrow means the process CONTINUES here, which is what distinguishes it from pp:dataFlow.diagramDiagramFlowRelation
dataFlowData moving between diagram shapes rather than control — what is PASSED, not what happens next. Drawn distinctly from pp:sequenceFlow precisely so a reader can tell the two apart at a glance.diagramDiagramFlowRelation
associationA plain structural link between diagram elements, with no direction of control or data implied. In UML this is the weakest relationship — reach for it when the stronger meanings of pp:dependency or pp:sequenceFlow would overstate the link.diagramDiagramFlowRelation
dependencyOne diagram element requires another: a change to the target may force a change to the source. Conventionally drawn dashed, because the coupling is weaker than containment but stronger than a plain association.diagramDiagramFlowRelation
connectsToA generic connection between diagram shapes when no notation-specific meaning applies. Prefer a specific subtype where one fits — the specific edge carries meaning into the exported graph, this one carries only adjacency.diagramDiagramFlowRelation
EventRelationAbstract event-channel relation — edge-triggered, frame-coherent dispatchabstractedgeTriggeredRelation
onClickFireSource item pulses target pp:Event on click. The producer half of the event channel: it names a pp:Event rather than doing anything itself, so any number of reactions can listen to one click without the click knowing about them.eventedgeTriggeredEventRelation
onPointerEnterFireSource pulses target pp:Event when pointer enters its bounds.eventedgeTriggeredEventRelation
onPointerExitFireSource pulses target pp:Event when pointer leaves its bounds.eventedgeTriggeredEventRelation
onKeyFireSource pulses target pp:Event when a key matches and the source has focus (or globally if params.global). Params: { key, modifiers?, global?, preventDefault? }. WCAG 2.2 keyboard-operability primitive.eventedgeTriggeredEventRelation
onEventSetPropertyOn pp:Event pulse, set target.[property] = value. The general reaction — reach for a specific one (visibility, colour, data) where it fits, since the specific edge says what the interaction MEANS in the exported graph.eventedgeTriggeredEventRelation
onEventSetVisibilityOn pp:Event pulse, set target.visible. The show/hide half of every tab, accordion and disclosure; pair with pp:exclusiveGroup when only one panel may be open.eventedgeTriggeredEventRelation
onEventSetColorOn pp:Event pulse, set target.fillColor or .strokeColor. For selection and hover feedback. Colour is the cheapest state indicator that does not move anything, so it never disturbs layout.eventedgeTriggeredEventRelation
onEventSetDataOn pp:Event pulse, set target.data[property] = value. Writes to the item's data rather than its appearance — how a scene keeps state (a score, a mode, a flag) that other relations can then read.eventedgeTriggeredEventRelation
onEventIncrementOn pp:Event pulse, increment target.data[property] by N. Counters and steppers. Increment rather than set, so several sources can advance the same value without knowing its current one.eventedgeTriggeredEventRelation
onEventToggleOn pp:Event pulse, flip target.visible or target.data[property].eventedgeTriggeredEventRelation
onEventSetActiveOn pp:Event pulse, activate target in its exclusive_group (clears siblings).eventedgeTriggeredEventRelation
onEventFireAfterOn pp:Event pulse, schedule a target pp:Event pulse N ms later. Params: { delay: ms, timeline?: \"wall\" | \"canvas\" }. Default \"wall\" uses setTimeout (real-time). \"canvas\" schedules against app.playbackTime — pauses with timeline pause, seeks with timeline seek, loops with the canvas timeline. Use canvas mode when timing is animation-relative (state changes at t=2s of an animation); use wall mode for real-time effects (cleanup after 2 real seconds).eventedgeTriggeredEventRelation
onEventSetPropertyFromTemplateOn pp:Event pulse, write target.[property] with a template-interpolated string. `template` contains `{key}` tokens; each is replaced with the stringified value of target.data[key] (default) or target[key] (when `source: \"item\"`). Missing keys resolve to \"\". Pairs with on_event_increment / on_event_set_data on the same channel to drive counters, formatted readouts, status lines, and debug HUDs — anything where the target text is derived from runtime state. Params: { property, template, source?: \"data\" | \"item\" }.eventedgeTriggeredEventRelation
onEventAddRelationMeta-relation — the graph modifies itself. On pp:Event pulse, app.addRelation(target, params.target, params.type, params.params). Use to attach effects, springs, or any relation in response to an event.eventedgeTriggeredEventRelation
onEventRemoveRelationMeta-relation — the graph modifies itself. On pp:Event pulse, app.removeRelation(target, params.target, params.type). Inverse of onEventAddRelation, used for cleanup chains.eventedgeTriggeredEventRelation
exclusiveGroupTwo items belong to the same exclusive group — at most one is active at a time. Activating one via setActive() deactivates siblings and pulses :enter/:exit events.eventedgeTriggeredEventRelation
onEnterSetPropertyWhen source becomes the active member of its exclusive_group, set target.[property] = value.eventedgeTriggeredEventRelation
onEnterSetVisibilityWhen source activates in its group, set target.visible. The enter half of a mutex: it fires when the source BECOMES active in its exclusive group, which is what makes a tab reveal its own panel without every tab knowing about every panel.eventedgeTriggeredEventRelation
onExitSetPropertyWhen source stops being the active member of its exclusive_group, set target.[property] = value.eventedgeTriggeredEventRelation
onExitSetVisibilityWhen source deactivates in its group, set target.visible. The exit half, firing as the source LOSES active status — what hides the outgoing panel. Without it a tab set reveals panels and never hides them.eventedgeTriggeredEventRelation
menubarGroupTwo items share a menubar group — together they form a horizontal action bar (toolbar / app menu). The A11yShadowTree matcher promotes to role=\"menubar\" + menuitem with horizontal arrow-key nav. Unlike exclusive_group, no item is \"active\"; clicking a menuitem fires its own on_click_fire reactions.eventedgeTriggeredEventRelation
unknownRelationRelation type not expressible in current vocabulary. Enables vocabulary gap discovery — count and inspect unknown relations to identify missing edge types.unknownRelation
onEventStoreSetOn a pp:Event pulse, write `key = value` into a pp:Store. The persistent counterpart of pp:onEventSetData, which only reaches item.data and dies with the page.eventRelation
onEventStoreIncrementOn a pp:Event pulse, add N to a stored numeric key, creating it at 0 if absent. Increment rather than set, so several sources can advance one score without any of them knowing its current value.eventRelation
restoresFromAt LOAD, once, before the first frame, set a property on this item from a stored key — with a fallback when the key is absent. The read half of persistence: without it a store is write-only and continuity across sessions, the entire point, does not exist.eventRelation
springFollowSource follows target with spring dynamics — it lags behind, overshoots and settles rather than tracking rigidly. Params: stiffness (0-1), damping (0-1, higher settles sooner), mass, maxDisplacement in pixels. Use for secondary motion: hair, tails, cloth, anything that should feel attached rather than welded.animationAnimationRelation
composedAsANNOTATION: this item is the root of a composition built from a named pattern. Carries the pattern key. Inert — it moves nothing; it records WHAT the arrangement is so the composition can be recognised, re-applied or queried later.annotationRelation
fillsSlotANNOTATION: this item occupies slot N of a composition, by 0-based index. Together with pp:composedAs it is what lets a layout be re-run or re-targeted without re-deriving which item went where.annotationRelation
hasCameraTreatmentANNOTATION: how this composition should be FILMED — a treatment key such as a sheet reveal. Records intent for the camera rather than moving it, so the treatment survives a re-layout.annotationRelation
syncedToAudioANNOTATION: this composition is timed to an audio track, carrying the source asset, the detected bpm and the onset times in seconds. The beats live on the EDGE so they survive save/restore and can be queried, rather than in a local variable.annotationRelation
hasTextEffectANNOTATION: this glyph is the ROOT of a character-level text effect, and carries what the effect was built FROM — effect key, original content, font size, family, origin, duration and seed. That spec lives on the edge precisely so the effect can be changed or undone without retyping the text.annotationRelation
glyphOfANNOTATION: this character belongs to a text-effect composition, by 0-based index, pointing back at the root glyph. Membership exists ONLY on this edge — the characters are siblings, not children of a group — which is what lets the composition be selected, re-targeted or removed as one unit.annotationRelation

Datatype Properties

NameDescriptionTypeUnitAnimatable
xHorizontal position of the item's CENTRE in canvas pixels. The canvas origin is top-left, so x grows rightward.numberpxYes
yVertical position of the item's CENTRE in canvas pixels. +y points DOWN — the screen convention, not the mathematical one, so a larger y is lower on the canvas.numberpxYes
widthOverall width in canvas pixels. On a ROTATED item this is applied by straightening the item, scaling in its own frame and re-rotating — scaling the rotated bounding box directly would shear the geometry.numberpxYes
heightOverall height in canvas pixels, applied in the item's own frame on a rotated item for the same reason as pp:width.numberpxYes
visibleWhether the item is drawn at all. Unlike pp:opacity 0, a hidden item is removed from the picture entirely — and note that rasterizing a hidden item yields a BLANK image rather than an error.booleanYes
radius1A star's OUTER radius in canvas pixels — the distance from centre to point.numberpxYes
radius2A star's INNER radius in canvas pixels — the distance from centre to the valley between points. The ratio to pp:radius1 is what makes a star read as sharp or as a flower.numberpxYes
radiusRadius in canvas pixels, from the centre. Defines a Circle outright; on a Star it is the OUTER radius (pp:radius1/radius2 set both), and on an Arc it is the curvature.numberpxYes
rotationRotation in degrees, clockwise. CAUTION: creating an item with a rotation BAKES it into the geometry, after which the item reports a rotation of 0 — so a later absolute write re-rotates and renders at twice the angle. Write through setAbsoluteRotation, which subtracts the baked part; only axis-aligned angles hide the error.numberdegYes
scaleUniform size multiplier where 1 is the item's natural size. On a GROUP a keyframed scale is relative to the captured baseline; on a plain item it is ABSOLUTE, so registering an already-fitted item snaps it back to natural size on the first frame.numberYes
scaleXHorizontal size multiplier, 1 = natural. Setting it independently of pp:scaleY on a rotated item shears unless the rotation is unbaked first, because scale is conjugated by the decomposed matrix rotation only.numberYes
scaleYVertical size multiplier, 1 = natural. Same rotated-item caveat as pp:scaleX.numberYes
opacityTransparency from 0 (invisible) to 1 (opaque). An item at opacity 0 still occupies the graph, still hit-tests and still exports — use pp:visible to remove it from the picture entirely.numberYes
fillColorInterior paint. A solid colour, or a GRADIENT — {type: \"linear\"|\"radial\", angle: , stops: [{color, offset?}, …]} with two or more stops; offsets are optional and spread evenly.colorYes
strokeColorOutline paint. A solid colour or a GRADIENT — the same {type, angle, stops} form pp:fillColor accepts. An item with a stroke colour and no pp:strokeWidth draws nothing.colorYes
shadowColorDrop-shadow colour. Has no effect without a pp:shadowBlur or a non-zero offset, since a shadow with neither is exactly behind the item.colorYes
strokeWidthOutline thickness in canvas pixels. Animatable, which is what makes a stroke able to swell or thin over time; 0 removes the outline without clearing pp:strokeColor.numberpxYes
strokeCapHow an OPEN path ends: butt (flush), round, or square (extends half the stroke width past the end). Invisible on a closed shape, which has no ends.enum
strokeJoinHow two stroke segments meet at a corner: miter (sharp), round, or bevel (flattened). Miter is the default and spikes dramatically at very acute angles.enum
dashArrayDash pattern as alternating on/off lengths in canvas pixels, e.g. [8, 4]. For a draw-on reveal prefer pp:trimEnd, which animates the path itself rather than a dash phase.arraypxYes
shadowBlurShadow softness radius in canvas pixels. 0 gives a hard-edged copy of the silhouette; the blur costs fill rate, so a large radius on many animated items is the expensive case.numberpxYes
shadowOffsetXHorizontal shadow displacement in canvas pixels. With pp:shadowOffsetY it sets the implied light direction — keep it consistent across a scene or the lighting reads as broken.numberpxYes
shadowOffsetYVertical shadow displacement in canvas pixels; positive is DOWN, matching pp:y.numberpxYes
fontSizeAuthored type size in canvas pixels. The RENDERED size is fontSize × the item's scaling, because dragging a resize handle changes scaling and leaves fontSize alone — so reading fontSize on a resized headline reports the original, not what is on screen.numberpxYes
fontFamilyFont family name, resolved against the fonts available to the page. A family that is not present falls back silently, which changes metrics and therefore layout — not just appearance.string
fontWeightFont weight — a keyword ('normal', 'bold') or a numeric string ('600'). A weight the family does not ship is synthesised or ignored depending on the browser.string
textAlignHorizontal alignment of the text relative to its own position point: left, center or right. This moves the text ABOUT its anchor; it does not move the anchor.enum
contentThe characters displayed. Animatable, which is what a typewriter reveal keyframes — and changing it re-measures the item, so bounds-dependent work (masks, layout) must run after, not before.stringYes
blendModeHow the item composites against what is behind it — multiply and darken to deepen, screen and lighten to lift, overlay and soft-light for contrast. On an animated item it combines expensively with a shadow, which the engine decomposes automatically into a shadow twin.enumYes
routingThe path a connector takes between two shapes: direct (straight), orthogonal (right-angled, for flowcharts) or curved. Routing is recomputed as the shapes move, so it is a rule rather than a stored geometry.enum
lineStyleConnector stroke pattern: solid, dashed or dotted. Convention in most diagram notations is that dashed means a weaker or optional relationship — the style carries meaning, not just appearance.enum
headStyleArrowhead at the connector's TARGET end: classic, stealth, sharp, open, diamond, circle, or none. In UML the head is what distinguishes association from inheritance from composition.enum
tailStyleMarker at the connector's SOURCE end, from the same set as pp:headStyle. Defaults to none; a tail marker is what makes a relation read as bidirectional or as composition.enum
connectorLabelText placed on the connector, positioned along the route and re-placed when the route changes. Prefer it to a free-floating text item, which will not follow the edge.string
shapeCategoryWhich notation the shape belongs to: flowchart, uml, network or basic. It selects the shape's default ports and styling, so it determines where connectors attach.enum
closedWhether path forms a closed region. Determines ontological subtype (OpenPath vs ClosedPath).boolean
curveTypeMathematical function family governing segment interpolation. The functional representation that defines the path.enum
segmentCountNumber of anchor points defining the path. Read-only in practice — it is a consequence of the geometry, and the way to change it is to change the path.number
trimStartWhere the visible portion of a path BEGINS, as a fraction from 0 to 1 of its length. With pp:trimEnd it produces the line-draw effect; animating start and end together sweeps a segment along the path.numberYes
trimEndWhere the visible portion of a path ENDS, 0 to 1. Keyframing it from 0 to 1 is the canonical draw-on reveal, and unlike a dash pattern it follows the path's own arc length.numberYes
trimOffsetRotates the trimmed window along the path, 0 to 1, without changing its length. On a closed path this makes the visible segment travel around the outline continuously.numberYes
pitchFundamental pitch — a note name (\"A4\", \"C#3\") or a base frequency in Hz.stringYes
chordKindRenowned chord pattern; expands to frequency partials over the root.enum
timbreWaveform → the additive harmonic partial set that gives the voice its color.enum
envelopeADSR amplitude contour [attack, decay, sustain, release] as a keyframe signal over [t0,t1].arrays
gainOutput level for the voice, 0 (silent) to 1. Clamped, so summing several voices at full gain does not clip the master — it just stops getting louder.numberYes
panStereo position from -1 (fully left) through 0 (centre) to +1 (fully right).numberYes
soundWindow[t0, t1] — when the sound plays on the timeline. Also fireable via an event relation (on_click_fire → play).arrays
detailedAcousticHandle to a sibling ppa: deep-synthesis descriptor (FM index curves, HRTF, resonance leak coefficients). Author-facing fields stay on pp:; the deep surface lives in ppa: (deferred).string

Math Functions

Mathematical primitives used in animation drivers, relation solvers, and generator physics. Each entry serializes as a pp:MathFunction in the TTL.

NameCategoryFormula
lerpinterpolationa + (b-a)*t
cubicBezierinterpolation(1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃
catmullRominterpolationCatmull-Rom spline through control points
easeIneasing
easeOuteasing1-(1-t)²
easeInOuteasingt<0.5 ? 2t² : 1-(-2t+2)²/2
easeInCubiceasing
easeOutCubiceasing1-(1-t)³
bounceeasingPiecewise parabolas
elasticeasing2^(-10t)·sin((10t-0.75)·c₄)+1
customCubicBeziereasingcubic-bezier(x1,y1,x2,y2)
sinOscillationtrigonometriccenter + amplitude·sin(ω·t + φ)
sinCostrigonometricsin(θ), cos(θ)
phaseOffsetSinusoidtrigonometricA·sin(ω·t - i·φ)
parametricCircleparametricx=r·cos(θ), y=r·sin(θ)
parametricEllipseparametricx=rx·cos(θ), y=ry·sin(θ)
spiralparametricr(θ)=a+bθ
euclideanDistancespatial√((x₂-x₁)²+(y₂-y₁)²)
atan2spatialatan2(y₂-y₁, x₂-x₁)
axisReflectionspatialv-2(v·n̂)n̂
rigidOffsetspatialtarget.pos + offset
rectClampspatialclamp(x, min, max)
depthScaledTranslationspatialbase + scroll·depth
affineTransformtransformx'=ax+cy+e, y'=bx+dy+f
deltaRotationtransformitem.rotate(shortestPathDelta)
linearBlendSkinningtransformv' = Σ w_i · M_i · v (weighted sum of bone matrices applied per vertex)
exponentialPursuitphysicspos += (target-pos)·lag
dampedHarmonicOscillatorphysicse^(-ζω₀t)(Acos(ωd·t)+Bsin(ωd·t))
gravityphysicsy += vy·dt + ½g·dt²
perlinNoisenoiseGradient noise [-1,1]
fbmnoiseΣ persistence^i · noise(x·lacunarity^i)
colorLerpcolorlerp per RGB/HSL channel
gradientInterpolationcolorStop-wise gradient lerp
fabrikSolversolverForward And Backward Reaching IK
linearMapmappingsource = target·multiplier + offset
mathExpressionexpressionUser-defined f(t,v)
keyframeLerpinterpolationMulti-keyframe piecewise lerp
scaleInterpolationinterpolationScale 0→1 with easing
delayOffsettimingdelay = index · stagger
pulseScaleanimationTemporary scale pulse
boundingGeometrygeometryBounding box/circle calculation
pathPointLerpinterpolationPer-point path interpolation
proximityThresholdspatialdist < radius → trigger
timedCyclingtimingmode[floor(t/cycleDur) % n]
trimPathpathdashArray/dashOffset trimming
staggerDelaytimingindex × delay
expressionexpressionmath.js compiled expression evaluation
odesolverOrdinary Differential Equation numerical integration
rk4solverFourth-order Runge-Kutta: y(n+1) = y(n) + (k1+2k2+2k3+k4)/6
dynamicSystemsolverState-space model: dx/dt = f(x,t,params)
fftsignalCooley-Tukey radix-2 Fast Fourier Transform
signalProcessingsignalSignal generation, windowing, filtering
parametricSurfacegeometryS(u,v) = (x(u,v), y(u,v), z(u,v))
projection3dgeometryPerspective projection: 2D = 3D × fov/(fov+z)

Design Patterns

Structural archetypes for motion-graphics compositions — each pattern names the node types, edges, and math functions it requires.

NameDescriptionRequired EdgesNode TypesMath Functions
orbitalCompositionItems revolving around a central element at differing radii and speeds. Reads as a system with a centre — solar systems, hubs, anything where one element is clearly primary.orbits
staggeredRevealItems entering one after another on a fixed delay rather than together. The stagger is what makes a group read as a sequence instead of a block, and it is the cheapest way to direct a viewer's reading order.staggeredWith
parallaxDepthLayers moving at different rates to imply depth — nearer layers travel further for the same camera move. The rate RATIO carries the depth; equal rates flatten the scene instantly.parallax
followChainEach item follows the one before it, so motion propagates down the chain with lag. Produces tails, trains and snake-like motion from a single driven head.follows
waveMotionA displacement travelling through a row of items with a phase offset per index. The offset is the wave; without it every item moves in unison and the effect disappears.waveThrough
maskRevealContent uncovered by an animated mask rather than faded in — a wipe, iris or shape reveal. Use when the SHAPE of the reveal should carry meaning; a plain fade carries none.MaskedItem
skeletalAnimationArtwork bound to a bone hierarchy so a pose drives the drawing. The right choice when the same character must take many poses; per-item keyframes are the right choice when it takes one.Skeleton, Bone
keyframeAnimationExplicit property values at explicit times, interpolated between. The most controllable form and the one that exports natively to SMIL and Lottie.keyframeLerp
proceduralBackgroundA generated backdrop — noise, gradients, fields — computed rather than drawn. Costs nothing to restyle and never needs an asset, which is why it suits templates.
trimPathDrawA stroke revealed along its own length by animating pp:trimEnd, so the line appears to be drawn. Follows the path's arc length, unlike a dash animation.trimPath
diagramFlowShapes joined by connectors that re-route as the shapes move. The general diagram arrangement; the notation-specific patterns below narrow it.DiagramShape, Connector
diagramFlowchartA process as boxes and arrows, linear or branching, with decisions as diamonds. Reach for it when the subject is a SEQUENCE of steps.sequenceFlowFlowchartShape, SequenceConnector
diagramUMLA UML class or use-case diagram, where the arrowhead and line style carry formal meaning — inheritance, composition, dependency are distinguished by notation, not by label.UMLShape
diagramNetworkNodes and links where TOPOLOGY is the subject rather than sequence — what is connected to what, not what happens first.NetworkShape
diagramDecisionTreeBranching paths from a single root, each branch a condition. Use when the subject is a choice with consequences; a flowchart when it is a process with steps.DecisionShape
mapVisualizationGeographic data on a projected basemap — choropleth fills, markers, region highlights. The projection is a real choice: it decides which areas are exaggerated.MapRegion
morphTransitionOne shape becoming another by interpolating vertices, rather than by cross-fading two shapes. Requires comparable geometry; wildly different vertex counts produce a shape that passes through nonsense.morphsTo
collageTextText rebuilt as per-letter artwork so each character can be styled or animated independently. Consumes the original text item, so apply it after the wording is settled.LetterCollage
cameraAnimationThe viewport itself moving — zoom, pan, focus — rather than the items. Moves the whole scene coherently and costs one animated entity instead of many.cameraFollows, cameraAnimates
proceduralNoiseMotion driven by smoothed pseudo-random values, giving organic drift that never exactly repeats. Seeded, so it is deterministic and replays identically.wiggle
expressionDrivenProperties computed from a math expression of time or of another property. The right choice when the relationship is a formula rather than a set of poses.timeExpression

Generators

Drawing functions invoked at canvas-init time to produce scene content (geometric patterns, math plots, simulations, etc.).

NameDescriptionParentCategoryMath Functions
ProceduralGeneratorAbstract root of the generators — functions that DRAW rather than items that are placed. A generator produces its own content from parameters and a seed, so it costs no assets and restyles by re-running.abstract
ParticleGeneratorAbstract: generators that emit many small elements — stars, bokeh, confetti, fireflies. Cost scales with the element count, which is the parameter to watch on a phone.ProceduralGeneratorabstract
FieldGeneratorAbstract: generators driven by a continuous field sampled across the canvas — noise, flow, gradients. Smooth by construction, so they suit backdrops rather than focal content.ProceduralGeneratorabstract
PatternGeneratorAbstract: generators that repeat a motif on a lattice — grids, truchet tiles, halftones, stripes. Regular by construction, which is why they read as designed rather than as texture.ProceduralGeneratorabstract
SceneGeneratorAbstract: generators that compose a whole scene — horizons, skies, landscapes. They assume they own the background, so layering two of them rarely reads well.ProceduralGeneratorabstract
MathGeneratorMath-driven generator — evaluates expressions / ODEs / FFT / parametric surfaces to produce visual contentProceduralGeneratorabstract
drawSunburstRadial rays emanating from a center point. Use for solar emblems, celebratory backgrounds, retro motifs.PatternGeneratorpatternsinCos, parametricCircle
drawGridUniform grid pattern. Use for blueprint backgrounds, technical aesthetics, layout reference.PatternGeneratorpatternlerp
drawWavesLayered horizontal sine waves. Use for water surfaces, audio waveforms, ocean backgrounds.PatternGeneratorpatternsinOscillation
drawPatternTileable geometric pattern (chevrons, hexagons, polkadots). Use for textured backgrounds, brand backdrops.PatternGeneratorpatternparametricCircle, sinCos
drawSunsetSceneLayered horizon scene with sky-color gradient. Use for landscape backdrops, mood-setting backgrounds.SceneGeneratorscenelerp, colorLerp
drawFunctionPlotPlots a math expression y=f(x) over an x-range. Use for math illustrations, function visualization, education.MathGeneratormathexpression, keyframeLerp
drawParametricCurvePlots a parametric (x(t), y(t)) curve over a t-range. Use for Lissajous figures, spirals, parametric art.MathGeneratormathparametricCircle, sinCos
draw3DParametricCurvePlots a 3D parametric curve (x(t), y(t), z(t)) projected to the canvas with rotation + perspective. Use for helices, knots, spherical spirals, space-curve math art.MathGeneratormathexpression, parametricCircle, projection3d
drawSimulationRenders a live ODE-based dynamic system (pendulum, Lorenz, spring-mass). Use for physics demos, chaos, science visuals.MathGeneratormathode, rk4, dynamicSystem
drawSpectrumAnalyzerRenders a signal's frequency spectrum via FFT. Use for audio visualizers, signal-processing demos, abstract data motion.MathGeneratormathfft, signalProcessing
draw3DSurfaceParametric 3D surface with perspective projection (Klein bottle, Möbius strip, torus). Use for math art, geometry visualization.MathGeneratormathparametricSurface, projection3d
drawStackedCirclesVertical stack of overlapping circles. Use for snowman-shapes, decorative beadwork, abstract sculpture forms.ParticleGeneratorsceneparametricCircle
drawCircuitMaze-like circuit-board pattern with nodes and traces. Use for tech backdrops, sci-fi panels.PatternGeneratorscenelerp
drawBokehSoft circular out-of-focus light dots. Use for photographic bokeh, romantic blur, ambient highlights.ParticleGeneratorparticleparametricCircle
drawGradientMeshSmooth multi-color noise gradient. Use for atmospheric backdrops, mood lighting.FieldGeneratororganicperlinNoise
drawGeometricAbstractRandomized composition of overlapping geometric shapes. Use for abstract art, modern poster backdrops.SceneGeneratorpatternlerp
drawWindFieldFlow-field of streaming particles driven by Perlin noise. Use for wind visualization, smoke trails, atmospheric motion.FieldGeneratorparticleperlinNoise, fbm
drawFluidFlowCurving streamlines suggesting fluid motion. Use for water / wind / lava illustration, organic backdrops.FieldGeneratororganicperlinNoise, fbm
drawOrganicFlowFlowing curves that breathe and shift over time. Use for living abstract backgrounds, mood ambience.FieldGeneratororganicsinOscillation, perlinNoise
drawNoiseTextureStatic or animated noise texture. Use for grain overlays, paper textures, depth-cueing backgrounds.PatternGeneratororganicperlinNoise, fbm
drawTruchetSeeded Truchet tiling of quarter-arc or diagonal tiles, colored from an OKLCH palette. Use for flowing maze textures, generative line art, circuit-like backdrops.PatternGeneratorpatternparametricCircle
drawHalftoneGrid of dots whose radius rides a tone field (noise / radial / linear) with color from an OKLCH palette. Use for print-halftone looks, soft textured backgrounds, retro pop art.PatternGeneratorpatternperlinNoise, parametricCircle
drawRibbonsSmooth Bézier ribbons undulating across a shared Perlin noise field, colored from an OKLCH palette. Use for flowing aurora / silk / current backdrops, organic motion.FieldGeneratororganicperlinNoise, fbm
drawStackedWavesLayered filled cubic-Bézier wave bands stacked at increasing baselines with an OKLCH palette ramp. Use for hero backgrounds, section dividers, ocean/dune/hill backdrops.PatternGeneratorpatternsinOscillation
drawBlobsSoft organic blob shapes (smoothed paths through a jittered circle), colored from an OKLCH palette. Use for playful backgrounds, sticker shapes, lava/bubble motifs.FieldGeneratororganicparametricCircle
drawFallingPetalsGentle falling petals drifting downward with wind sway. Use for spring, romantic, celebration, wedding, birthday designs.ParticleGeneratornaturesinOscillation
drawFirefliesGlowing firefly dots drifting in organic patterns. Use for magical, night, forest, warm summer evening moods.ParticleGeneratornatureperlinNoise
drawFloatingLeavesLeaves drifting on wind currents with gentle rotation. Use for autumn, nature, organic, calming backgrounds.ParticleGeneratornaturesinOscillation, perlinNoise
drawGlowOrbsSoft glowing orbs drifting slowly. Use for magical, dreamy, ethereal, ambient backgrounds.ParticleGeneratordecorativeparametricCircle
drawConcentricRingsExpanding concentric ring patterns. Use for ripple, radar, target, hypnotic, meditative designs.PatternGeneratordecorativeparametricCircle, sinOscillation
drawCornerAccentsDecorative corner flourishes framing the canvas. Use for certificates, invitations, formal designs, polished frames.PatternGeneratordecorativelerp
drawFlowCurvesElegant flowing curve lines across the canvas. Use for luxury, fashion, minimal, sophisticated backgrounds.PatternGeneratordecorativesinOscillation, perlinNoise
drawLowPolyTriangulated low-poly background — a jittered vertex grid split into triangles, each facet flat-filled from an OKLCH gradient. Use for modern geometric backdrops, crystalline textures.PatternGeneratorpatternlerp
drawPeaksStacked zig-zag mountain/ridgeline bands closed to the canvas bottom with an OKLCH palette ramp. Use for layered-mountain backdrops, ridge silhouettes, outdoor scenes.PatternGeneratorscenelerp
drawScatterA scattered field of small shapes (circles / triangles / squares) sized and colored from an OKLCH palette. Use for confetti, starfields, particle textures, decorative speckle.ParticleGeneratorparticleparametricCircle
drawGPUPlasmaImmersive fractal plasma — FBM noise + domain warp + animated cosine palette. Use for organic, fluid, trippy backgrounds. GPU-accelerated.FieldGeneratorgpuperlinNoise, fbm
drawGPUStarfieldMulti-layer parallax starfield with twinkling stars. Use for space, night sky, sci-fi backgrounds. GPU-accelerated.FieldGeneratorgpusinOscillation
drawGPUVoronoiAnimated Voronoi tessellation with glow edges. Use for cellular, organic, abstract tech backgrounds. GPU-accelerated.FieldGeneratorgpueuclideanDistance
drawGPUOceanMulti-layer sine waves with specular sun highlights and depth coloring. Use for ocean, sea, water backgrounds. GPU-accelerated.SceneGeneratorgpusinOscillation
drawGPUCloudsVolumetric FBM cloud field with warm edge lighting and sky gradient. Use for sky, atmosphere, dreamy backgrounds. GPU-accelerated.SceneGeneratorgpuperlinNoise, fbm
drawGPUCausticsUnderwater caustic light patterns — Voronoi-based with deep blue to cyan palette. Use for underwater, pool, ocean-floor scenes. GPU-accelerated.FieldGeneratorgpueuclideanDistance
drawGPUTunnelRotating checkered tunnel with depth fog in warm tones. Use for portal, vortex, hypnotic, retro sci-fi backgrounds. GPU-accelerated.FieldGeneratorgpuparametricCircle

Value Types

Compound value shapes (vectors, points, gradients, keyframes) that property values commit to.

NameDescriptionFieldsAnchor
Point2DA canvas coordinate {x, y} in pixels, origin top-left, +y DOWN.x, y
BoundingBoxAn axis-aligned rectangle {x, y, width, height} in canvas pixels. On a ROTATED item this is the bounding box of the rotated shape, so it is larger than the item and scaling it directly shears the geometry.x, y, width, height
CanvasThe coordinate space items live in: {width, height, backgroundColor}. Distinct from the backing store, which is larger by the device pixel ratio — sizing an overlay to one when you meant the other is a common off-by-DPR error.width, height, backgroundColor
KeyframeA property snapshot at a time: {time, properties, easing}. Time is in SECONDS. The easing applies to the segment ENDING at this keyframe, not the one leaving it.time, properties, easing
KeyframeAnimationOrdered keyframes with duration — discrete property targets at specific timeskeyframes, duration, loop
LoopAnimationContinuous frame-based animation preset (pulse, rotate, bounce, etc.)animationType, animationSpeed, animationDirection
EasingFunctionA timing curve {type, params} — a named ease or an explicit cubic bezier [x1,y1,x2,y2]. Named eases here are QUADRATIC, which is why they do not match the CSS curves of the same name.type, params
TimelineGlobal playback state {duration, loop, currentTime}. Scene time, not wall-clock: everything that reads it scrubs and exports identically, which is why nothing in the engine should read a clock directly.duration, loop, currentTime
ViewportCamera state {zoom, center, rotation}. Zoom is a multiplier on the view, so an overlay drawn in screen pixels must divide by it to stay a constant on-screen size.zoom, center, rotation
MaskAnimationAn animated reveal {maskType, keyframes, duration, easing}. Its keyframes belong to the MASK, not the item — they are kept separate so they never double-apply as item transforms.maskType, keyframes, duration, easing

Enumeration Values

Fixed-set values picked by scene authors for properties like animation curve, aura mode, and image filter. Each entry serializes as a skos:Concept with skos:broader linking to its parent enumeration scheme.

NameDescriptionCategoryScheme
shaderStageItemA fragment shader drawn over one canvas item and clipped to its silhouette. The only stage open to authoring, because it is the only one whose architecture already gives every effect its OWN program — so adding one is a registration rather than an edit to shared source. The vertex stage is fixed: a full-screen quad providing v_uv.enumShaderStage
shaderStageMeshA custom vertex AND fragment program over caller-supplied geometry, drawn in a pp:World3D. The one stage that accepts a VERTEX program, which is what makes writing a material possible rather than choosing from the built-in six. Two declared limits: a custom program has made no promise about what it writes to depth, so these are skipped in the shadow pass rather than corrupting every other object's shadow; and their geometry is typed arrays, which do not JSON-serialize, so it is not persisted.enumShaderStage
shaderStageFilterA full-frame image filter. NOT open to authoring: all 27 filters share one compiled program selected by an integer switch, so adding one means editing shared source — and a single reserved word in that unit once made every filter in the product return transparent black. Splitting it into per-filter programs would open this stage and remove that blast radius at once.enumShaderStage
shaderStageMaterialThe surface of a 3D object in a pp:World3D. NOT open to authoring: the renderer holds six fixed programs against three fixed meshes with no per-object program path, so opening it means an attribute contract and arbitrary geometry rather than somewhere to put a fragment shader.enumShaderStage
auraModeInsideShader fills the item silhouette (destination-in mask). Use when the effect should read as the item's own material rather than as something around it.enumAuraMode
registerNaiveFlat colour, even spacing, symmetric placement, decoration welcome. The register of a nursery poster or a picture book. Also where undirected output lands by default, which is why naming it matters: it is a legitimate idiom, not a bug, and calling it by name separates \"chose this\" from \"chose nothing\".enumDesignRegister
registerPlayfulRounded forms, a warm limited palette, bouncy motion. Restrained enough to read as designed, loose enough to stay friendly.enumDesignRegister
registerPosterOne dominant hue and enormous type contrast, readable across a room. Scale does the work, so the type-scale ratio is the highest of any register.enumDesignRegister
registerEditorialInk plus one or two hues, a modular type scale, hairline rules, asymmetric balance, and negative space treated as a subject rather than as leftover. Motion only where it carries meaning.enumDesignRegister
registerTechnicalMonochrome with a single accent, a tight grid, monospace labels, no ornament at all. A diagram, not a picture.enumDesignRegister
designLevelSketchLevel 1. Defaults accepted: no optical correction, no considered type scale, budgets untightened.enumDesignLevel
designLevelCompetentLevel 2. One consistent type scale and one grid, held throughout the composition.enumDesignLevel
designLevelRefinedLevel 3. Optical alignment rather than merely mathematical, a tightened palette, and whitespace placed deliberately.enumDesignLevel
designLevelArtDirectedLevel 4. A concept drives every choice and exactly one rule is broken on purpose. Meaningless below this level, where the rules are not yet kept reliably enough for a break to read as intent rather than error.enumDesignLevel
mediumVectorFlat fills, clean edges, uniform strokes. The engine's own idiom and a real medium in its own right — screen-print and modern flat illustration live here.enumDesignMedium
mediumThreadNeedlepainting: rows of directional stitches that follow the form, so a feather or a petal reads as volume rather than as fill. Native because a stitch IS vector geometry — a short oriented segment with a taper and a sheen — which makes a vector engine genuinely better at this medium than a raster painting engine.enumDesignMedium
mediumInkPen and brush marks with pressure-varying width and hard edges. Native: the existing brush profiles already make these marks, so no new geometry is required.enumDesignMedium
mediumCutPaperFlat shapes with a cut edge and a cast shadow, layered. Native: a vector silhouette with an offset shadow is the medium rather than an approximation of it.enumDesignMedium
mediumCharcoalGranular tooth and smudged edge. Stylised: the grain is a shader over a silhouette, not deposited pigment — there is no smudging, no lifting and no true tonal blending.enumDesignMedium
mediumOilImpasto volume, glazing, wet-in-wet blending, softened edges. Stylised: the signature is subsurface and continuous-tone, and impasto relief, glaze translucency and blended edges are pigment behaviour rather than geometry. The engine can suggest brush-shaped marks and a loaded palette; it cannot produce the medium.enumDesignMedium
mediumEncausticPigmented wax fused with heat: translucent depth built in layers, with edges that flow rather than end. Absent, and registered precisely so it can be refused with that reason — volumetric layered translucency has no vertex-level expression, and a flat approximation would misrepresent the medium rather than approximate it.enumDesignMedium
fidelityNativeThe medium's characteristic marks ARE vector geometry. The engine makes the medium, not an impression of it.enumMediumFidelity
fidelityStylisedA recognisable impression of the medium, said out loud rather than implied. Every stylised medium carries a limitation naming exactly what it cannot do.enumMediumFidelity
fidelityAbsentThe medium has no vertex-level expression. Registered so a request for it is REFUSED with a reason instead of quietly attempted — a wrong answer with an explanation beats a plausible one without.enumMediumFidelity
stitchSatinParallel stitches spanning edge to edge, filling a narrow shape in one flat sheet. The stitch that gives a petal or a letter its sheen, because every thread lies the same way and catches light together.enumStitchKind
stitchLongAndShortSatin worked in staggered lengths so successive rows interlock instead of banding. The stitch that makes needlepainting shade continuously — the variance in stitch length IS the blend.enumStitchKind
stitchSeedShort stitches scattered at many angles. Texture rather than direction — used to break up a flat area or to suggest granularity without describing form.enumStitchKind
stitchStemOverlapping slanted stitches following a line, making a rope-like outline. The stitch for stems, contours and any edge that should read as drawn rather than cut.enumStitchKind
auraModeOutsideShader appears as a halo around the item edge (destination-out mask)enumAuraMode
auraModeOverlayShader stylizes the item via multiply blend on its silhouette — item content stays visible underneathenumAuraMode
curveLinearIdentity transform: continuous monotonic time, ideal for fbm warpingenumAnimationCurve
curveSineSmooth 0..1 oscillation at speed Hz. The default for breathing, pulsing and anything that should feel alive — no corners, so nothing reads as mechanical.enumAnimationCurve
curveTriangleSharp linear up-and-down 0..1 oscillation. Reads as mechanical or metronomic precisely because of the corners; choose it over sine when regularity should be visible.enumAnimationCurve
curvePulseSquare wave on/off at speed Hz. For blinking, flashing and hard state changes — there is no in-between value to catch the eye.enumAnimationCurve
curveEaseSmooth s-curve from 0 to 1 each cycle (slow-fast-slow). The natural choice for a single considered movement, since real objects accelerate and decelerate.enumAnimationCurve
curveSawtoothLinear ramp 0..1 then instantaneous reset. For anything that fills then resets — progress, refills, repeating sweeps. The reset is instantaneous and deliberately visible.enumAnimationCurve
curveBounceDecaying bouncing oscillation each cycle. For impacts and landings, where the settling is what sells the weight.enumAnimationCurve
curveNoiseSmoothed pseudo-random walk in 0..1. For organic drift — flame, foliage, handheld camera. Seeded, so it replays identically.enumAnimationCurve
filterGrayscaleDesaturation toward luminance-weighted gray. Use to subordinate an image so foreground content reads, or to unify photos from different sources.imageFilterImageFilter
filterSepiaSepia tone — warm brown desaturation. Reads as archival or nostalgic; a period cue rather than a colour correction.imageFilterImageFilter
filterBrightnessAdditive brightness shift (-1..1). Additive, so it lifts shadows and can clip highlights — for a change that preserves contrast use pp:filterContrast instead.imageFilterImageFilter
filterContrastContrast scale around mid-gray. Pushes values away from mid-gray, so it deepens and brightens at once; heavy values clip both ends.imageFilterImageFilter
filterSaturationSaturation lerp between luma and rgb. 0 is grayscale and values above 1 oversaturate; a small reduction is the usual way to make an image sit behind text.imageFilterImageFilter
filterInvertNegative inversion (1 - rgb). A hard, graphic effect — for negatives and glitch treatments, not for correction.imageFilterImageFilter
filterPosterizeQuantize each channel to N levels for a flat-color look. Fewer levels reads as screen-print or poster art; it is the flat-colour look, so it destroys gradients by design.imageFilterImageFilter
filterHslHSL space adjustment (hue rotation, saturation, lightness). The precise tool for shifting a palette without touching lightness relationships — prefer it to a tint when the image must stay photographic.imageFilterImageFilter
filterColorTintColored tint blended via multiply/screen/overlay. For brand colouring and duotones; the blend mode decides whether the tint deepens (multiply) or lifts (screen).imageFilterImageFilter
filterVignetteRadial darkening from center to corners. Directs the eye to the centre. Subtle values read as lens character; strong ones read as an effect.imageFilterImageFilter
filterEdgeDetectSobel-style edge detection emphasizing high-frequency contrastimageFilterImageFilter
filterDitherOrdered Bayer 4×4 dithering for retro/limited-palette look. Retro and limited-palette looks; it trades smooth gradients for a visible pattern on purpose.imageFilterImageFilter
filterHalftoneDotsSingle-channel halftone dot pattern at configurable angle (newspaper-print look)imageFilterImageFilter
filterHalftoneCMYKFour-plate CMYK halftone separation with rosette angle offsets (15°/75°/0°/45°)imageFilterImageFilter

Semantic Dimensions

SKOS concept schemes for non-binary classification (mood, style, complexity). Each scheme's values are reachable as pp:<dim>_<value> concepts.

DimensionCountConcepts
moods21energeticcalminspiringplayfulelegantdramaticmysteriousprofessionalwhimsicalnostalgicfuturisticwarmcoolfestivesolemnboldminimalorganicromanticcheerfulsummery
visualStyles23bold-typographyradial-backgroundparticle-effectsgeometricorganic-flowcinematicflat-designgradient-meshcircuit-boardhand-drawncollagedata-visualizationwave-patternsneon-glowskeletal-animationmask-revealtext-revealletter-by-letterfloral-patternstropicalconfettiacademicnature-inspired
colorSchemes11vibrantmutedmonochromedarklightneonpastelwarmcoolearthcontrast
audiences9creatorsgeneralbusinessstudentsdeveloperschildrenmultilingualindigenousmarketers
intents11inspireinformsellentertainteachcelebrateannouncedemonstratebrandgreetinvite
animationComplexities5staticsimplemoderatecomplexadvanced
compositionStyles8centeredasymmetricgridlayeredradialflowingsplitfull-bleed
contentTypes8text-focusedshape-focusedmixeddiagrammapcharacterscenedata-driven
designIntents4structuraldecorativetemporalinteractive

Visualization Dimension Properties

Graph-based chart-type classification links — connect a chart class to its mark, coordinate system, encoding, task, and composition dimensions.

NameDescriptionDomainRange
usesMarkThe geometric primitive that represents each datum — bar, point, line, area. The mark is the first choice in a grammar of graphics, and it constrains which encodings are legible afterwards.DataVisualizationMarkType
usesCoordinatesThe coordinate system data is mapped into — Cartesian, polar, geographic. Changing it changes what comparisons are easy: polar makes cycles obvious and magnitudes hard.DataVisualizationCoordinateSystem
primaryEncodingThe visual channel carrying the main variable — position, length, angle, colour. Position and length are read most accurately; colour and area least, which is why the primary variable should take one of the first two.DataVisualizationEncodingChannel
secondaryEncodingAn additional channel layered on the mark, such as size in a bubble chart. Each extra channel costs legibility, so a second is often the last one worth adding.DataVisualizationEncodingChannel
analyticalTaskThe question the chart is meant to answer — comparison, trend, distribution, correlation, part-to-whole. Naming the task is what makes a chart choice defensible rather than decorative.DataVisualizationAnalyticalTask
defaultCompositionHow multiple series are combined by default — overlaid, stacked, or faceted. Stacking shows a total and obscures individual series; faceting does the reverse.DataVisualizationCompositionMode