---
title: "Share photos, files, and voice notes"
description: "Attach a photo, a document, or a recorded voice note to an IoTFlows chat from any client: on the web dashboard the paperclip beside the composer opens Photo or Video, File, and Camera, and the preview that follows carries the compressed-versus-original choice, where compressed caps the longest side at 1600 px and arrives as a thumbnail under Media while an original arrives as a download row under Files. Voice notes record by holding the microphone, iOS and Android add slide-left-to-cancel and slide-up-to-lock, and both phones can share a photo in from another app, which the web cannot."
category: "Send and find messages"
source_url: "https://www.iotflows.com/docs/messaging/share-files-and-voice-notes/"
---
# Share photos, files, and voice notes

Get an image, a document, or a recorded note to your team from any client.

Every attachment travels the same way: pick it, look at the preview, send it. Two things change the outcome. Whether an image goes compressed or at full resolution decides how it arrives, and which client you are on decides what you can attach at all.

**Before you start:** have a chat open. See [Start a direct or group chat](/docs/messaging/start-a-chat/).

## Send a photo or video
1. Open the chat.
2. Select the paperclip to the left of the composer.
3. Select **Photo or Video**.
4. Pick one or more images, or a video.
5. Type a note into the **Type a message...** box if you want one.
6. Select the send arrow.

Dragging files from your desktop onto the open thread opens the same preview, which is faster than the menu when the file is already on screen.

