AgentSkillsCN

velato-api

当您编写使用 main vello crate 进行 GPU 加速的 2D 渲染——绘制形状、文本、图像、渐变,或配置 wgpu 渲染管线时,可选用此方案。

SKILL.md
--- frontmatter
name: velato-api
description: Use when writing Rust code that loads Lottie JSON animations, renders animation frames with velato, or integrates velato with vello rendering

Velato API Reference

Overview

Velato parses Lottie JSON animations and renders them to vello Scenes. Core workflow: parse JSON → create renderer → render frames.

Quick Reference

TypePurpose
CompositionParsed Lottie animation model
RendererRenders composition to graphics
RenderSinkTrait for custom backends (vello::Scene implements it)

Parsing

rust
use velato::Composition;

// From string (implements FromStr)
let comp = Composition::from_str(json_str)?;
let comp: Composition = json_str.parse()?;  // Also works

// From bytes
let comp = Composition::from_slice(bytes)?;

// From serde_json::Value
let comp = Composition::from_json(value)?;

Composition Fields

rust
comp.frames      // Range<f64> - valid frame range [start, end)
comp.frame_rate  // f64 - frames per second
comp.width       // usize - canvas width
comp.height      // usize - canvas height

Rendering

rust
use velato::{Composition, Renderer};
use velato::vello::kurbo::Affine;

let mut renderer = Renderer::new();

// Convenience method - returns new Scene
let scene = renderer.render_to_vello_scene(&comp, frame, Affine::IDENTITY, 1.0);

// Or append to existing scene
let mut scene = vello::Scene::new();
renderer.append(&comp, frame, Affine::IDENTITY, 1.0, &mut scene);

Animation Loop Pattern

rust
use std::time::Instant;  // or `instant::Instant` for WASM compatibility

let start = Instant::now();
let mut renderer = Renderer::new();

// In render callback:
let elapsed = start.elapsed().as_secs_f64();
let frame_offset = (elapsed * comp.frame_rate) % (comp.frames.end - comp.frames.start);
let frame = comp.frames.start + frame_offset;  // IMPORTANT: add frames.start

let scene = renderer.render_to_vello_scene(&comp, frame, Affine::IDENTITY, 1.0);

Common Mistakes

MistakeFix
Forgetting frames.start offsetAlways add comp.frames.start to calculated frame
Creating new Renderer per frameReuse single Renderer instance
Using frame outside valid rangeEnsure comp.frames.contains(&frame)
Using alpha as percentage (0-100)Alpha is normalized (0.0-1.0), not percentage

Re-exports

rust
use velato::vello;           // vello crate (when feature="vello")
use velato::vello::kurbo;    // kurbo geometry types
use velato::model;           // runtime model types (Layer, Content, etc.)

Unsupported Features

Position keyframe (ti, to) easing, time remapping (tm), text layers, image embedding, advanced shapes (stroke dash, zig-zag), advanced effects (motion blur, drop shadows), correct color stop handling, split rotations, split positions.