A Menu and Pricing-Board Workflow
Restaurant and retail menus require photography-quality food visuals, legible pricing typography, and frequent content updates that make manual design impractical. This guide explains how to build a menu and pricing-board workflow in the Floniks editor: generating consistent food photography for each item, compositing it into a locked board layout, rendering pricing text from a structured data input, and exporting to digital signage and print specs. Once the template is saved, updating a price or swapping a dish image takes under two minutes without a designer or a new photo shoot.
Generating Consistent Food Photography at Scale
Food photography has a strict visual language: appetizing color, natural texture, appropriate depth of field, and a consistent shooting angle across the menu so the layout reads as a unified design system. In Floniks, a Food Photography Generation node handles this with a structured prompt template that locks the photographic style while allowing the dish description to vary.
The base prompt for a modern bistro menu might read: "professional food photography, overhead 45-degree angle, shallow depth of field with soft bokeh background, natural daylight from left, on a white ceramic plate with a neutral linen napkin, clean minimalist plating, appetizing warm tones, commercial quality, no artificial garnishes." The only variable input is the dish description: "pan-seared salmon with lemon beurre blanc and asparagus spears" or "double cheeseburger with caramelized onions and aioli on a brioche bun."
For a menu with thirty items, add thirty Food Photography Generation nodes in a batch branch, each receiving the same style configuration from a shared Style Config node. This ensures that the salmon photograph and the burger photograph are shot in the same light, at the same angle, with the same depth of field — creating the visual consistency that makes a menu feel designed rather than assembled from stock images. Run the entire batch in one session. Review the outputs, flag any items that need a re-run with a different dish description phrasing, and approve the rest. The approved images feed the layout compositor.
Compositing the Locked Board Layout
The menu board layout is the part of the workflow that never changes between updates. It contains the restaurant logo, the grid structure that positions each dish image, the typography zone for item names and prices, and any decorative brand elements. In Floniks, all of these are encoded in locked configuration nodes that a manager cannot accidentally edit.
Start with a Layout Config node that defines the grid: number of rows, number of columns, cell dimensions in pixels, gutter width, and the pixel coordinates of the logo placement zone. For a four-panel menu board at 1920x1080 per panel, a two-row by four-column grid gives eight slots per panel across four panels — sufficient for thirty-two items. The Layout Config feeds a Grid Compositor node that places each generated food image into its designated cell, cropping and scaling to fit without distortion.
The brand element layer — logo, color block headers, decorative dividers — is rendered as a transparent PNG overlay from a Brand Elements node. This overlay sits above the food image layer and below the text layer in the compositing order, ensuring that brand elements are never obscured by photography and text is always readable. Set the header color to match the restaurant brand color precisely using the hex value from the brand style guide. Consistency here matters: a menu board that uses a slightly different shade of burgundy than the physical signage undermines the brand coherence that makes customers feel confident about the establishment.
Rendering Pricing Text from Structured Data
The most operationally valuable feature of a menu workflow is the ability to update pricing without a designer. In Floniks, a Data Input node accepts a JSON object or a CSV file containing the item names, descriptions, and prices for every dish. The workflow reads this data at run time and renders the text into each grid cell using a locked Text Style Config that defines font family, size, color, and layout rules.
The data structure for a single item looks like: "slot": 3, "item_name": "Pan-Seared Salmon", "description": "lemon beurre blanc, seasonal vegetables", "price": "28". The slot number tells the Grid Compositor which cell this item occupies. The Text Render node reads the item name, description, and price and renders them into the text zone of that cell using the locked typography configuration: item name in a bold 36pt serif, description in a regular 20pt serif in medium gray, price in a bold 32pt serif in the brand accent color.
When a price changes, the manager opens the data file, updates the price field, re-runs the workflow, and the updated menu board is exported automatically. No design software is opened. No file is sent to a designer. No export is done manually. The entire update cycle from data edit to exported file takes under three minutes. For a restaurant that updates pricing weekly due to ingredient cost fluctuations, this represents a meaningful reduction in operational overhead over the course of a year.
Step by step
- 1
Open the editor and add a Data Input node with your menu data
Navigate to /editor and create a new workflow. Add a Data Input node and paste your menu data in JSON format: an array of objects each containing slot, item_name, description, and price fields. This node is the only input that changes between updates.
- 2
Add a Food Photography Generation batch and a shared Style Config
Create a Style Config node with your photography style prompt. Add one Food Photography Generation node per menu item, each connected to the Style Config and receiving the dish description from the corresponding slot in the Data Input. Run this branch first to generate and approve all food images before proceeding.
- 3
Configure the Layout Config and Grid Compositor nodes
Add a Layout Config node defining the grid dimensions, cell sizes, and logo placement. Connect it to a Grid Compositor node. Wire each approved food image to its designated cell input. Add a Brand Elements node for the logo and decorative overlay and connect it as a layer above the food images.
- 4
Add a Text Render node connected to the Data Input and a Text Style Config
Create a Text Style Config node with the locked typography settings: font family, sizes, and colors for item name, description, and price. Add a Text Render node that reads item_name, description, and price from the Data Input and renders them into each cell using the Text Style Config. Connect the text layer above the brand elements layer in the compositor.
- 5
Add parallel export branches for all distribution formats
Connect the final composite to a Collect node. Add four parallel export nodes: Digital Signage (PNG at display resolution), Print PDF (300 DPI with bleed), Web JPEG (1200x675 compressed), and Delivery App crop (1080x1080 per item). Run the workflow and verify all four outputs before deploying.
FAQ
Can the workflow handle menu boards with different layouts for different sections, like appetizers and mains?+
Yes. Add a separate Layout Config node for each section with its own grid dimensions, and route the relevant dish image and data inputs to the corresponding compositor. Use a Section Header node between sections to render the category label in the brand style. All section composites collect into a single multi-page export at the end.
How do you mark a menu item as sold out without regenerating the entire board?+
Add a "sold_out" boolean field to each item object in the Data Input. Add a conditional Overlay node downstream of the Text Render node that checks this field and, when true, renders a "Sold Out" badge in the brand style over the dish image cell. The badge is composited at the top of the cell stack. Update the data file and re-run the workflow — only items with the sold_out flag true will show the badge.
Related guides
Build it on Floniks
Image, video, digital humans, and reusable workflows on one canvas. Sign up gets you starter credits — no card required.
Explore Floniks