# Upload and manage images

The Media storage is your project's built-in image library. Upload images, import free stock photos, or generate images with AI. Then reuse them in push notifications, web push, emails, in-app messages, Cloud Pages, and other content, directly in the editor or via a stable URL.

To open the Media storage, go to **Content > Media storage** in the Pushwoosh Control Panel.

The page has three tabs:

* **Library:** the images already stored in the project.
* **Stock photos:** search free photos from Pexels and save them to the library.
* **Generate with AI:** describe an image and save the result to the library.

<img src="/content-media-store-13.webp" alt="Media storage page with Library, Stock photos, and Generate with AI tabs, the upload dropzone, and an image grid with Figma badges" />

## Who can add and delete images

To add images (upload, stock import, AI generation), create crops, or delete images, you need the **Modify applications** permission for the project. With view-only access you can browse the library and pick images, but not change the library. See [Multi-login accounts](/product/account-management-and-security/multi-login-accounts/).

## Upload images

To upload images to the Media storage:

* **Drag and drop** one or more image files onto the upload area.
* **Click the upload area** to open the file picker and select images from your device.

<img src="/content-media-store-2.webp" alt="Media storage upload area with an image file being dragged onto the dropzone during upload" />

<Aside type="note">
Each file can be up to 10 MB. The Media storage accepts JPG, PNG, WebP, and GIF and ignores other file types.
</Aside>


When the upload finishes, your images appear in the grid below, the most recent first. To browse older images, click **Previous** or **Next**.

### Compress PNG images on upload

PNG compression makes PNG images smaller when they are added to the library:

* Pushwoosh reduces the number of colors in the image and keeps transparency.
* The compression is lossy, but the difference is usually not visible.
* It's turned off by default and is set separately for each project.

To change this setting, you need the **Modify applications** permission for the project.

To turn on PNG compression:

1. On the Media storage page, click **Settings** in the upper-right corner, to the right of the page title.
2. In the **Media storage settings** window, turn on **Compress PNG images on upload**.

   <img src="/content-media-store-18.webp" alt="Media storage settings window with Compress PNG images on upload turned on and the Save button" />
3. Click **Save**.

With the setting on, Pushwoosh compresses every new PNG after it passes the size limits. This covers:

