Skip to main content

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 are for this turn only

$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

VariableWhat it gives you
$uploads.images / .videos / .audiosThe arrays of files by type
$uploads.allEvery uploaded file
$uploads.hasImages / .hasVideos / .hasAudiostrue if at least one of that type was sent
$uploads.imageCount / .videoCount / .audioCountHow many of each
$uploads.images[0].nameFilename of the first image
$uploads.images[0].urlOriginal 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:

VariableWhat it gives you
$uploads.audios[0].transcriptTranscript of the first audio
$uploads.audios.firstTranscriptThe first available transcript
$uploads.audios.combinedTranscriptAll transcripts joined together
$uploads.audios.hasTranscriptstrue if any audio was transcribed
$uploads.audios.transcriptCountHow many audios were transcribed
The transcript isn't added to the question automatically

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.

The Allow Image Uploads setting on a model, enabling image analysis

Assets — your workspace's file library

Assets are static files you upload once and reference from any flow — a logo, a terms-of-service document, a set of product images. Unlike uploads, they're always available and don't depend on what the customer sent.

Managing assets

Upload and manage assets on the Assets page (under Document Store). Each asset gets a public URL. Every asset has a visibility:

VisibilityIn the variable palette?Usable in flows?
PublicYesYes — via $assets.<name>.url
PrivateHiddenNo — make it public first

Only public assets resolve at run time and show up in the palette.

Using assets in a flow

Open the variable palette, switch to the Assets tab (it has search across your library), and click an asset to insert it:

VariableWhat it gives you
$assets.<name>.urlThe public URL of that asset
$assets.allAll public assets as an array

The <name> is the asset's sanitized name (lowercase, no spaces); the palette shows the original filename and size so you can tell them apart.

Example — reference your logo and terms document in a prompt:

You are a support agent for our company.
Our logo: {{ $assets.company_logo.url }}
Refund policy document: {{ $assets.terms_of_service.url }}

Uploads vs. assets at a glance

Uploads ($uploads)Assets ($assets)
Comes fromThe customer, this turnYour workspace library
LifetimeJust the current turnPermanent until you remove it
SetupAutomatic (channels) / mapped (custom webhook)Uploaded once on the Assets page
Typical useAnalyzing a customer's photo or voice noteServing your logo, docs, product images