Assets
Upload, organize, and manage images, audio, video, and fonts in the PanelWave CMS asset library, with automatic processing into optimized variants.
Every image, audio clip, video, and font in your work lives in the Assets library. Open it in the editor's left sidebar — the Assets tab, next to Tree and Tools.
Supported file types
| Type | Formats |
|---|---|
| Images | PNG, JPEG, WebP, AVIF |
| Audio | MP3, AAC, Opus, WAV |
| Video | MP4, WebM, MOV |
| Fonts | TTF, OTF, WOFF, WOFF2 |
Uploading
There are two ways to get files in:
- Click Upload in the Assets toolbar and pick one or more files.
- Drag & drop files anywhere onto the editor — a "Drop files here to upload" zone appears. Dropping files directly onto a folder in the folder pane uploads them into that folder.
While uploading, each file shows an Uploading… card with a live progress bar, status, and any error message. Newly uploaded assets appear with a Processing… indicator until automatic processing finishes.
When a folder is selected in the folder pane, new uploads (large ones included) are filed into that folder automatically — the Upload button shows the target folder as a small chip so there are no surprises. Select All assets or Unfiled to upload without filing.
Large files
Small files upload in one piece. Files of 10 MB and more — think video or long audio — automatically switch to a multipart upload: the file goes straight to storage in 5 MB parts, the progress bar follows the parts, and a part that fails on a flaky connection is retried automatically (up to three times) before the upload gives up.
Once all parts are in, the file is registered like any other upload — the same checks, duplicate detection, processing, and folder filing apply, and the asset stays in your library after a reload.
You don't need to do anything to enable this; the CMS picks the right upload method per file.
While a large upload is unfinished, the Assets tab lists it in a Large uploads section with its status (Uploading part 2 of 5, Paused, Failed, …), the bytes sent and the percentage, and buttons to control it:
| Button | What it does |
|---|---|
| Pause | Pauses the upload: the part in flight is cancelled, every part already uploaded is kept. |
| Resume | Continues the same upload with the remaining parts. Each part is authorized right before it is sent, so even a long pause does not fail on an expired link. |
| Retry | Shown when an upload failed. Continues from the parts already uploaded; if storage has discarded the partial upload, it starts the file again from the beginning automatically. |
| Cancel | Stops the upload and removes the partial upload from storage. |
The upload state lives in the open page only: reloading or closing the tab discards unfinished uploads (paused ones included), and the file has to be uploaded again.
Upload checks
Files go from your browser directly to storage, and the CMS then checks what actually arrived before adding it to the library:
- The content must match the file type. The first bytes of every file are inspected to confirm it really is an image, audio file, video, or font of a recognised format. A file whose content doesn't match — say, a renamed document posing as a
.png— is rejected with "File content does not match the declared type" and removed from storage. - SVG files are screened. An SVG over 2 MB, or one containing scripts,
foreignObjectelements, event-handler attributes, orjavascript:links, is rejected. - Sizes come from storage. The stored file size (used for your storage totals) is measured on the server, not taken from the browser.
The same checks run for Replace File — before the old file is touched, so a rejected replacement leaves the asset exactly as it was — and for the panel crops that Page Import adds to your library.
Automatic processing
After upload, a background pipeline optimizes every asset. You keep working while it runs; the asset card shows Processing… until it's done.
- Images — AVIF and WebP variants are generated for fast delivery, plus a 400px thumbnail; EXIF metadata is stripped. Large artwork additionally gets a responsive size ladder — WebP renditions at 640, 1280, 1920, and 2560 px width (only sizes smaller than the original are created), so a phone never downloads desktop-sized files.
- Audio — AAC and Opus variants with broadcast loudness normalization (EBU R128), waveform data for the editor's audio views, and the duration in milliseconds.
- Video — a web-friendly H.264 rendition (up to 1920px wide), a poster frame, and scrubbing thumbnails.
Dimensions and duration are measured right in your browser at upload time and stored with the asset immediately — so a freshly uploaded image or video can be placed on the canvas with the correct aspect ratio before background processing even starts (the server verifies dimensions independently as a fallback).
If background processing is unavailable at the moment you upload, nothing is lost: the upload succeeds, its processing job is kept, and the variants are generated as soon as processing is back — you don't have to do anything. The library's Generate action (shown when images have no previews) remains for older assets.
One more variant is created on demand: when preflight flags an image as too large to publish, its Optimize fix produces an optimized WebP derivative that the published work ships instead of the original — see Validation. The full-quality original always stays in your library.
Duplicate files are detected by content hash, so re-uploading the same file doesn't waste storage — you get the existing asset back instead of a copy.
Every asset gets an ID that the manifest uses to reference it. New uploads get a readable ID derived from the file name — Wiesn Übersicht FINAL_01.png becomes wiesn-uebersicht-final-01; a second file with the same name gets -2. Assets uploaded before September 2026 keep their existing (hash-based) IDs, and imported works keep the IDs from their manifest, so nothing that references an asset breaks.
Readers automatically get the best variant their device supports — you never have to export "web versions" yourself. Published manifests list the size ladder alongside the full-quality primary file, and the player picks by actual display size. See Assets in the format for how variants appear in the manifest.
The editor benefits too: asset lists, the picker, and the canvas load a rendition matched to the size actually on screen instead of the full-resolution original, so large libraries stay snappy.
Finding and organizing assets
Folders
The Assets tab has a folder pane: All assets, Unfiled, and your own folder tree (folders can be nested). Create, rename, move, and delete folders from the pane, and drag assets onto a folder to file them — an asset can live in more than one folder. Each folder shows how many assets it holds, and selecting a folder scopes the asset list below to it (and makes it the target for new uploads, see above).
Selecting multiple assets
Shift-click (or Ctrl-click) asset cards to build a multi-selection — selected cards get a highlight and a check badge, and the toolbar shows an N selected chip with a clear button. Dragging any selected asset then drags the whole selection:
- Drop it on a folder to file every selected asset there at once.
- Drop it on Unfiled to remove them all from their folders.
A plain click clears the selection and opens the asset's details as usual.
Folders are an organizational layer only — they don't change asset URLs or how anything is exported.
Search, filters, and sorting
The Assets toolbar offers:
- Search assets… by name.
- A type filter (All Types, Images, Audio, Video, Fonts, Other).
- A locale filter for language-specific assets (e.g. a title card that differs per language).
- Sort by file name, uploaded date, last updated, or file size.
- A grid/list view toggle.
Each asset card shows a thumbnail — images use their 400px rendition, videos show their poster frame (or a clapper icon until transcoding finishes), audio and fonts a type icon — plus the filename, type, locale, file size, image dimensions, and how many processed variants exist.
To place an asset in your comic, drag it from the Assets tab onto the canvas — it becomes a layer on the current panel (see Layers).
Asset actions
Right-click an asset (or use the ⋮ button) for the context menu:
| Action | What it does |
|---|---|
| Copy ID / Copy URL | Copy the asset's ID or delivery URL to the clipboard |
| Replace File | Upload a new file in place — every panel using the asset updates automatically, and all variants (thumbnails, responsive sizes, optimized versions) are generated again from the new file |
| Edit Metadata | Edit the title, alt text, description, and tags |
| Download | Download the original file |
| View Details | Open the details panel |
| Generate Variants | Re-run variant generation (images) |
| Delete | Remove the asset from the library, including all its generated variants (responsive sizes, thumbnails, posters, video renditions). If the asset is still in use, a second confirmation names where (for example 2 panels, 1 extra, the cover) and whether a live publish still shows it; confirming deletes it anyway, and those places then show missing artwork — readers of the published version too, until you republish |
Replace File is the safe way to swap artwork after revisions: the asset keeps its ID, so layers, covers, and extras that reference it don't break.
A replacement must be of the same kind as the original (an image replaces an image, a video a video). Need the old version back as well? Uploading the replaced file again creates a new, separate asset next to the replaced one.
The details panel
View Details opens a side panel with everything about the asset: filename, ID, type, locale, size, dimensions, duration (for audio/video), the folders it is filed under, your metadata (title, alt text, description, tags), the list of generated variants (each with preview and Copy URL), and upload/edit timestamps. Video previews play with the poster frame as their still.
Dimensions and duration are shown live: if an older asset is missing them, the panel briefly shows Measuring… while they are read from the media and stored — the values then stay with the asset for good.
For images, a zoom button opens a lightbox with zoom controls (+, -, 0 to reset), arrow-key navigation between images, and an optional slideshow (Space to start/pause).
Alt text and accessibility
Give important artwork alt text via Edit Metadata. Preflight validation warns about image layers without alt text, and the player exposes it to screen readers.
Picking assets anywhere
Wherever the CMS asks for an asset — the content and thumbnail of an extra, a character portrait or reference image, a page's background image or texture, a video layer's footage — a Browse library… button opens the shared asset picker:
- Left — your folder tree (plus All assets and Unfiled) for narrowing by folder.
- Center — the searchable library, pre-filtered to the asset type the field expects (you can widen the filter), with an Upload button so new files land in the currently selected folder and are picked immediately.
- Right — a large preview with the asset's details (type, dimensions, duration, size, locale, folder, upload date). Images render full-size; video and audio play inline.
Double-click an asset (or select it and click Select) to use it. The choosing field shows the asset as a chip you can change or clear.
Where else assets appear
- The work's cover is picked from image assets in Work Properties.
- Character portraits and reference images upload into the same library — see Characters.
- Per-locale voice audio is managed in the Audio Localization tool — see Localization.
- Having upload trouble? See Troubleshooting CMS uploads.