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 \n or 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:

  1. URL — any https:// URL. RowRender fetches via a CORS-safe proxy and caches per-batch.
  2. 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:

  1. Select all the frames in Figma before clicking Prepare config sheet. The plugin writes one demo row per frame, so you copy that pattern.
  2. Or duplicate rows manually, changing only the frame column.

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.