Skip to main content

alpha2_model/
lib.rs

1//! Versioned, host-independent project model for alpha2.
2//!
3//! This crate describes intent only. It contains no decoder handles, GPU
4//! resources, filesystem paths, or application-specific types.
5
6mod animation;
7mod audio;
8mod audio_load;
9mod caption;
10mod caption_import;
11mod checks;
12mod composition;
13mod easing;
14mod effect;
15mod error;
16mod fingerprint;
17mod generator;
18mod ids;
19mod layout;
20mod layout_values;
21mod lint;
22mod mask;
23mod project;
24mod provider;
25mod resource;
26#[cfg(feature = "schema")]
27mod schema;
28mod shapes;
29mod source;
30#[cfg(test)]
31pub(crate) mod tests;
32mod text;
33mod text_animation;
34mod time_map;
35mod timeline;
36
37pub use animation::{
38    Animated, AnimatedPoint, Interpolation, Keyframe, PointKeyframe, Vec2, VisualProperties,
39};
40pub use audio::{
41    AUDIO_EFFECT_STATE_MARGIN_MS, AudioEffect, AudioProperties, Ducking, EQ_FREQUENCY_RANGE_HZ,
42    EQ_Q_RANGE, EqBand, EqBandKind, FadeShape, Limiter, MAX_AUDIO_DELAY_MS, MAX_AUDIO_EFFECTS,
43    MAX_CHAIN_EFFECTS, MAX_COMPRESSOR_RATIO, MAX_ENVELOPE_MS, MAX_EQ_BANDS, MAX_EQ_GAIN_DB,
44    MAX_GAIN, MAX_LOOKAHEAD_MS, MIN_LEVEL_DB, MasterAudio, REVERB_DELAY_MS, TrackAudio,
45};
46pub use audio_load::AudioEffectLoad;
47pub use caption::{
48    CaptionCue, Captions, MAX_CAPTION_FONT_SIZE, MAX_CAPTION_NAME_BYTES, MAX_CAPTION_STYLES,
49    TextStylePatch,
50};
51pub use caption_import::{
52    CaptionImportError, ImportNotes, ImportedCaptions, MAX_CAPTION_FILE_BYTES,
53    MAX_CAPTION_FILE_CUES, caption_rows, parse_srt, parse_webvtt,
54};
55pub use composition::{
56    ClipComposition, Composition, CompositionControl, CompositionNode, CompositionReads,
57    MAX_COMPOSITION_CONTROLS, MAX_COMPOSITION_DEPTH, MAX_COMPOSITION_NODES, MAX_COMPOSITIONS,
58    MAX_EFFECT_INPUTS, MAX_FRAME_INLINED_NODES, MAX_GROUP_INPUTS, MAX_INLINED_NODES,
59    MAX_MERGE_LAYERS, MergeLayer, NodeInput, NodeOp, TimeScale,
60};
61pub use easing::{CubicBezier, Easing};
62pub use effect::{ClipBlendMode, ClipEffect, EffectValue};
63pub use error::{ModelError, ProjectLoadError, ShapeOwner};
64pub use fingerprint::{AudioStreamShape, MediaFingerprint, StreamTopology, VideoStreamShape};
65pub use generator::{Generator, GradientStop, MAX_GRADIENT_STOPS, Paint, Rgba, Spread};
66pub use ids::{ClipId, CompositionId, EffectResourceId, NodeId, ProjectId, TrackId};
67pub use layout::{
68    AlignContent, AlignItems, Display, FlexDirection, FlexWrap, GeneratorIssue, GridAutoFlow,
69    JustifyContent, LAYOUT_TEXT_DEFAULTS, LayoutBorder, LayoutInset, LayoutIssue, LayoutNode,
70    LayoutProblem, LayoutShape, LayoutTextStyle, MAX_GRID_TRACKS, MAX_LAYOUT_DEPTH,
71    MAX_LAYOUT_FONT_SIZE, MAX_LAYOUT_ISOLATED, MAX_LAYOUT_NODES, MAX_LAYOUT_TEXTS, Overflow,
72    Position,
73};
74pub use layout_values::{
75    GridEdge, GridPlacement, Insets, LayoutLength, LayoutOffset, LayoutSize, RepeatCount,
76    TrackBreadth, TrackComponent, TrackList, TrackSize,
77};
78pub use lint::{LintEdge, LintIssue, LintOwner, ShapeLintOwner};
79pub use mask::{MAX_CLIP_MASKS, MaskMode, Matte, MatteMode, ShapeMask};
80pub use project::{
81    BlendSpace, CURRENT_SCHEMA_VERSION, ColorPipeline, HDR_PEAK_NITS_RANGE, HdrSources,
82    MAX_CANVAS_DIMENSION, MAX_CANVAS_PIXELS, MAX_CLIPS, MAX_CLIPS_PER_TRACK,
83    MAX_PROJECT_JSON_BYTES, MAX_TRACKS, MAX_TRANSITIONS_PER_TRACK, Project, ProjectSettings, Rgb,
84    SAMPLE_RATE_RANGE,
85};
86pub use provider::{
87    LinearPrimaries, MAX_LOTTIE_DOCUMENT_BYTES, MAX_PROVIDER_DOCUMENT_BYTES, MAX_SEQUENCE_FRAMES,
88    MAX_SVG_DOCUMENT_BYTES, MissingFrames, ProviderSource,
89};
90pub use resource::{EffectResource, EffectResourceKind};
91#[cfg(feature = "schema")]
92pub use schema::{finish_json_schema, project_json_schema, project_limits_json};
93pub use shapes::{
94    Dash, EllipseGeometry, FillRule, LineCap, LineJoin, MAX_DASH_ENTRIES, MAX_PATH_SUBPATHS,
95    MAX_PATH_VERTICES, MAX_POLYSTAR_POINTS, MAX_SHAPE_DEPTH, MAX_SHAPE_ITEMS, MIN_POLYSTAR_POINTS,
96    Path, PathGeometry, PathVertex, PolystarGeometry, PolystarKind, RectangleGeometry,
97    ShapeGeometry, ShapeIssue, ShapeItem, ShapeProblem, ShapeTransform, StrokeItem, Subpath,
98    TrimItem, TrimMode, validate_shape_items,
99};
100pub use source::{MediaKind, MediaSource};
101pub use text::{
102    FONT_WEIGHT_RANGE, LETTER_SPACING_RANGE, LINE_HEIGHT_RANGE, MAX_FONT_FAMILY_BYTES,
103    MAX_TEXT_CONTENT_BYTES, MAX_TEXT_GENERATOR_FONT_SIZE, MAX_TEXT_PADDING, MAX_TEXT_SHADOW_BLUR,
104    MAX_TEXT_SHADOW_OFFSET, MAX_TEXT_SHADOWS, MAX_TEXT_STROKE_EXTENT, MAX_TEXT_STROKES, TextAlign,
105    TextBackground, TextShadow, TextStroke, TextStyle,
106};
107pub use text_animation::{
108    ANIMATOR_SCALE_RANGE, MAX_CLASS_NAME_BYTES, MAX_RANGE_INDEX, MAX_RUN_CLASSES,
109    MAX_TEXT_ANIMATORS, MAX_TEXT_RUNS, RANGE_PERCENT, RangeShape, RangeUnits, RunState, RunTime,
110    TextAnimator, TextAnimatorProperties, TextContent, TextRun, TextSelector, TextUnit,
111    valid_class_name,
112};
113pub use time_map::{LOOP_FADE_SECONDS, LoopMode, TimeMap};
114pub use timeline::{CacheIntent, Clip, ClipTransition, Timeline, Track, TrackKind};