Rune Story Syntax Reference
Generated by
story syntaxfrom the Rune Story descriptor registry. The type sections below are authoritative for the current binary (and any loaded plugins). Do not edit by hand.
Sprites
arc — ArcSprite
Primitive pie-sector arc Story sprite. Width/Height define the full ellipse bounding box; Start/Sweep define the visible sector in degrees (converted to radians internally).
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| start | number | Double? | ✓ | ✓ | |||
| sweep | number | Double? | ✓ | ✓ | |||
| fill | brush | Brush | ✓ | ✓ |
bar — BarSprite
Vertical bar chart Story sprite. Bars use fixed element width, computed chart dimensions, and animate their heights from the bottom baseline.
Primary: data — Story Type ID clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR List<ChartDataEntry>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| data | clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<ChartDataEntry> | ChartDataListConverter | The initial data entries. This is the constructor default argument. | |||
| barRadius | number | Double | ✓ | ✓ | The top corner radius for rounded bars (0 = sharp). | ||
| spacing | number | Double | The pixel gap between bars. | ||||
| colors | clr:System.String[], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | String[] | The custom color palette. | ||||
| barWidth | number | Double | The width of each bar in pixels. | ||||
| barHeight | number | Double | The maximum pixel height of a bar. | ||||
| max | number | Double? | The optional scale denominator. | ||||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment |
ellipse — EllipseSprite
Primitive ellipse Story sprite. Draws a filled ellipse via CmdDrawEllipse.
Primary: bounds — Story Type ID clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR Rect?
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| bounds | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | ✓ | ✓ | The bounds (x, y, width, height) as a composite view. Subclasses that accept bounds as constructor input should expose a matching public constructor parameter. | ||
| fill | brush | Brush | ✓ | ✓ | The ellipse fill brush. Animatable — internally decomposed to RGBA RuneValue channels. |
funnel — FunnelSprite
Funnel chart Story sprite. Layers are centered rounded rectangles whose widths scale from the configured maximum and stack downward in insertion order.
Primary: data — Story Type ID clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR List<ChartDataEntry>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| data | clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<ChartDataEntry> | ChartDataListConverter | The initial data entries. This is the constructor default argument. | |||
| spacing | number | Double | The pixel gap between layers. | ||||
| colors | clr:System.String[], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | String[] | The custom color palette. | ||||
| maxWidth | number | Double | The maximum layer width at the maximum value. | ||||
| layerHeight | number | Double | The height of each layer in pixels. | ||||
| max | number | Double? | The optional scale denominator for layer widths. | ||||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | |||||
| radius | number | Double | ✓ | ✓ | The rounded corner radius. |
image — ImageSprite
Displays an image loaded from a file path. Supports corner radius, stroke, source viewport, blur, and fit modes.
Primary: image — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| image | string | String | The image file path (relative to .story.yaml). | ||||
| fit | clr:Rune.Story.Primitives.ImageFitMode, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | ImageFitMode | The fit mode (contain, cover, fill, none). Default: contain. | ||||
| radius | number | Double? | ✓ | ✓ | The corner radius. | ||
| stroke | brush | Brush | ✓ | ✓ | The border color. | ||
| strokeWidth | number | Double | ✓ | ✓ | The border width. | ||
| src | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | The source viewport rect (pixels). Null = full image. | ||||
| blur | number | Double | ✓ | ✓ | The blur radius. |
layer — LayerSprite
Groups a locally ordered tree of child sprites under a shared Story sprite.
Primary: sprites — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Sprites.LayerChild, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<LayerChild>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| motionBlur | duration | Double | The motion-blur exposure duration in seconds. | ||||
| rotationX | number | Double | ✓ | ✓ | The clockwise rotation around the local x axis, in degrees. | ||
| rotationY | number | Double | ✓ | ✓ | The clockwise rotation around the local y axis, in degrees. | ||
| translateZ | number | Double | ✓ | ✓ | The translation toward the viewer in DIPs. | ||
| perspective | number | Double | ✓ | ✓ | The positive perspective depth in DIPs. | ||
| perspectiveOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The static perspective vanishing-point origin. | ||||
| planeBounds | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | Optional explicit local bounds for the projected plane. | ||||
| backface | clr:Rune.BackfaceVisibility, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | BackfaceVisibility | Whether the projected back face remains visible. | ||||
| clip | clr:Rune.Story.Primitives.ClipShape, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | ClipShape | ✓ | ✓ | The clip shape for this layer. |
line — LineSprite
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x1 | number | Double? | ✓ | ✓ | |||
| y1 | number | Double? | ✓ | ✓ | |||
| x2 | number | Double? | ✓ | ✓ | |||
| y2 | number | Double? | ✓ | ✓ | |||
| cp1 | clr:Rune.Story.Primitives.Point, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Point? | ✓ | ✓ | PointConverter | The first Bézier control point. When set alone, produces a quadratic curve. When set together with Cp2, produces a cubic curve. | |
| cp2 | clr:Rune.Story.Primitives.Point, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Point? | ✓ | ✓ | PointConverter | The second Bézier control point. When set, produces a cubic curve (requires Cp1 to also be set). | |
| stroke | brush | Brush | ✓ | ✓ | |||
| strokeWidth | number | Double? | ✓ | ✓ | |||
| cap | clr:Rune.LineCap, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | LineCap? | |||||
| dash | string | String | |||||
| dashOffset | number | Double? |
path — PathSprite
SVG-path Story sprite. Parses a subset of SVG path d syntax and renders with optional fill and/or stroke.
Primary: d — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| d | string | String | |||||
| viewBox | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | |||||
| fill | brush | Brush | ✓ | ✓ | |||
| stroke | brush | Brush | ✓ | ✓ | |||
| strokeWidth | number | Double? | ✓ | ✓ | |||
| trimStart | number | Double | ✓ | ||||
| trimEnd | number | Double | ✓ | ||||
| trimOffset | number | Double | ✓ | ||||
| cap | clr:Rune.LineCap, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | LineCap? | |||||
| join | clr:Rune.LineJoin, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | LineJoin? | |||||
| dash | string | String | |||||
| dashOffset | number | Double? |
pie — PieSprite
Pie chart Story sprite. Each sector uses dual RuneValue fields (start angle + sweep angle) so the engine animates smooth transitions.
Primary: data — Story Type ID clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR List<ChartDataEntry>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| data | clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<ChartDataEntry> | ChartDataListConverter | The initial data entries. This is the constructor default argument. | |||
| radius | number | Double | ✓ | ✓ | The outer radius. | ||
| startAngle | number | Double | ✓ | ✓ | The starting angle in degrees (-90 = top). | ||
| colors | clr:System.String[], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | String[] | The custom color palette. | ||||
| total | number | Double? | The optional total used as the pie denominator. | ||||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment |
polygon — PolygonSprite
Polygon Story sprite with dynamic animatable vertices. Supports shape morphing via arc-length parameterized vertex correspondence.
Primary: points — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.Point, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<Point>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| points | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.Point, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<Point> | ✓ | ✓ | PointListConverter | The polygon vertices. This is the constructor default argument. | |
| fill | brush | Brush | ✓ | ✓ | |||
| stroke | brush | Brush | ✓ | ✓ | |||
| strokeWidth | number | Double? | ✓ | ✓ | |||
| cap | clr:Rune.LineCap, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | LineCap? | |||||
| join | clr:Rune.LineJoin, Rune, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null | LineJoin? | |||||
| closed | bool | Boolean | |||||
| dash | string | String | |||||
| dashOffset | number | Double? |
rect — RectSprite
Primitive rectangular Story sprite.
Primary: bounds — Story Type ID clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR Rect?
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| bounds | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | ✓ | ✓ | The bounds (x, y, width, height) as a composite view. Subclasses that accept bounds as constructor input should expose a matching public constructor parameter. | ||
| fill | brush | Brush | ✓ | ✓ | The optional fill brush. Animatable — internally decomposed to RGBA RuneValue channels. | ||
| radius | clr:Rune.Story.Primitives.CornerRadius, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | CornerRadius? | ✓ | ✓ | The optional corner radius. A scalar sets all corners; four values are ordered top-left, top-right, bottom-right, bottom-left. |
svg — SvgSprite
Displays a vector .svg document loaded from a file path. The whole SVG is parsed into an immutable, resolution-independent asset and drawn into the sprite bounds with a fit mode. Supports fill/contain/none (default contain); positioning, scaling, alignment, box shadow, opacity, and whole-sprite animation are inherited from BoundedSprite. cover, corner radius/clip, blur, and per-element recolor are not supported in this version.
Primary: svg — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| svg | string | String | The SVG file path (relative to the .story.yaml). | ||||
| fit | clr:Rune.Story.Primitives.ImageFitMode, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | ImageFitMode | The fit mode. Default: contain. cover is not supported in this version. |
text — TextSprite
Text Story sprite. Shapes text once at creation time and renders via CmdDrawShapedText. Text renders at its natural shaped size; width/height serve as the sprite's bounding box for layout purposes.
Primary: text — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| text | string | String | The text content. Supports \n for manual line breaks. | ||||
| fontSize | number | Double? | The font size in DIPs used for shaping. | ||||
| fontFamily | fontFamily | String | The font family name. | ||||
| fontWeight | fontWeight | StoryFontWeight? | The font weight. | ||||
| color | brush | Brush | ✓ | ✓ | The text brush (solid color). Animatable — internally decomposed to RGBA RuneValue channels. | ||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the text bounding box. | ||||
| textAlign | clr:Rune.Story.Primitives.HorizontalAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | HorizontalAlignment? | The horizontal text alignment for multi-line text within the bounding box. | ||||
| letterSpacing | number | Double | The additional spacing in DIPs between adjacent shaped glyphs. | ||||
| maxWidth | number | Double | The optional wrap width constraint. |
video — VideoSprite
Displays a frame from a video source path.
Primary: video — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| opacity | number | Double | ✓ | ✓ | The sprite opacity. | ||
| scale | clr:Rune.Story.Primitives.Scale, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Scale | ✓ | ✓ | The unitless sprite scale. | ||
| rotation | number | Double | ✓ | ✓ | The clockwise rotation in degrees, applied around TransformOrigin. | ||
| transformOrigin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | The transform origin for semantic transform commands. | ||||
| x | dimension | Dimension | ✓ | ✓ | The x coordinate as a Dimension. | ||
| y | dimension | Dimension | ✓ | ✓ | The y coordinate as a Dimension. | ||
| pos | clr:Rune.Story.Primitives.Position, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Position? | ✓ | The position as a composite value. | |||
| width | dimension | Dimension | ✓ | ✓ | The width as a Dimension. | ||
| height | dimension | Dimension | ✓ | ✓ | The height as a Dimension. | ||
| size | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size? | ✓ | The size as a composite value. | |||
| align | clr:Rune.Story.Sprites.SpriteAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteAlignment | The alignment that determines what x,y refers to relative to the sprite bounds. | ||||
| shadow | shadow | BoxShadow? | ✓ | ✓ | The box shadow. | ||
| video | string | String | The video file path (relative to .story.yaml). | ||||
| time | duration | Double | ✓ | ✓ | The current source time in seconds. | ||
| fit | clr:Rune.Story.Primitives.ImageFitMode, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | ImageFitMode | The fit mode (contain, cover, fill, none). Default: contain. | ||||
| radius | number | Double? | ✓ | ✓ | The corner radius. | ||
| src | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | The source viewport rect (pixels). Null = full frame. |
Actions
align — AlignAction
Creates an alignment layout result between a subject and target.
Primary: subject — Story Type ID clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| subject | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The sprite or layout being aligned. | |||
| to | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The target sprite to align against. | |||
| subjectAt | clr:Rune.Story.Actions.BoundsAnchor, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | BoundsAnchor? | The optional anchor on the subject. | ||||
| targetAt | clr:Rune.Story.Actions.BoundsAnchor, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | BoundsAnchor? | The optional anchor on the target. | ||||
| placement | clr:Rune.Story.Actions.AlignPlacement, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AlignPlacement? | The optional placement mode. | ||||
| offset | clr:System.Collections.Generic.IReadOnlyList`1[[System.Double, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<Double> | The optional x/y offset. |
arrange — ArrangeAction
Requests arrangement of a sprite or layout target.
Primary: target — Story Type ID clr:Rune.Story.Actions.LayoutRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR LayoutRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Actions.LayoutRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | LayoutRef | ✓ | The sprite or layout target to arrange. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation or transition name. |
column — ColumnAction
Creates a vertical column layout result.
Primary: items — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<SpriteRef>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| items | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<SpriteRef> | ✓ | The sprite or layout names contained by the column. | |||
| gap | number | Double? | The optional gap between items. | ||||
| hAlign | clr:Rune.Story.Primitives.HorizontalAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | HorizontalAlignment? | The optional horizontal alignment. | ||||
| vAlign | clr:Rune.Story.Primitives.VerticalAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | VerticalAlignment? | The optional vertical alignment. | ||||
| bounds | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | Optional layout bounds. |
create — CreateAction
Creates and attaches a root sprite instance to the scene. When With is provided, the sprite is created with opacity 0 and animated to its declared opacity.
Primary: sprite — Story Type ID clr:Rune.Story.Sprites.SpriteConstruction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteConstruction
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| sprite | clr:Rune.Story.Sprites.SpriteConstruction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteConstruction | ✓ | The sprite construction plan to execute. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation for a fade-in transition after creation. | ||||
| space | clr:Rune.Story.StorySpace, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | StorySpace? | The optional root composition space. Omitted root creates use world space. |
cue — CueAction
Marks a presentation cue point. Implicitly behaves as wait: done — all active completion sources settle before the cue takes effect. In presentation mode the story pauses at cue points until user input. In export/preview mode the cue acts as wait: done with an optional auto-cue hold duration.
Primary: duration — Story Type ID clr:Rune.Story.Completion.StoryDurationWaitTarget, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR StoryDurationWaitTarget
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| duration | clr:Rune.Story.Completion.StoryDurationWaitTarget, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | StoryDurationWaitTarget | The optional per-cue hold duration that overrides the global --auto-cue. Parsed from cue: 3s syntax. null means use the global default. |
data — DataAction
Applies insert, update, and remove operations to a chart sprite's data. The target sprite must implement IChartSprite.
Primary: target — Story Type ID clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The target chart sprite name. | |||
| insert | clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<ChartDataEntry> | ChartDataListConverter | The new data entries to insert. | |||
| update | clr:System.Collections.Generic.List`1[[Rune.Story.Sprites.ChartDataEntry, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<ChartDataEntry> | ChartDataListConverter | The data entries to update (value and/or color). | |||
| remove | clr:System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | List<String> | StringListConverter | The names of data entries to remove. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation for the data transition. |
destroy — DestroyAction
Removes a named sprite instance from the scene. When With is provided, fades the sprite's opacity to 0 before removing it on animation completion.
Primary: target — Story Type ID clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The sprite name to remove. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation for a fade-out transition before removal. |
morph — MorphAction
Replaces a named sprite instance while preserving state and dynamic properties.
Primary: sprite — Story Type ID clr:Rune.Story.Sprites.SpriteConstruction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteConstruction
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| sprite | clr:Rune.Story.Sprites.SpriteConstruction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteConstruction | ✓ | The replacement sprite construction plan. | |||
| sizing | clr:Rune.Story.Primitives.Sizing, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Sizing? | The optional sizing mode. | ||||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional transition name. |
motion — MotionAction
Moves an anchor sprite along an inline static path in parent-local coordinates.
Primary: target — Story Type ID clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The anchor sprite that follows the path. | |||
| path | string | String | ✓ | The inline absolute SVG path data. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation. Omission uses the built-in default preset. |
play — PlayAction
Requests non-speech audio playback.
Primary: url — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| url | string | String | ✓ | The audio source URL or identifier. | |||
| volume | number | Double? | The optional volume override. |
playback — PlaybackAction
Schedules deterministic video playback by driving a video sprite's source time.
Primary: target — Story Type ID clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR SpriteRef
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef | ✓ | The video sprite to drive. | |||
| to | duration | Double? | The target source time in seconds. | ||||
| loop | bool | Boolean | Whether playback loops indefinitely. | ||||
| rate | number | Double | The playback speed multiplier. | ||||
| muted | bool | Boolean | Whether embedded audio is muted. | ||||
| volume | number | Double | The embedded-audio gain. |
reorder — ReorderAction
Moves sprites within their parent layer's painter-order sibling list.
Primary: subjects — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<SpriteRef>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| subjects | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<SpriteRef> | ✓ | SpriteRefListConverter | The sprites to move in the supplied order. | ||
| before | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef? | The optional sibling before which the subjects are moved. | ||||
| after | clr:Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | SpriteRef? | The optional sibling after which the subjects are moved. |
row — RowAction
Creates a horizontal row layout result.
Primary: items — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<SpriteRef>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| items | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Primitives.SpriteRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<SpriteRef> | ✓ | The sprite or layout names contained by the row. | |||
| gap | number | Double? | The optional gap between items. | ||||
| hAlign | clr:Rune.Story.Primitives.HorizontalAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | HorizontalAlignment? | The optional horizontal alignment. | ||||
| vAlign | clr:Rune.Story.Primitives.VerticalAlignment, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | VerticalAlignment? | The optional vertical alignment. | ||||
| bounds | clr:Rune.Story.Primitives.Rect, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Rect? | Optional layout bounds. |
set — SetAction
Applies descriptor-backed property updates to named sprites in the scene.
Primary: properties — Story Type ID clr:Rune.Story.Primitives.StoryPropertyAssignments, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR StoryPropertyAssignments
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| properties | clr:Rune.Story.Primitives.StoryPropertyAssignments, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | StoryPropertyAssignments | ✓ | Descriptor-backed property references and values. | |||
| with | clr:Rune.Story.Animations.AnimationRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | AnimationRef? | The optional animation or transition name. |
speak — SpeakAction
Requests speech playback.
Primary: text — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| text | string | String | ✓ | The text to speak. | |||
| voice | clr:Rune.Story.TTS.VoiceRef, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | VoiceRef? | The optional voice identifier. |
track — TrackAction
Starts a named child timeline.
Primary: script — Story Type ID clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Actions.StoryAction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (ordinal), CLR IReadOnlyList<StoryAction>
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| script | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Actions.StoryAction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<StoryAction> | ✓ | The action script executed by the track. |
wait — WaitAction
Blocks the current timeline until a wait target completes.
Primary: target — Story Type ID clr:Rune.Story.Completion.StoryWaitTarget, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR StoryWaitTarget
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| target | clr:Rune.Story.Completion.StoryWaitTarget, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | StoryWaitTarget | ✓ | The target to wait on. |
Animations
spring — StorySpringAnimation
Describes an inline spring animation.
Primary: parameters — Story Type ID clr:Rune.Story.Animations.StorySpringParameters, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR StorySpringParameters
tween — StoryTweenAnimation
Describes an inline tween animation.
Primary: timing — Story Type ID clr:Rune.Story.Animations.StoryTweenTiming, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (ordinal), CLR StoryTweenTiming
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| easing | clr:Rune.Story.Animations.StoryEasing, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | StoryEasing | The tween easing curve. |
Objects
camera — StoryCamera
Persistent model state for the built-in Story camera.
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| x | dimension | Dimension | ✓ | ✓ | The world x coordinate shown at the canvas center. | ||
| y | dimension | Dimension | ✓ | ✓ | The world y coordinate shown at the canvas center. | ||
| zoom | number | Double | ✓ | ✓ | The finite positive uniform camera zoom. | ||
| rotation | number | Double | ✓ | ✓ | The finite clockwise camera angle, in degrees. |
story — RuneStory
Represents a compiled Rune Story with metadata and an action script. Runtime scene state is produced by Bake.
Primary: version — Story Type ID string (ordinal), CLR String
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| name | string | String | The story name used for window title and default output filename. | ||||
| canvas | clr:Rune.Story.Primitives.Size, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Size | The canvas size in pixels for resolving percentage values. Parsed from canvas: 1280x720. | ||||
| fps | number | Int32 | The default frame rate for preview/export hosts. | ||||
| script | clr:System.Collections.Generic.IReadOnlyList`1[[Rune.Story.Actions.StoryAction, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | IReadOnlyList<StoryAction> | The action script — an ordered list of actions executed during bake. |
world — StoryWorld
Persistent model state for the built-in direct world transform.
| Field | Story Type ID | CLR type | Req | Anim | Morph | Converter | Description |
|---|---|---|---|---|---|---|---|
| x | dimension | Dimension | ✓ | ✓ | The direct horizontal world translation. | ||
| y | dimension | Dimension | ✓ | ✓ | The direct vertical world translation. | ||
| scale | number | Double | ✓ | ✓ | The finite positive uniform world scale. | ||
| rotation | number | Double | ✓ | ✓ | The finite clockwise direct world angle, in degrees. | ||
| origin | clr:Rune.Story.Primitives.TransformOrigin, Rune.Story, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | TransformOrigin | ✓ | ✓ | The animatable world scale and rotation pivot. |
Grammar appendix (curated)
This section is curated, not generated from descriptors. It documents parser/host-level grammar that has no descriptor metadata.
Top-level file schema
story (required, version tag) and script (required, action list). Optional: name, canvas, fps, design, tokens, styles, plugins.
Animation with: forms
$<animationToken>nonespring: <damping>, <frequency>tween: <duration> (optional easing: x1, y1, x2, y2)
Animation names are token references, not a top-level registry. Use with: $name for a compiled animation token, with: none for an immediate change, or an inline Sibling Constructor for spring/tween. The former top-level animations: field is invalid.
Wait targets
done, settle, rest, speak, audio, video are bare selectors; a named completion source uses $path, a duration literal is for example 0.5s, and next waits one frame. The former :tag spelling is invalid.
Universal symbol references
Unquoted $ references are target-directed: the consuming Field or Primary requests its exact, ordinal Story Type ID facet. CLR assignability never selects between semantic facets.
SymbolReference := "$" [Domain ":"] Path
Path := Identifier ("." Identifier)*
Domain := "design" // v1beta1. is member traversal. $design:name explicitly selects the immutable DesignScope; $name uses lexical lookup before DesignScope. Quoted forms remain literal strings.
Persistent bindings
=path and !bind $path both install a one-way runtime property endpoint binding. v1beta1 accepts one direct, unquoted $path only; bindings cannot target $design:name.
Strict Story YAML profile
- standard YAML mappings, sequences, and scalars
- anchors, aliases, and merge keys are rejected
- !bind is accepted only on one unquoted plain $path
- !semanticType is accepted only on an alias token Primary
Design files, tokens, and styles
A design file is a strict .design.yaml document declaring design: v1beta1. Its root fields are design, extends, tokens, styles. Story-local design: is an ordered list of extensionless ./ or ../ paths; the valid import forms include ./name, ../name. implicit suffix is added during package-confined loading. Imports use first-visit DFS post-order and later compatible layers override or merge earlier layers.
Typed token declarations use type@name: value. The registered semantic value types are: animation, bool, brush, color, dimension, duration, float2, float3, float4, fontFamily, fontWeight, image, number, shadow, string, voice.
Story value type registry
| Story Type ID (ordinal) | Kind | CLR type | Null | Intrinsic default | Constraints |
|---|---|---|---|---|---|
animation | semantic | StoryAnimation | none | ||
array | structural | ImmutableArray<Object> | value | length | |
bool | semantic | Boolean | value | ||
brush | semantic | Brush | ✓ | null | |
color | semantic | SolidColorBrush | ✓ | null | |
dimension | semantic | Dimension | value | ||
duration | semantic | Double | value | numeric | |
float2 | semantic | Float2 | value | ||
float3 | semantic | Float3 | value | ||
float4 | semantic | Float4 | value | ||
fontFamily | semantic | String | value | length | |
fontWeight | semantic | StoryFontWeight | none | ||
image | semantic | StoryImageReference | none | ||
number | semantic | Double | value | numeric | |
ref | structural | StoryRefValue | ✓ | null | |
shadow | semantic | BoxShadow | value | ||
string | semantic | String | value | length | |
voice | semantic | StoryVoicePreset | none |
Only semantic descriptors are token-authorable facets. Structural IDs (array, ref) are registry-backed Composite Field values, not object types. Structural arrays freeze recursively to immutable values; structural refs use the immutable StoryRefValue contract rather than an object fallback or an unvalidated string.
Token constructors and semantic facets
| Constructor | Published semantic facet | Canonical form |
|---|---|---|
alias | exact source facet | alias@name: $source or alias@name: !semanticType $source |
animation | animation | animation@name: <Primary> |
azure | voice | azure@name: <Primary> |
bool | bool | bool@name: <Primary> |
brush | brush | brush@name: <Primary> |
color | color | color@name: <Primary> |
dimension | dimension | dimension@name: <Primary> |
duration | duration | duration@name: <Primary> |
float2 | float2 | float2@name: <Primary> |
float3 | float3 | float3@name: <Primary> |
float4 | float4 | float4@name: <Primary> |
fontFamily | fontFamily | fontFamily@name: <Primary> |
fontWeight | fontWeight | fontWeight@name: <Primary> |
image | image | image@name: <Primary> |
number | number | number@name: <Primary> |
shadow | shadow | shadow@name: <Primary> |
spring | animation | spring@name: <Primary> |
string | string | string@name: <Primary> |
tween | animation | tween@name: <Primary> |
voice | voice | voice@name: <Primary> |
windows | voice | windows@name: <Primary> |
alias@name: $source preserves one exact source facet without conversion. For a multi-facet source, select one exact facet with alias@name: !semanticType $source; semantic tags are valid only on alias Primaries. Direct assignment requires the target Field/Primary's exact facet, even when CLR types match. A concrete type@name: $source is the only cross-semantic conversion form: it resolves the source, runs the explicit target constructor, and publishes that target facet.
Built-in facets are the lowest-priority layer and are deterministic by ordinal name:
default:animation+voicefade:animationfemale:voicelinear:animationmale:voicesmooth:animationsnappy:animationThedefaultsymbol intentionally shares bothanimationandvoicefacets. The built-in voice facetsdefault,male, andfemaleare host-provided frozen intents; there is no author-facing platform voice constructor. The former top-levelvoice:registry is invalid.
Canonical styles
Styles use targetType@name: with an optional scalar base StyleRef Primary and sibling Field initializers. Nested Primary maps, bindings, child Sprites, Actions, and timelines are invalid. A style is a typed compile-time default set, not CSS or runtime state; every typed target Field is styleable, including public and inherited Composite Fields.
A local Composite target may use an extensionless ./ or ../ type path relative to the declaring design file. Style Fields are values or token references, not bindings.
Style construction metadata
Every Sprite construction accepts one construction-only style initializer, for example style: $title (or the explicit style: $design:title). It selects a typed DesignScope StyleRef; the metadata is expanded at compile time and is not runtime state.
Precedence (highest first):
instance Fieldinstance Primaryselected style Fieldbase style chainintrinsic default
Style constraints:
- construction-only metadata; not retained on runtime Sprites
- one same-target base StyleRef in the style declaration Primary
- all typed Sprite Fields are styleable
- no constructor Primary, children, Actions, timelines, bindings, or nested styles
Composite semantic value Fields
Composite definitions resolve declared Field type IDs through the same Story value registry that supplies design token semantic facets. The documented Field surface includes:
field@name: semanticTypepublic property declarationsaction@nameinputs with semantic value types- public Composite properties (typed semantic Fields)
- script-backed Composite Action inputs
- inherited Sprite Fields exposed by the Composite descriptor Field metadata may add
default,required,animatable, numeric bounds, or length constraints. Composite accepts only registered value Type IDs (including structural IDs); an object descriptor never becomes a value type and there is no object fallback. Token references request the exact semantic Field type during compile-time definition binding; private Composite members and public Actions are not styleable Fields.
Registry composition and plugin limits
Compilation composes plugin value types only from token constructors registered through the plugin registrar. Published Story Type ID/CLR/kind and constructor conflicts are rejected, and the composed registry is sealed before DesignScope construction. story syntax --reference loads plugin object descriptor registries for the generated object sections, but its value-type/constructor appendix currently remains the built-in host registry; plugin object descriptors therefore do not become Composite value types. Dynamic plugin loading is unavailable under Native AOT, where --reference degrades to built-ins only.
Compile-time references
- $name and $design:name resolve token, animation, voice, and style references during compilation
- AnimationRef and VoiceRef embed frozen values; no named animation/voice registry remains at runtime
- Composite semantic Field token references lower while the immutable definition is compiled Quoted
$namevalues remain literal strings.$design:nameexplicitly selects the immutable DesignScope; ordinary$namelookup uses lexical scope before DesignScope.