* PNG files you upload from your device.
* PNG images [sent from Figma](#send-images-from-figma) and [imported from Canva](#import-designs-from-canva).
* [Crops](/product/content/media-storage/create-image-crops/) of PNG and WebP images, because those crops are saved as PNG.

Pushwoosh stores JPG, WebP, and GIF files as they are. Animated PNGs and images already in the library stay uncompressed.

If a PNG can't be compressed, Pushwoosh stores the original file and the upload still succeeds.

After you upload PNGs from your device or in the [image picker of an editor](#select-an-image-in-the-editor), Pushwoosh shows how much space the compression saved. For a batch, the numbers cover only the PNGs that got smaller.

### Send images from Figma

To send frames from a Figma file without exporting them first, use the Pushwoosh plugin for Figma. See [Figma integration](/product/integrations/figma-integration/).

### Import designs from Canva

To import pages of your Canva designs, click **Import from Canva** next to the upload area. After you connect Canva, you can also open stored images in the Canva editor with **Edit in Canva** and start new designs with **Create in Canva**. See [Canva integration](/product/integrations/canva-integration/).

## Find an image by file name

Enter part of a file name in the **Search by file name** field above the grid and press Enter. The search ignores letter case and covers the whole library, not only the current page. Clear the field to show all images again.

## Where an image came from

A badge on the tile shows how an image got into the library:

* **AI:** generated in the **Generate with AI** tab.
* **Pexels:** imported from the **Stock photos** tab.
* **Canva:** imported or edited with the [Canva integration](#import-designs-from-canva).
* **Figma:** sent with the [Pushwoosh plugin for Figma](#send-images-from-figma).

<img src="/content-media-store-19.webp" alt="Library grid with tiles that have the Pexels, AI, and Figma badges" />

Images uploaded from your device have no badge.

### Use an older version of an image

A badge such as **2 ver.** on a tile means the image has several versions. They appear when a Figma frame is sent again or the image is edited in Canva. The tile shows the latest version. Content that uses an older version keeps showing it, because each version has its own URL.

To view all versions of an image and pick one of them:

1. Click the **N ver.** badge on the tile. The **Versions** panel opens with the latest version, marked **current**, in the preview.
2. Under **All versions**, click the version you want. The list starts with the newest version. The preview shows the selected version with its size in pixels and file size.
3. Click **Use this version**.

<img src="/content-media-store-7.webp" alt="Versions panel with Version 1 of an Autumn sale banner selected under All versions, its size 1080 × 1080 and 452 KB, and the Use this version button" width="450"/>

On the Media storage page, **Use this version** copies the URL of the selected version, the same way as the [Select](#copy-an-image-url) button. In an editor's image picker, it inserts the selected version into the field.

## Add a stock photo from Pexels

The **Stock photos** tab searches the free photo library of [Pexels](https://www.pexels.com). Stock photos don't count toward the [daily AI image limit](/product/content/media-storage/generate-images-with-ai/#daily-limit-for-ai-images).

1. Open the **Stock photos** tab.
2. Enter what you are looking for, for example `summer sale`, and click **Search**.
3. Click a photo.

Pushwoosh copies the photo into your library with the **Pexels** badge.

Under each search result, the photographer's name links to their Pexels profile, and the tab shows that the photos come from Pexels.

If nothing matches your query, the tab shows **Nothing found — try another query**.

If your plan doesn't include AI images, stock photo search is turned off too. See [Daily limit for AI images](/product/content/media-storage/generate-images-with-ai/#daily-limit-for-ai-images).

## Generate an image with AI

The **Generate with AI** tab creates an image from a text description and saves it to your library with the **AI** badge. See [Generate images with AI](/product/content/media-storage/generate-images-with-ai/).

## Create image crops

To use the same image in channels or placements with different proportions, crop it to a specific aspect ratio. See [Create image crops](/product/content/media-storage/create-image-crops/).

## Delete images

You can delete images you no longer need, either an original together with all of its crops, or a single crop on its own.

### Delete an original image

1. Hover over the image in the grid and click the **Delete** icon.
2. In the confirmation window, click **Delete**.

If the image has several versions, only the latest version and the crops of that version are deleted, and the tile shows the previous version. To delete an older version, delete the newer versions first.

You can't delete an image used in a Wallet pass campaign. Remove the image from the campaign first.

<Aside type="caution">
Deleting an original also removes all of its crops, and this can't be undone. Any content that references the deleted image URL will stop loading the image, so make sure the image is no longer in use before you delete it.
</Aside>

### Delete a single crop without removing the original

1. Hover over the image and click the **Create crops** button to open the **Create crop** panel.
2. In **Existing crops**, find the one you want to remove and click its **Delete crop** button.
3. In the confirmation window, click **Delete**.

### Delete multiple images at once

To remove several original images in one action:

1. Check the checkbox on each image you want to delete, or click **Select all on page** to select every image on the current page.
2. Click **Delete selected**.
3. In the confirmation window, click **Delete**.

<Aside type="caution">
This deletes each selected original together with all of its crops, and this can't be undone. Any content that references a deleted image URL will stop loading the image, so make sure none of the selected images are still in use.
</Aside>

## Use images in your content

How you add a Media storage image depends on the content type.

### Select an image in the editor

In the editors listed below, you can pick, find, or generate an image without leaving the editor. The image picker has the **Library**, **Stock photos**, and **Generate with AI** tabs:

* **Push notifications and web push content:** **Banner URL**, **Icon**, **Stories**, and inbox images. See [Add media content](/product/content/push-presets/#add-media-content) in Push presets.
* **SMS presets:** [MMS attachments](/product/content/sms-and-messenger-presets/sms-presets/#add-mms-attachments). MMS accepts only JPG and GIF, so this picker has **Library** and **Stock photos** only.
* **Push sending form:** the inbox icon and WhatsApp media.
* **Customer Journey:** images in Viber and WhatsApp elements.
* **Native in-app messages**, **Wallet passes**, and **email ad creatives**.
* **AI Email Builder**, and the same builder for in-app messages and Cloud Pages: the image gallery.

The tabs of a picker depend on the image formats the field accepts:

* **Generate with AI:** fields that accept both PNG and JPEG, because a generated image can come in either format.
* **Stock photos:** fields that accept JPEG.

<Aside type="note">

In Wallet pass campaigns, an image picked for the Apple Wallet **Logo** or **Strip** slot is cropped to 3:1 automatically when it is wider than that. See [Upload campaign images](/product/messaging-channels/wallet-passes/wallet-pass-campaigns/create-a-campaign/#upload-campaign-images).

Web popups let you pick an image only from the library, without the **Stock photos** and **Generate with AI** tabs. See [Images and video](/product/content/web-popup-content/popup-settings/#images-and-video) in Web popup content.

</Aside>

### Copy an image URL

Copy a URL from the Media storage and paste it into your content editor. 

To copy the URL:

1. Hover over the image you want in the Media storage grid.
2. Click the **Select** button (the checkmark icon) on the image.

<img src="/content-media-store-4.webp" alt="Media storage grid tile with the Select checkmark button and Image URL copied to clipboard confirmation" />


<Aside type="tip">
If your browser blocks automatic copying, a window opens with the URL. Select it and copy it manually.
</Aside>

Paste the URL into the editor you are using. Where you paste it depends on the editor:

* **Image URL field:** [Image block of the Drag & drop editor and Cloud Page editor](/product/content/email-content/drag-and-drop-email-editor/blocks/#image), or [in-app editor](/product/content/in-apps/no-code-in-app-editor/built-in-editor-blocks-reference/#image)
* **HTML `src` attribute:** See [Add images](/product/content/email-content/html-code-editor/#add-images) in the HTML code editor


#### Select an original or a crop

To copy the URL of an original or a crop:

1. Hover over the image in the grid. If it has crops, its tile shows a badge with the count (for example, **2 cr.**).
2. Click the **Select** button to open the menu. Each item shows a thumbnail of the original or the crop.
3. Choose **Original** to copy the URL of the full-size image, or choose a crop listed by its aspect ratio and size to copy that crop's URL.

<img src="/content-media-store-9.webp" alt="Select menu on an image tile with thumbnails next to Original, 2:1 · 1024×512, and 1:1 · 1024×1024" />