Uploading by Drag and Drop

You never have to go looking for an upload button. Drag a file from your desktop over any screen in the CMS and a full-screen target appears; let go and Leed works out what kind of file it is, opens the matching upload dialog with your file already loaded, and adds the result to your asset library. Drop it inside a page you are editing and the asset is also inserted at the spot you dropped it.

What you see

While a file is over the window, the whole window dims and blurs behind a card with a dashed border reading:

Drop to add to your asset library Images can be cropped before uploading.

The CMS dimmed behind a dashed-border card reading Drop to add to your asset library

The target covers the entire window rather than a small zone, so there is nothing to aim at. Drag out again without releasing and the overlay disappears with nothing changed.

Who gets it

The drop target only exists if you can create assets. Without the asset:create privilege the CMS attaches no drag listeners at all — dragging a file over the window does nothing, no overlay appears, and dropping falls through to your browser’s default behavior. Creating assets is a permission rather than a plan feature; the privilege matrix lists the roles that hold it.

Leed picks the right upload for the file

Routing is by the file’s MIME type, not its extension, and it always lands somewhere: known image, video and audio types go to their own upload flow, and everything else becomes a document.

flowchart TD
  DROP["File dropped on the CMS"] --> PERM{"Can you create assets?"}
  PERM -->|no| NOTHING["Nothing happens —<br/>no overlay, no listener"]
  PERM -->|yes| TYPE{"What does the MIME type say?"}
  REJECT["Refused with a message.<br/>No dialog opens"]
  WHERE{"Did you drop it inside<br/>the page editor?"}
  TYPE -->|"an accepted image type"| SIZE{"Under 10MB?"}
  SIZE -->|no| REJECT
  SIZE -->|yes| CROP["Crop step, then Upload Image"]
  TYPE -->|"an accepted video type"| VID["Upload Video"]
  TYPE -->|"audio/mpeg"| AUD["Upload Audio"]
  TYPE -->|"image, video or audio,<br/>but not an accepted one"| REJECT
  TYPE -->|"anything else"| DOC["Upload Document"]
  CROP --> WHERE
  VID --> WHERE
  AUD --> WHERE
  DOC --> WHERE
  WHERE -->|yes| INSERT["Asset library,<br/>and inserted at the drop position"]
  WHERE -->|no| LIB["Asset library"]
FileAccepted formatsOpensExtra step
Imagepng, jpeg, gif, webp, svgUpload ImageOptional crop; must be under 10MB
Videomp4, mkv, mov, avi, flv, ts, ps, mxf, lxf, gxf, 3gp, webm, mpgUpload VideoCloudflare Stream processing after upload
Audiomp3 onlyUpload Audio—
Anything elseno restrictionUpload DocumentText extraction where your plan allows

Images

PNG, JPEG, GIF, WebP and SVG. A dropped raster image goes to a crop step before the upload form: you get the image with a crop frame over it, the line Draw a box to crop, or skip to keep the full image., and two buttons — Skip crop and Apply crop. Drawing no box leaves Apply crop disabled, so skipping is always one click. SVGs have nothing to crop and go straight to the upload form.

Video

The video flow accepts a wide list because it hands the file to Cloudflare Stream: MP4, MKV, MOV, AVI, FLV, TS, PS, MXF, LXF, GXF, 3GP, WebM and MPG. The upload dialog is the same one the asset library’s + New button opens, so the duplicate check and the processing wait behave identically.

Audio

MP3 only, today. Nothing else in the audio/ family is accepted — a WAV, an M4A, an OGG or an AAC is refused with a message naming what is supported, rather than silently becoming a document.

Everything else becomes a document

PDFs, Word and Excel files, ZIPs, plain text, and any type the browser reports as something Leed does not recognize all route to the document upload, which has no format restriction at all. That is why a file with no MIME type — some archives and some exports report an empty type — still uploads rather than being rejected.

The exact accepted MIME types

This is the list the product checks against, in the order it checks. A file whose type is not here, and whose type does not begin with image/, video/ or audio/, becomes a document.

TypeMIMESuffix
Imageimage/pngpng
Imageimage/jpegjpeg
Imageimage/gifgif
Imageimage/webpwebp
Imageimage/svg+xmlsvg
Videovideo/mp4mp4
Videovideo/x-matroskamkv
Videovideo/quicktimemov
Videovideo/x-msvideoavi
Videovideo/x-flvflv
Videovideo/mp2tts
Videovideo/mp2pps
Videoapplication/mxfmxf
Videovideo/vnd.lxflxf
Videoapplication/gxfgxf
Videovideo/3gpp3gp
Videovideo/webmwebm
Videovideo/mpegmpg
Audioaudio/mpegmp3

When a drop is refused

A refused drop shows a message in the corner and opens nothing. There are three ways to see one.

MessageWhyWhat to do
Image is 12.4MB. Images must be under 10MB.The file is an accepted image type but at or over the size limit. Checked before any dialog or crop step opens, so nothing is uploaded and nothing is lostResize or re-export the image below 10MB, or use a video or document upload if it is not really a page image
Unsupported image type. Supported image formats: png, jpeg, gif, webp, svg.The file’s type begins with image/ but is not on the accepted list — a TIFF, a BMP, a HEIC. The equivalent message appears for video/ and audio/ files off their own listsConvert it to one of the listed formats. A file that is not an image, video or audio at all is never refused this way — it becomes a document
No message; only one file uploadsYou dropped a multi-file selection. Leed takes the first file and ignores the restDrop files one at a time

Dropping onto a page you are editing

This is the behavior worth learning. When the drop lands inside the editor canvas, the uploaded asset is inserted at the exact spot you let go — between the two paragraphs you dropped it between, not appended at the bottom of the page.

The page editor with the dropped image placed between two paragraphs

What gets inserted depends on the type:

  • an image, video or audio file becomes its own block — the image, the video player, or the audio player;
  • a document is inserted as a download link in the text at that point, using the asset’s name as the link text, rather than as a block of its own.

Two details you will notice. An image dropped at the very end of a page gets an empty paragraph after it, so there is somewhere to keep typing — that is deliberate, and matches what the asset picker does at the end of a document. And the drop position is clamped to the document as it exists when the upload finishes, so a page that changed while the file was uploading still gets a valid insert.

If you navigate away mid-upload

The insert is skipped and the asset still lands in your library. Nothing is lost, and nothing is inserted into whatever page you moved to. Come back and place it from the picker.

Where the file goes afterwards

Every drop creates a normal asset. The dialog that opens is the same one the asset library’s own + New button opens, prefilled with your file, so you get the same Name field and the same duplicate check against files you already hold. A dropped image is created with placeholder alt text rather than a description — set the real one on the asset itself, which asset details and usage covers along with labels and where the file is used.

Whatever you drop becomes a normal asset, so the asset library covers browsing, searching and filtering what you have uploaded. The image dialog’s crop step, the size rules and duplicate detection are covered in uploading images, and video, audio and documents each have their own processing — see video, audio and document assets.

ESC