Organization-wide media library — folders, unified sources across sites, images and videos, uploads, safe deletion with org-wide reference checks, and AI generation from any media picker.
Every media picker in Aveiro shares one organization library. Filter by org uploads or any site, by type (images or videos), and by folder — on **Studio → Assets**, use **Unfiled** and refinement filters (Frametic renders, not referenced) to file or clean up. Upload, paste, delete with a reference scan, open **Film a website** (guided 3D mockup setup) or **Generate with AI** in a stacked dialog — on Studio → Assets you can compose images or short video clips with multiple reference attachments. Folders are labels — canonical media paths never change when you move files.
Where the library appears
The same media picker opens anywhere you attach an image or video:
Site editor — hero backgrounds, Media blocks, page cover images, branding logos
Social — post drafts in Dashboard → Social
Audience — campaign images and email blocks
Organization assets page
Open Studio → Assets in the dashboard sidebar to browse the full library without opening a picker:
Multi-select — checkbox tiles for bulk actions
Bulk move — drag a selection into a folder, or use the move menu to file many assets at once
Bulk delete — remove unused files in one pass; files still referenced by pages, campaigns, or pending social posts are skipped (same org-wide scan as single-tile delete)
Permissions — every member can browse org media; site media tiles only show move/delete controls when you have edit access to that site
Unified AI composer — Generate with AI opens one panel for Image or Video mode, with up to three reference images, model tier, and (for images) aspect ratio or (for video) clip length. In-flight video jobs appear as pending tiles in the grid until ingest finishes
Film a website — paste a public URL and complete Frametic's guided setup in a tall, scroll-free dialog (the wizard tracks viewport height so the longest step fits without a frame scrollbar); credits are charged when the render is queued. While Frametic works, a placeholder tile appears in the library grid where the finished clip will land — the same pattern as in-flight AI video jobs. Failed renders show as error tiles org-wide for 24 hours so someone can see why credits were refunded; dismiss a tile to hide it in your browser (the render record stays for lookup)
Video poster frames — library tiles seek to the clip midpoint (not frame 0) so title cards and fade-ins do not hide the subject; the same offset is sent at publish time on platforms that accept a cover frame
Preview on expand — hover a tile and click Expand to open a full-size preview dialog; images and videos use contain sizing so the whole asset fits. The preview uses the same signed displayUrl as grid tiles so expanded images and videos load without your session cookie. Download in the dialog footer streams the file through a same-origin attachment route — that avoids CDN CORS limits in the browser and gives mobile Safari a proper save action instead of opening the CDN URL in a new tab.
The assets page uses the same folder tree, filters, upload, and AI generation controls as every media picker — it is the shared library surface, not a separate bucket.
Refinements (Studio → Assets)
On the organization assets page only, a Filter dropdown narrows the grid beyond folders, sources, and types. Refinements stack with the other filters:
Filter
What it shows
Frametic renders
Assets whose registration carries `origin: rendered` — written only by the Frametic render completion path (Studio renders and **Film a website** jobs)
Not referenced
Assets not used by any page, site settings, draft or scheduled email campaign, or social post that still needs its media. A bare social-library registration alone does not count as usage — otherwise every Frametic render would appear referenced.
Refinements apply server-side per page after folder and source filters. A refined page may return fewer tiles than the page size while the cursor still advances — scroll to load more until the grid is exhausted.
Each surface defaults its Sources filter sensibly (for example the site editor starts with the current site checked). The underlying library is shared across the organization.
Sources filter
The toolbar Sources dropdown controls which uploads appear in the grid:
Source
What it includes
Organization media
Files uploaded through any dashboard picker into org storage
Per-site checkboxes
Images stored under each site in your org
All sites
Quick toggle above the site list — checks or unchecks every site at once
Use the Types filter to show images, videos, or both. Checked sources merge into one newest-first stream. Pagination loads more as you scroll.
When All sites is indeterminate (only some sites selected), clicking it selects every site. Clicking again clears all site sources — organization media can stay checked on its own.
Folders
The left sidebar organizes assets into folders — pure metadata, not separate storage buckets.
All media — always-present root; shows every asset regardless of folder assignment
Unfiled — virtual sidebar view for assets assigned to no folder (also a drop target — dropping a tile here clears its folder, same as All media)
Custom folders — create, rename, delete, and nest as deep as you need
Drag and drop — reorder folders, nest by dropping on a folder row, or drag assets from the grid into a folder
Drop on All media or Unfiled — clears an asset's folder assignment
Uploading or pasting from the clipboard while a folder is selected files the new asset into that folder.
Folders never break URLs
Moving an asset between folders only updates folder metadata. Storage paths and public URLs stay the same — existing pages, emails, and social posts keep working.
Folder interactions mirror the Pages file tree: accordion rows, connector lines for nested folders, right-click for the actions menu, and edge-vs-center drop zones for reorder vs nest.
Upload and paste
Upload — click the upload control or drag files onto the grid
Paste — copy an image, focus the picker, and paste (disabled while the AI dialog is open)
Select — footer button confirms your choice and returns the public URL to the calling field
Raster uploads may be compressed for site performance. Logo pickers that accept SVG skip raster conversion.
Delete media
Hover a tile and click Delete (unified library mode). Aveiro runs an org-wide reference scan before removing the file:
Result
What it means
Blocked
The file is still needed — pages (draft or published), site settings, draft or scheduled email campaigns, or social posts that have not finished dispatching. Deletion is refused and the dialog lists each usage.
Allowed with warning
Sent email campaigns or published social posts may still reference the URL in history. The file will stop loading, but you can confirm deletion.
Safe
No references found inside Aveiro. URLs used only in external tools cannot be detected.
The scan covers every site in the organization, not only the site where you opened the picker.
Organization media — any org member can delete (same as upload).
Site media — requires edit access to that site.
Deleting removes the storage object (Supabase image or Bunny video) and cleans up folder assignments. It does not rewrite historical campaign or post content — fix those separately if a broken image appears after deletion.
Generate with AI
When AI generation is available for the surface you are in, the toolbar shows Generate with AI. It opens a stacked dialog on top of the library — the grid stays visible underneath so you can attach references and return to browsing.
Studio → Assets (image and video)
The org assets page uses a unified AI composer — one prompt box with an Image / Video mode selector in the footer:
Image mode — pick aspect ratio (square, portrait, landscape, and social presets), Quasar Lite or Quasar Max tier, and attach up to three reference images from the library for style or subject consistency
Video mode — on paid plans that include video upload, describe a short clip (5 or 10 seconds), pick an aspect ratio when offered (16:9, 3:4, or 9:16), and attach up to three reference images to guide the first frame. Quasar Max is the only video tier in the picker today — the former Lite tier is withdrawn but historical jobs still resolve. Generation runs as a background job — a pending tile appears in the grid until the clip is ingested to org video storage
Each attached reference adds to the quoted credit cost (on top of the base image or per-second video rate). The composer trims attachments automatically when you switch model or mode and a selection no longer fits.
Video tiers
Tier
Model
Credit rate
Clip length
Aspect ratios
Plan
Quasar Max
Alibaba Wan 3.0 via the Vercel AI Gateway — cinematic motion and audio sync
200 credits per second (1,000 for 5s, 2,000 for 10s)
5 or 10 seconds at 720p with synced audio
16:9 (default), 3:4, 9:16 — pick from the ratio control when the tier offers more than one
Paid plans with Quasar Max
Each attached reference image adds 150 credits on top of the per-second rate. Video jobs run asynchronously — a pending tile appears in the grid until the clip is ingested to org video storage.
Library reference images are stored as canonical /api/media paths. Before the job starts, Aveiro resolves each one to a short-lived Supabase signed URL the video provider can fetch — external https:// references pass through unchanged; a missing library file fails the request before credits are reserved.
Reference images with people
Video generation cannot animate reference images that contain recognizable people — the provider rejects those requests. Use product shots, landscapes, or abstract references instead.
Site editor, social, and email pickers
Other dashboard pickers still focus on AI images:
Site editor image picker — aspect ratio, optional single reference image, Quasar Lite or Max
Site editor video picker — separate video generator with optional single reference image (async job with pending tile)
Social and email — image generation with aspect ratio; social agents can also request multi-aspect crops via the API — see Social overview
Each generation consumes organization AI credits. Saved AI images and videos land in the library like uploads. Select the target folder before generating if you want them filed immediately.
Frametic Studio
When Frametic Studio is enabled for your organization (on by default), open Studio → Frametic Studio for the full Frametic editor — project grid, themes, formats, backdrops, and renders — with finished clips landing in the same library as uploads and Film a website jobs. Rendering debits organization credits through the same enqueue path as the guided wizard.
Upload routes store a canonical delivery path (/api/media/…) in page MDX, site settings, campaigns, and social drafts — not a world-readable Supabase URL. When someone actually views the asset, Aveiro signs that path for them:
Context
Who can read
Live published site
Visitors — standing grant while the site stays published; unpublishing revokes access. Site settings (logo, favicon, default OG image), collection listing thumbnails, shop product imagery (product pages, Products block, Product Showcase), and embedded media in custom product MDX pages are signed the same way.
Dashboard (editor, settings, sites list, home)
Org members with site access — page MDX, metadata, site settings (including the default OG image in draft preview heads), site-list and dashboard-home recent-site covers, dashboard-home social post thumbnails, Studio → Assets expand previews, AI image/video generation results returned to the composer, campaign editor HTML (rendered body and block marker), social asset thumbnails, shop product images, and custom product-page MDX bodies are signed on read so `next/image` and the newsletter canvas can load them; saves strip grants back to the canonical path. Client-composed previews (for example the campaign preview iframe) still fall back to session cookies on bare `/api/media` paths
Email send (production, test, welcome)
Recipients and their mail providers — absolute URLs with per-asset share grants minted at send time; stored campaign HTML stays unsigned
Social post at publish time
Destination platforms — per-asset share grant stored for server-side fetch; revoked when the file is deleted
User avatars and org logos
World-readable by design — small identity assets used across org boundaries
Gallery templates copy starter MDX verbatim, including /api/media/… paths that may still reference the template source site — duplication copies content, not storage files. On a live published site those references load for visitors; unpublishing revokes access even when the uploader differs.
Template marketplace and wizard — approved gallery templates sign thumbnail / thumbnails on read (marketplace, site wizard, and the submitter's template-status panel) with the template site's visitor grant. An approved submission counts as live for media delivery even while the template site is unpublished or in coming-soon mode; revoking approval drops it from that check. Submissions canonicalize thumbnail URLs on write so signed round-trips are never persisted.
Platform showcase — the public gallery on aveiro.app/showcase signs each site's default cover with a visitor grant and keeps the URL root-relative so next/image on the marketing host can load it without listing every customer domain in images.remotePatterns.
The picker hands back a signed displayUrl so images render immediately in the editor canvas — next/image refetches without your session cookie, so an unsigned path would 404. Upload responses return the same pair: url (canonical, for storage) and displayUrl (signed, for rendering). When you save, Aveiro strips grants and stores the bare /api/media/… path. Library thumbnails use displayUrl the same way. Moving files between folders does not change storage paths or canonical URLs — existing references keep working.
Social library vs org media
Org media storage (this library) holds dashboard uploads and AI saves. Social posts attach assets from the separate social media library — register an org URL with POST /api/v1/social/media or generate through the social API.
Every organization has a storage allowance based on its plan. Storage is bytes at rest — unlike AI or email credits, it does not reset each billing period. When you are full, delete unused files or upgrade.
Check Billing → Usage for a storage meter alongside editors, live sites, and pages.
Plan
Storage
Video upload
Free (trial)
250 MB
Images only — video upload is not on the free plan
Starter
5 GB
Up to 200 MB per file
Creator
25 GB
Up to 200 MB per file
Professional
100 GB
Up to 200 MB per file
Enterprise
Custom
Custom
What counts
Storage includes:
Organization and site media — images uploaded through any dashboard picker
Hosted videos — video files on the platform CDN for each org and site
Chat attachments — visitor and team messaging files
Monetization product files — downloadable files attached to paid products
Soft-deleted sites still count — their files remain on disk until you remove them.
Excluded (small and fixed): user avatars and organization logos in shared branding slots.
When uploads fail
Free plan — the Video block stays visible in the editor as a locked tile with Upgrade; video pickers and upload dialogs refuse video files. Upgrade to Starter or higher to upload or host video.
Storage full — prepare and upload endpoints return an error; delete unused assets from Studio → Assets or site media pickers first.
Per-file cap — paid plans enforce a 200 MB maximum per video file.
Deleting a file from the library frees storage after the object is removed from storage backends.
Agent uploads
Direct agent uploads (POST /api/v1/social/media/upload and dashboard upload paths) count against the same storage meter. A rolling daily upload count limit applies separately from the byte quota.
Tips
Goal
Approach
Brand kit in one place
Create a Brand folder under org media; file logos and hero backgrounds there
Find a screenshot from another site
Enable that site's source, or use All sites, then search visually in the grid
Remove unused uploads
On Studio → Assets, filter **Not referenced**, then bulk-delete — blocked while a page, campaign, or pending social post still references the file
File stray uploads
Open **Unfiled** in the sidebar and drag tiles into folders — or drop on **Unfiled** to clear a folder assignment
Audit Frametic output
Filter **Frametic renders** to see clips from Studio and **Film a website** before registering them for social posts
Reuse a photo on a social post
Copy its canonical `/api/media/…` URL from the library, then register via API or dashboard
Consistent AI characters
Save reference sheets to a folder; attach up to three on Studio → Assets before generating variants