Guide to Custom Labels

Custom labels let you tailor information display for inventory, recipes, and more. This guide covers creating and configuring labels by duplicating or building from scratch.

Duplicating an Existing Label

It’s generally easier to copy an existing label. This can be done in one of two ways:

Within the Templates tab of Form Admin, click the ⚙️ icon within the Options column of an existing label and selecting Duplicate Label.

Alternatively:

  • Create a new label by clicking Add Label.
  • Add a name and select an entity type and entity for that label. Note that the entity you select is just a preview example — the label isn’t limited to it.
  • Within the Card Spec tab of the new label, use the field to paste in the json code from an existing label.

Creating a Label from Scratch

  • Click Add Label.
  • Add a name and select an entity type and entity for that label. Note that the entity you select is just a preview example — the label isn’t limited to it.

Card

Within the Card tab:

  • Click Add Item to add and remove label elements (text, barcodes, images, text, spacers, flows/stacks).
  • Select an individual item to adjust it’s size, position, style, etc.
  • Selecting an item in the layout list highlights its position in the label preview, and clicking an item in the preview selects it in the layout list. This makes it easier to find the item to edit in labels with many sections, such as SDS and COA templates.

Selecting label items from the layout list and the preview

  • You can also use value spec to bring in platform data. Learn more.
  • To show or hide elements based on a set condition, select the item and use the Visible field. This lets one label adapt to different scenarios without creating separate labels.
  • To embed one label inside another (e.g., a nutritional label inside a larger product label), add an Embed item in the Card tab and select the template to embed. The embedded label is edited in its own source template.

Base Style

Within the Base Style tab, change font style, size, weight, and color.

Page

Within the Page tab, configure print layout:

  • Set page size (width/height)
  • Set labels per page (Grid X/Y).
  • Adjust card bleed (extends background past the border) and padding.
A label page printout example with a 3×10 label configuration

Card Spec

Within the Card Spec tab, edit the label’s full JSON configuration directly.

Config

In the Config tab, preview the label for different entities by selecting different entity types/entities. You can also change the export format and use value spec to override the default label name in the Filename field.


Associating a Label with a Definition

Once you have created a label template, it can be linked to a definition.

  • Create a new definition or access an existing on.
  • Within the definition’s Runsheets and Labels tab and click Add New Runsheet.
  • In the modal, add a name and use the Label field to select your custom label.

Once associated, you can open the label from any entity page for any entity created using that definition.

For example, if you associate the label to an experiment definition, you can select Actions > Labels > [Label name] to view and print the label for all experiments in view.

Labels can also be exported automatically using triggers. For more information, refer to Exporting Labels via Trigger.


Adding Items using Value Spec

To use value specs to pull platform data into label items, select the label item and click f(x).

Common Value Specs

This section contains some common value specs you may want to copy-paste:

For recipes

recipe_name: text:${ref:recipe.name} or text:${ref:recipe.editable_name}
recipe_id: text:${ref:recipe.id}
recipe_metadata: text:${ref:recipe.metadata.metadata_name}
recipe barcode: text:${v:recipe.barcode}
recipe Lot ID: text:${ref:recipe.metadata.lot_id}
Ingredient within a recipe: text:${(id_source_map "entity/ingredient" ref:recipe.lotIngredientId)}
ingredient attribute within a recipe: text:${(id_source_map "fieldOptions:fieldoptionsRefName" (with_entity "ingredient" ref:recipe.lotIngredientId ref:ingredient.attributes.attributeRefName))}

For inventory amount

General lookup for all info: v:invAmount or ref:invAmount
title: text:${ref:invAmount.name}
barcode: text:${ref:invAmount.barcode}
lot: text:${expr:(coalesce ref:invAmount.ingredientLot.name json:"No Lot")}
category: text:${expr:(coalesce ref:invAmount.ingredient.category.name json:"Uncategorized")}
Lab: (ref:invAmount.lab.name)
Location type: text:${v:invLocalLocation.type.name}
Location within the lab: text:${expr:(join ref:invLocalLocation.path_names text:>)}
Metadata from the inventory's lot: text:${expr:(coalesce ref:recipe.metadata.MetadataRefName json:"")}

For inventory location

General lookup: v:invLocalLocation or ref:invLocalLocation

For ingredients/inventory

name: text:${ref:ingredient.name}
attribute_value: text:${ref:ingredient.attributes.attribute_name}
List attribute: (join ref:ingredient.attributes.hazard_id ", ")

For fields

i.e. Lab Requests, Custom entities, etc.

field_name: text:${ref:fields.field_ref}

For user context

i.e. Current project, Material Family, user data when exporting, etc.

Updated on October 7, 2026

Was this article helpful?

Related Articles