Figler renders a Figma page, frame, component, instance, or layer without launching a browser. The selected scene is resolved and compiled into one batched Skia document before rasterization.
Add the optional Skia dependency to use rendering:
def deps do
[
{:figler, "~> 0.1.0-beta.1"},
{:skia, "~> 0.3.7"}
]
endRender a layer
fig = File.read!("design.fig")
{:ok, png, metadata} =
Figler.Render.render(fig,
root: "12:34",
scale: 2,
background: :transparent,
format: :png,
strict: true
)
File.write!("selection.png", png)
metadata.boundsroot: accepts a scene GUID. Use page: with a page GUID or zero-based page index when the desired selection is a page:
Figler.Render.render(fig, page: 0, scale: 1)
Figler.Render.render(fig, page: "0:17", scale: 1)Do not pass root: and page: together.
Reuse an open document
Opening the archive once avoids repeated extraction when a job renders multiple selections:
document = Figler.Document.open!(fig)
{:ok, card, _metadata} = Figler.Render.render(document, root: "12:34")
{:ok, icon, _metadata} = Figler.Render.render(document, root: "56:78")A document returned by Figler.decode!/1 is also accepted.
For more control, prepare a rendering-neutral scene separately:
{:ok, scene} = Figler.Render.prepare(document, root: "12:34")
{:ok, png, metadata} = Figler.Render.render(scene, scale: 2, strict: true)Output options
Figler.Render.render(document,
root: "12:34",
format: :webp,
quality: 90,
scale: 2,
background: "#FFFFFFFF"
)Supported formats are :png, :jpeg, :webp, and :raw. quality: accepts an integer from 0 to 100 for formats that use it.
Backgrounds can be named colors, :transparent, "#RRGGBB", "#RRGGBBAA", RGB tuples, or RGBA tuples.
Strict rendering
Use strict mode for automated exports and tests:
case Figler.Render.render(document, root: "12:34", strict: true) do
{:ok, image, %{warnings: []} = metadata} ->
{:ok, image, metadata}
{:error, {:unsupported_render_features, warnings}} ->
{:error, warnings}
endNon-strict mode produces output when possible and returns structured %Figler.Render.Warning{} values in metadata:
{:ok, image, %{warnings: warnings}} =
Figler.Render.render(document, root: "12:34", strict: false)See Rendering Warnings for warning fields and stable codes.
Fonts
Provide the fonts required for deterministic text output:
Figler.Render.render(document,
root: "12:34",
strict: true,
fallback_font_paths: [
"priv/fonts/Inter-Regular.ttf",
"priv/fonts/NotoSansSC-Regular.ttf"
],
font_languages: ["en", "zh-Hans"],
system_font_fallback: false
)Figler does not silently bundle a fallback font. See Fonts.
Graph options
Pass graph resolver options under graph::
Figler.Render.render(document,
root: "12:34",
graph: [resolve_variables: :known, resolve_styles: :known]
)The selected render root already scopes graph construction. Most callers should keep the default resolver stages.
Error results
Rendering returns stable error shapes:
{:error, {:unsupported_render_features, warnings}}
{:error, {:invalid_render_options, errors}}
{:error, {:invalid_render_bounds, context}}
{:error, :skia_not_available}Output dimensions are validated before a canvas is allocated. See Errors and Options and Performance and Safety.