Sheet format reference
RowRender reads a single tab in a Google Sheet. The first row is headers. Every row after is a render. The simplest possible sheet looks like this:
name frame headline product_image hero_v1 1080x1080 "Save 30% today" https://cdn.../shoe.jpg hero_v2 1080x1080 "Limited release" https://cdn.../shoe.jpg hero_v1_story 1080x1920 "Save 30% today" https://cdn.../shoe.jpg
Required columns
name
The filename for the resulting PNG (without extension). RowRender sanitizes characters that are illegal on common filesystems. name values must be unique within a batch — duplicates get auto-suffixed.
frame
The exact name of the Figma frame to render this row from. Match is case-sensitive. If you select multiple frames during Prepare config sheet, RowRender writes one demo row per selected frame so you can copy the pattern for size variants.
Dynamic columns
Every other column maps to a layer name in your Figma frame. Column header = layer name. Values:
- Text layers: cell contents replace the layer's text. Use
\nor a real newline for line breaks. - Image layers: cell contents are either a
https://URL or a filename matching one in your materials folder (Figma desktop only).
Auto-fit text
Append __autofit to a column header to enable auto-fit for that text layer. Long copy gets resized down to fit the layer's bounding box (font size, line-height and letter-spacing all scale proportionally). Useful for multi-language ads.
name frame headline__autofit es_long 1080x1080 "Aprovecha hasta 30% de descuento solo este fin de semana"
Want to cap the number of lines? Add (max_lines:N) after __autofit. Auto-fit will keep shrinking until the text fits in at most N lines.
name frame headline__autofit(max_lines:2) es_long 1080x1080 "Aprovecha hasta 30% de descuento solo este fin de semana"
The Prepare config sheet flow exposes both controls — check "autofit" on a text layer, then optionally type a number into the "max lines" box next to it.
Image cells
Two ways to provide an image:
- URL — any
https://URL. RowRender fetches via a CORS-safe proxy and caches per-batch. - Filename — bare filename like
shoe-red.jpg. On Figma desktop, pick a local materials folder in the plugin; RowRender matches the filename to a file in that folder.
Figma plugin runs in the web work fine — they just don't support local folders, so use URLs.
Google Drive URLs
Drive share links work, with one requirement: the file's sharing must be set to "Anyone with the link". Right-click the file in Drive → Share → set General access to Anyone with the link, then copy the share URL into the sheet's image cell.
Private Drive files (Restricted sharing) won't work — RowRender intentionally doesn't request the broad drive.readonly scope (it would require an annual third-party security audit), so we can't fetch files only the owner can see. If you can't change a file's sharing, re-host the image on a CDN, S3, or any public URL.
Multi-frame variants
Want to render the same row at multiple sizes? Two patterns:
- Select all the frames in Figma before clicking Prepare config sheet. The plugin writes one demo row per frame, so you copy that pattern.
- Or duplicate rows manually, changing only the
framecolumn.
What counts as a render
One row that successfully exports a PNG = one render. Rows that fail (frame not found, layer missing, image fetch error) don't count toward your quota.
Stuck? See FAQ + troubleshooting.