Uploads and Assets
Flowera handles two kinds of files, and it's worth knowing which is which:
- Uploads (
$uploads) — files a customer sends this turn: a photo in a chat, an image on Instagram, a voice note on WhatsApp. - Assets (
$assets) — files you keep in your workspace library and reuse across flows: logos, terms documents, product images.
This page explains how to use both in a flow. For uploading, organising, and setting visibility on assets, see Assets.
Uploads are per-conversation and temporary; assets are yours and permanent.
Uploads — media from the customer
Every flow can access an uploads variable holding whatever the customer sent this turn, grouped by type:
$uploads.images— images (png, jpg, webp, gif, heic…)$uploads.videos— videos (mp4, webm, mov…)$uploads.audios— audio (mp3, wav, m4a…)
These arrive automatically from the chat widget, Instagram, and WhatsApp — no setup. (For custom webhooks you map incoming file URLs to uploads.images / uploads.videos / uploads.audios in the Start node's payload mapping; see Custom webhook.)
$uploads holds only the media sent in the current message. A photo the customer sent earlier is not in $uploads on a later turn — it lives in the conversation history instead. This keeps each turn fast and avoids re-sending old files to the AI every message.
Sending images to the AI
For an LLM or Agent node to actually see an image, turn on Allow Image Uploads in that node's model settings. Without it, images are ignored even when present. You can also set Image Resolution (low / high / auto) to trade quality against cost.
When several images arrive in one turn, enable Label Images so the AI can tell them apart — it tags each one Image 1:, Image 2:, and so on, so answers can point to a specific image. (With a single image it does nothing.)
Handy upload variables
| Variable | What it gives you |
|---|---|
$uploads.images / .videos / .audios | The arrays of files by type |
$uploads.all | Every uploaded file |
$uploads.hasImages / .hasVideos / .hasAudios | true if at least one of that type was sent |
$uploads.imageCount / .videoCount / .audioCount | How many of each |
$uploads.images[0].name | Filename of the first image |
$uploads.images[0].url | Original source URL (for webhook/social uploads) |
Reference any of these with {{ }} in a text field.
Audio transcripts
If speech-to-text is enabled in your flow settings, audio the customer sends is transcribed automatically, and the text becomes available:
| Variable | What it gives you |
|---|---|
$uploads.audios[0].transcript | Transcript of the first audio |
$uploads.audios.firstTranscript | The first available transcript |
$uploads.audios.combinedTranscript | All transcripts joined together |
$uploads.audios.hasTranscripts | true if any audio was transcribed |
$uploads.audios.transcriptCount | How many audios were transcribed |
A transcript lives only in $uploads — it is not appended to {{$question}}. To use it, reference it explicitly in a prompt, e.g. {{$uploads.audios[0].transcript}}. This gives you full control over where the transcribed text appears.
