# Images and Attachments

Send HEIC/HEIF photos, view them everywhere (thumbnails, inline, galleries, lightboxes), force or exempt from preview, and resize images on pages.

import { Aside, Tabs, TabItem, Steps } from '@astrojs/starlight/components';

We treat HEIC and HEIF images like any other file: they render consistently across thumbnails, inline previews, galleries, and lightbox views. If a preview isn't suitable, exclude the format from previews or use a low-res fallback.

## Supported formats

| Format | Default behavior |
|--------|------------------|
| HEIC/HEIF | Keep the original for download; the system generates a JPEG copy for previews |
| JPEG/PNG/WebP | Render at full quality |

## Viewing HEIC/HEIF

1. Attach a photo from an iPhone or Mac.
2. The platform creates a browser-compatible JPEG copy for previews, while the original HEIC/HEIF is preserved for download.
3. See it in the same places as regular images:
   - **Attachment thumbnails** below comments and email bubbles
   - **Inline embed** inside a comment or task description
   - **Board gallery** or gallery views that show attachments
   - **Task detail lightbox** with a thumbnail strip at the bottom

## Downloading HEIC/HEIF

HEIC and HEIF photos uploaded to tasks and comments retain their original file format in the download. When you click **Download** on an attachment:

- The original HEIC/HEIF file is downloaded, preserving the full image quality
- Previews across the platform use the generated JPEG copy for faster rendering and broader compatibility

This ensures you can access the highest-quality version of your photos while maintaining fast, consistent previews everywhere else.

## Who can download attachments

<span class="label label--brand">New</span> Only people who can see the parent ticket can download its attachments. Access follows board membership: people who are not the owner, an Admin, or a Member of that board cannot reach downloads.

### How it works

- When opening a task or viewing the task detail lightbox, the system checks that you own the board or are an Admin or Member before exposing download URLs.
- If you are not on the board, downloads come back as not found.
- The board owner, Admins, and Members who can see the ticket can download files. Agents on that board can download too.
- This change prevents unauthorized downloads for attachments that originated on private or board-limited tasks.

### What this protects

- Attachments stored on private tickets are not reachable by users who should not see that context.
- AI-generated task previews now respect the same access gate, ensuring draft images on private tickets are not exposed outside the intended scope.
- Regular downloads continue to work as before for anyone with proper ticket visibility.

### When it applies

- The board owner, Admins, Members, and AI agents on the board can download its attachments.
- People who are not the board owner, an Admin, or a Member cannot reach downloads. A public share link can show the board, and it does not let them download.

## Excluding previews

To prevent HEIC/HEIF from generating previews (e.g., if the file is too large for preview generation):

1. Open the attachment's context menu (three dots).
2. Select **Excluded from previews** to disable automatic preview generation.
3. Uploaders still receive the file; observers only see the original format and a download link.

## Lightbox image strip

In the task detail lightbox, the thumbnail strip shows all attachments in that task. Supported formats and non-preview status appear consistently across all attachments.

## Handling malformed previews in the lightbox strip

If the lightbox shows a broken image icon for a non-decodable file:

- A file icon now appears instead of a broken icon, making it clear the image content could not be decoded.

## Warnings for unexpected content

If a file exhibits preview or display issues (broken icons, no thumbnail, or an unexpected format shown), check:

- The file is flagged as excluded from previews (if the goal was to prevent preview).
- The file is a HEIC/HEIF image under preview logic (historically, some browsers rendered these as named files before conversion completed).

## Upload tips

- **Keep resolution manageable:** Very large HEIC images can lead to longer preview conversion times.
- **Review lightbox strip:** If a thumbnail seems wrong after a HEIC upload, the browser might still be loading a placeholder until conversion finishes.

## Paste support

You can paste photos directly into comments and task descriptions. The system handles both HEIC/HEIF files and regular image formats in the same paste handler:

- HEIC/HEIF: Preserves the original and generates a JPEG preview
- JPEG/PNG/WebP: Downloads as-is

This gives you a single paste workflow whether you're uploading from Photos via copy-paste or dragging and dropping files.

[Learn more about keyboard shortcuts for superhuman-style snippets in the Superhuman-Style Snippets documentation.](/features/superhuman-snippets/)

## Handling blocked image hosts

<span class="label label--brand">New</span> If your network or a firewall blocks the image server domain, attachments now retry through the app domain and display instead of staying broken.

### How it works

- Images usually load directly from `files.hypertask.app`.
- When a request to `files.hypertask.app` fails (for example, due to network restrictions or a firewall), the app retries once through `app.hypertask.ai`.
- On successful retry, the image displays in comments, task descriptions, attachments, and the task detail lightbox.
- This happens automatically; no configuration is required on your side.
- Normal networks that can reach `files.hypertask.app` continue to load images straight from the image server, so performance is unchanged.

### When this helps

This change helps users on restrictive networks (including some corporate Wi-Fi and VPNs) where:

- The image host is blocked, resulting in broken images or connection errors.
- You cannot easily unblock the domain.
- You don't have control over network policy.

Example scenario: A comment includes an image attachment, but your network blocks `files.hypertask.app`. Previously the image would appear broken. Now the app retries through `app.hypertask.ai`, and the image loads as expected.

### Reloading for browsers that blocked images before

If you saw broken images on a previous visit and still use a network that blocks the image server:

- <strong>Refresh the ticket page</strong> and the attachments with retry behavior will load properly.
- After the initial load, the images are cached by your browser, so you should not need to re-enter restrictive network conditions to see them.

[Learn more about keyboard shortcuts in the Keyboard Shortcuts documentation.](/features/keyboard-shortcuts/)

## Resizing images on pages and ticket descriptions

You can manually adjust image size on pages and in ticket descriptions.

### Auto-fit vs manual resize

- <strong>Auto-fit:</strong> Images without a saved size automatically adjust to fit the context (mobile, desktop layout, and container width).
- <strong>Manual resize:</strong> Drag the handle on any image to set a custom width. When you type text nearby and the edit is saved, the new size is persisted.

### Persisted size

- After you drag an image's resize handle and see "Saved," the image's width is saved to that page or ticket description.
- Reloading the page or ticket keeps the image at the custom size instead of reverting to auto-fit.
- Using multiple sizes on the same page works as expected: each one stays where you set it.

### Mobile experience

- On mobile, resized images still respect screen width and remain readable.
- Auto-fit images respond to pinch-to-zoom; resized images follow the set width.

### Common use cases

- <strong>Bulleted lists with images:</strong> Size images consistently (e.g., 50% width) so they look uniform in lists.
- <strong>Diagrams on pages:</strong> Grow or shrink diagrams on a page to finer steps.
- <strong>Ticket descriptions:</strong> Include screenshots at a consistent scale along with typed text.

[Learn more about creating pages in the Pages documentation.](/features/pages/)

<span class="label label--brand">Fix</span> When uploading a file and immediately saving before the preview appears (for example with keyboard shortcuts or Save & new), the attachment now persists on the task instead of dropping.
