Skip to main content

dioxuscut_rasterizer/
lib.rs

1//! Dioxuscut Rasterizer — Native browser-free frame rendering.
2//!
3//! Replaces Headless Chrome with a pure-Rust rasterizer pipeline.
4//!
5//! # Backends
6//!
7//! - [`TinySkiaBackend`]: CPU rasterizer using `tiny-skia`. Works everywhere — no GPU or browser required.
8//!
9//! # Example
10//!
11//! ```rust,no_run
12//! use dioxuscut_rasterizer::{TinySkiaBackend, Scene, SceneNode, Color};
13//! use dioxuscut_rasterizer::backend::{FrameConfig, RasterizerBackend};
14//!
15//! let backend = TinySkiaBackend::new();
16//! let mut scene = Scene::new();
17//! scene.push(SceneNode::Rect {
18//!     x: 0.0, y: 0.0, w: 1920.0, h: 1080.0,
19//!     fill: Color::rgb(15, 23, 42),
20//!     stroke: None, stroke_width: 0.0, corner_radius: 0.0,
21//! });
22//!
23//! let config = FrameConfig::new(1920, 1080, 0, 30.0);
24//! let img = backend.render_frame(&scene, &config).unwrap();
25//! img.save("frame_000001.png").unwrap();
26//! ```
27
28pub mod backend;
29pub mod font;
30mod image_cache;
31pub mod render;
32pub mod scene;
33pub mod tiny_skia_backend;
34mod video_cache;
35#[cfg(feature = "gpu")]
36pub mod wgpu_backend;
37
38pub use backend::{FrameConfig, RasterError, RasterizerBackend};
39pub use font::FontCache;
40pub use font::{
41    layout_text_box, measure_text_width, PositionedTextLine, TextBox, TextBoxLayout,
42    TextHorizontalAlign, TextOverflow, TextVerticalAlign,
43};
44pub use render::{
45    build_pipe_ffmpeg_args, render_all_frames, render_frame_timed, render_parallel,
46    render_still_fallible, render_to_ffmpeg_pipe, render_to_ffmpeg_pipe_fallible, save_frame,
47    NativeRenderConfig, PipeConfig, RenderCancellationToken, RenderControl, RenderProgress,
48    StillImageFormat, VideoCodec,
49};
50pub use scene::{
51    AudioTrack, BlendMode, ClipRegion, Color, GradientStop, ImageFit, MaskMode, Scene, SceneFilter,
52    SceneNode, SceneShadow, Transform2D,
53};
54pub use tiny_skia_backend::TinySkiaBackend;
55pub use video_cache::{probe_video_metadata, VideoMetadata};
56#[cfg(feature = "gpu")]
57pub use wgpu_backend::WgpuBackend;