Expand description
Takumi is a library with different parts to render UI component trees to images. This crate contains the core logic for layout and rendering.
Checkout the Quick Start if you are looking for napi-rs / WASM bindings.
§Example
use takumi::{
layout::{
node::Node,
Viewport,
style::{Length::Px, Style, StyleDeclaration},
},
resources::font::FontResource,
rendering::{render, RenderOptions},
GlobalContext,
};
// Create a node tree with `Node::container` and `Node::text`
let node = Node::container([Node::text("Hello, world!").with_style(
Style::default().with(StyleDeclaration::font_size(Px(32.0).into())),
)]);
// Create a context for storing resources, font caches.
// You should reuse the context to speed up the rendering.
let mut global = GlobalContext::default();
// Load fonts
global.font_context.load_and_store(
FontResource::new(include_bytes!("../../assets/fonts/geist/Geist[wght].woff2"))
);
// Create a viewport
let viewport = Viewport::new((1200, 630));
// Create render options
let options = RenderOptions::builder()
.viewport(viewport)
.node(node)
.global(&global)
.build();
// Render the layout to an `RgbaImage`
let image = render(options).unwrap();§Feature Flags
woff2: Enable WOFF2 font support.woff: Enable WOFF font support.svg: Enable SVG support.rayon: Enable rayon support.
§Credits
Takumi wouldn’t be possible without the following works:
Re-exports§
pub use error::Error;pub use error::Result;pub use error::StyleSheetParseError;
Modules§
- error
- Error handling types and utilities.
- keyframes
- Shared deserializers for structured and shorthand keyframe inputs. Shared keyframe input parsing used by external bindings.
- layout
- Layout related modules, including the node tree, style parsing, and layout calculation.
- rendering
- Rendering related modules, including the image renderer, canvas operations.
- resources
- External resource management (fonts, images)
Structs§
- Global
Context - The main context for image rendering.