![The chat composer's paperclip menu open over the Write a message box, listing Photo or Video, File, and Camera, with a highlight box around the paperclip that opened it](/images/messaging/msg-file-01.webp)

*Attaching a photo or video.*

Send several at once and each one becomes its own message, and the note you typed is repeated under every one of them. A reply you had lined up attaches to the first.

## Compressed or original
Two buttons sit at the top left of the preview, and the one in blue is the one that will be used. The picture icon is **Send in a quick way**, which compresses. The document icon is **Send without compression**, which sends the file you picked, byte for byte.

Compressing caps the longest side at 1600 px and re-encodes the image as WebP, which is why a phone photo sent this way lands in the thread in a moment.

Send the original when someone will zoom into it: a nameplate, a crack, a wiring detail. Send compressed for everything else. The original is slow on plant Wi-Fi and nobody waits for it.

The choice also decides how the image arrives. A compressed image appears in the thread as a picture you can open, and it is listed under **Media** in chat info. An original arrives as a file row with a download button, no thumbnail, and it is listed under **Files**.

![The attachment preview dialog showing an image, with two icon buttons at its top left: numbered callout 1 marks the picture icon that compresses, and callout 2 marks the document icon that sends the original](/images/messaging/msg-file-02.webp)

*Send the original when someone will zoom into it. Compressed for everything else.*

> **Warning:**
> **Sending a video?**
>
> Select **Send without compression** first, because the browser's compression step handles still images only.
>
> If the preview closes and nothing appears in the thread, that is what happened: pick the video again and send it without compression.

## Send a file
1. Select the paperclip, then **File**.
2. Pick one or more files.
3. Check the names and sizes listed in the preview.
4. Select the send arrow.

The browser's chooser applies no type filter, so a PDF, a spreadsheet, a DXF, and a firmware binary all go. If everything you picked is a JPEG, PNG, GIF, WebP, or SVG, the compress button appears here too, set to original.

## Take a photo in the app
Select the paperclip, then **Camera**. The browser asks for permission the first time, your webcam appears, and **Capture** freezes a still that lands in the usual preview.

Use this for a whiteboard or a printed work instruction sitting next to the laptop. For anything you have to walk to, use the phone: its camera reaches the machine and the laptop does not. The web capture is a still image, so recording video is a phone capability.

## Record a voice note
A *voice note* is an audio message recorded in the composer and posted to the thread like any other message.

1. Empty the composer. The microphone button appears only when there is no text in it.
2. Hold the microphone down. It turns red and pulses while it records.
3. Release to stop.
4. Play the recording back in the player that replaces the composer.
5. Select the send arrow, or the **X** to throw it away.

Nothing is posted until you send it, so a recording you dislike costs nothing. In the thread, a voice note arrives as a play button, a waveform, and its length. The waveform is drawn from the audio itself the first time anyone plays it, so it looks flat until then.

![Two voice notes in a chat thread under a PDF attachment, each one a circular play button, a bar waveform beside it, and the recording's length underneath](/images/messaging/msg-file-03.webp)

*A voice note with its waveform.*

On iOS and Android, hold the microphone in the same place, then slide left to cancel the recording or slide up to lock it so you can stop holding. Releasing goes to the same preview the web shows.

![An iOS chat screen recording a voice note: the microphone button is enlarged, a running clock and a Slide to cancel hint fill the composer row, and an arrow marks the hold gesture on the button](/images/messaging/msg-file-05.webp)

*Hold to record a voice note on mobile.*

## Share from another app
A photo you just took in the camera app, or a PDF a supplier emailed you, can go straight into IoTFlows without opening it. On iOS this is a *share extension*: a small piece of the app that the system share sheet runs, which uploads the attachment and posts the message over its own connection rather than waking the full app.

1. Select **Share** in the app holding the file.
2. Select **IoTFlows**.
3. Under **Create as**, select **Send as Message**.
4. Under **Attach as**, select **Images** or **Files**.
5. Select **Continue**, then pick the chat.

**Create as** also routes to **Maintenance Request**, which opens the request form with the attachment staged. See [Submit a maintenance request](/docs/maintain/submit-a-request/). iOS adds **Production Work Order** as a third destination; Android offers the first two.

The web dashboard is not a share target. Dragging a file onto an open thread is the closest thing a browser has.

Diagram: A diagram in three stages, left to right. A box reading 'Another app: Photos, Files, a supplier's email' has an arrow into a box reading 'IoTFlows share sheet: Create as, then Attach as Images or Files'. Three arrows leave it: to 'Send as Message, pick a chat, posts into the thread', to 'Maintenance Request, opens the request form with the files staged', and to 'Production Work Order, iOS only'. A line underneath reads: the web dashboard is not a share target, drag a file onto the thread instead.

*The share sheet routes: another app to IoTFlows, then to a chat or a maintenance request.*

## Browse a chat's media, files, and voice notes
Select the chat's name or picture in the header to open chat info. Four tabs run across it: **Members**, **Media**, **Files**, and **Voice**.

| Tab | Holds |
|---|---|
| **Media** | Compressed images, as a grid of thumbnails. Select one to open it full size. |
| **Files** | Everything sent without compression: documents, videos, and original-quality images. |
| **Voice** | Voice notes, each with its own player. |

Each tab loads the most recent items and fetches older ones as you scroll. An empty one says so: "No images have been shared in this chat."

An image sent as an original is under **Files**, not **Media**, which is where people go looking for a photo they know they sent.

![The chat info panel with the Media tab open, showing a grid of shared image thumbnails. Numbered callouts mark the Media, Files, and Voice tabs across the top](/images/messaging/msg-file-04.webp)

*Everything shared in a chat, browsable by type.*

## Download and save
On the web, every attachment carries a download control: the round button on a file or voice bubble in the thread, the download control in the expanded image, or the row itself under **Files**. The file arrives wherever your browser puts downloads, under the name it was sent with.

On iOS, open the image or video and select **Share** for **Save Video**, **Save to Files**, or AirDrop. On Android, open the image and select **Save to phone**, which writes it into `Pictures/IoTFlows` or `Movies/IoTFlows` and reports progress in a system notification. Tapping a document on Android downloads it and hands it to whichever app opens that type, rather than keeping a copy in your files.

## Attachment types
| Type | Web | iOS | Android | Size or format notes |
|---|---|---|---|---|
| Photo | Yes, compressed or original | Yes, always compressed | Yes, compressed or original | Web compression caps the longest side at 1600 px and writes WebP. iOS re-encodes to JPEG at a low quality setting with no original option. Android compresses to WebP unless you check **Send original (no compression)**. |
| Video | Yes, uncompressed only | Yes | Yes | Arrives in the thread as a file row on the web, and is listed under **Files** on every client. |
| Any other file | Yes | Yes | Yes | The browser's chooser enforces no type filter and no size limit. Several at once is fine. |
| Camera capture | Yes, still photo | Yes, photo or video | Yes, photo or video | Web capture uses the webcam at its own resolution. Android splits the choice into **Take photo** and **Record video**. |
| Voice note | Yes, hold the microphone | Yes | Yes | Phones add slide left to cancel and slide up to lock. |
| Shared in from another app | No | Yes | Yes | iOS offers three destinations, Android two. |

You do not need the phone app to share files. Everything except the share sheet and video capture works in the browser, so a planner at a desk never has to install anything.

## When an upload fails
| What you see | What happened |
|---|---|
| **Failed to upload file.** | The upload was rejected or threw. Nothing was posted to the chat. Send it again. |
| **An error occurred while uploading the file.** | The connection dropped part way through. The progress bar stops and no message appears. |
| **Waiting for Network** | The file reached storage, but chat's live connection was down when IoTFlows tried to post the message, so nobody sees it. See [Send messages](/docs/messaging/send-messages/#offline). |
| **Error downloading file:** | The download link could not be issued. Reload the tab and select the download again. |

A voice note is the one case with no toast. If it fails, its bubble sits in the thread at whatever progress it reached and never turns into a message. Record it again.

## See also
- [Send, reply to, edit, and delete messages](/docs/messaging/send-messages/)
- [Submit a maintenance request](/docs/maintain/submit-a-request/)
- [What works offline](/docs/get-started/offline-behavior/)
- [Manage chat members and settings](/docs/messaging/manage-a-chat/)
- [Install the mobile app](/docs/get-started/install-mobile-app/)
