Ghost audio card with a Sume track: mp3, wav or ogg from desktop
Ghost's audio card takes .mp3, .wav and .ogg uploaded from the desktop editor, up to 1 GB by plan. Download the Sume artifact, then upload the file.

Ghost's audio card accepts .mp3, .wav and .ogg files that you upload in the editor from a desktop; Ghost's help page gives a limit of up to 1 GB, depending on the plan. A Sume Music Router track, usually audio/mpeg, fits that list. The workflow is download first, then upload; the card, as documented, is an upload control and not a link field.
What Ghost documents
Ghost's cards page describes the audio card in a few lines.
| Topic | Ghost documents |
|---|---|
| Accepted files | .mp3, .wav, .ogg |
| Upload | From the desktop, in the editor |
| Size | Up to 1 GB, depending on the plan |
Download the artifact
Read the audio URL from the job result: result.artifacts[] has an entry of type audio, and the file is on media.sume.com. Fetch it with a tool that follows redirects and saves to disk, then drag the file into the card. The job costs a fixed $0.125, whether you keep the take or not, so listen before you publish.
job="$1" # a finished Sume job id
url=$(curl -fsS "https://api.sume.com/v1/jobs/$job/result" \
-H "Authorization: Bearer $SUME_API_KEY" \
| jq -r '[.result.artifacts[]? | select(.type=="audio")][0].url')
[ -n "$url" ] && [ "$url" != null ] || { echo "no audio artifact" >&2; exit 1; }
curl -fsSL "$url" -o "track-$job.mp3"
ls -l "track-$job.mp3"Check the file before you upload
The saved file name above ends in .mp3 because Sume's docs describe the router audio as usually audio/mpeg; confirm with file track-$job.mp3 and rename if the type is different. Ghost accepts the three extensions it lists, so a mismatch between name and content is the thing to avoid.
Limits
The help page describes a manual upload, not an API for the card. If you publish through the Admin API and need audio, test it first, because that route is not covered by the page I read. Also keep in mind that a music track you publish should have a record of how it was made; store the job id and the engine name (job.request.routed_model) with the post.
Before you ship
For a podcast style episode, the same download-and-upload step works for a spoken file, but this post is about the music bed only. If the post already has a text intro, place the audio card where the reader should press play, and add one sentence that tells them the music was generated.
- Download the track from the artifact URL first.
- Upload in the editor from a desktop browser.
- Check your plan's size limit on the Ghost help page.
- Keep the Sume job id in the post's internal notes.
Sources
Related posts
More in Integrations
- GITHUB_STEP_SUMMARY for Sume jobs: an audit table in the run page
Write the Sume job id, status and artifact URL to GITHUB_STEP_SUMMARY: 1 MiB per step, 20 step summaries shown per job. Public URLs only, no prompts or keys.
- workflow_dispatch music brief: 25 inputs, 65,535 chars vs Sume's 5,000
GitHub dispatch takes 25 inputs and 65,535 characters; Sume's music prompt stops at 5,000 and rejects duration. Guard the length, then call the router.
- Google Sheets =IMAGE() with a Sume URL: PNG, JPEG, never SVG
=IMAGE needs a URL with a protocol and rejects SVG and drive.google.com links. Put a Sume data[0].url from a png or jpeg request in a cell and pick a mode.
- Google Slides createImage with a Sume URL: use PNG or JPEG
CreateImageRequest takes PNG, JPEG or GIF, up to 50 MB and 25 megapixels, from a public URL of 2 KB or less. Ask Sume for output_format png or jpeg, not WebP.
Written by Sume