Use your own script: upload, import, review
Start an episode from your own script with Upload Script, or replace a script with Import Script. Speaker labels, review, limits and scripts used as sources.
If you already have a finished script, you don't need the Podcast Agent to write one. This page is part of Podcasts and Episodes. Two entry points take a script, and both end in the same speaker review:
| Upload Script | Import Script | |
|---|---|---|
| Where | The new-episode composer (dashboard Podcast Episode, or Create New Episode inside a podcast) | Import / Export menu (three-dot icon) in an episode's workspace |
| What it does | Puts your script in the composer; nothing is created until you send | Runs the review at once and replaces the episode's current script |
| Review | Runs when you send | Runs when you click Continue |
The same Upload Script button is in the composer for Shorts and Magic Video, which read the same script format and run the same speaker review.
Starting a new episode from a script
- Select Podcast Episode on the studio dashboard, or open a podcast and use the Create New Episode input. Click Upload Script. On desktop it sits beside Settings; on mobile, open Settings and choose it there.
- In the Upload script dialog, paste your script or click Choose file, then click Add script. The text replaces anything you had typed in the composer, and your speaker labels stay as written.
- The Upload Script button turns into a green checkmark and disables. Host selection and Duration lock (Duration shows Auto) because the script decides both, and adding sources is disabled. Clear the script text from the composer to unlock them.
- Send. Jellypod runs the speaker review below, then generates audio in your hosts' voices.
Pasting a finished script with speaker labels straight into the composer does the same thing without the button. So does attaching it as a source.
If narration can't start (for example, you're out of credits), Jellypod still creates the episode with your script attached. Open it and generate audio from the script editor, which asks you to add credits if you need them (see Understanding credits). If your connection drops during an import, check your podcast for the episode before trying again: the script may already be saved, and a second import can create another episode.
Import a script into an existing episode
- In the episode workspace, click the three-dot icon (tooltip Import / Export) and choose Import Script. It is disabled while the episode's script is locked, for example during a render.
- In the Import script dialog, paste your script (placeholder "Paste your script here…") or drag a file onto the dialog or click Choose file. Document files show "Reading your document…" while text is extracted.
- Click Continue to reach the speaker review. Back returns to the script.
- Click Import script. The episode's current script is replaced.
Formats and limits
- Files: .txt, .md, .docx, .doc, .rtf, .pages and .pdf, up to 4 MB.
- Labels: start each speaker's turn on its own line with [John Doe] or John Doe:, speech directly after. Bold, heading, list item and blockquote labels (as carried over from Word or Google Docs) still count. Plain prose without labels is detected automatically.
- Length: no script can exceed 75 minutes of narration on any plan. A longer script is refused at the review with a request to split it into shorter episodes. A script within 75 minutes but over your plan's episode length is refused at import in the review flows (Upload Script, Import Script and a script source from the composer), not shortened: the error names the script's length and your plan's limit, so upgrade or shorten it. Episode length limits by plan are in plan limits.
- Screening: before importing, Jellypod screens the script for graphic violence, harassment and other content its speech providers won't voice. Describing violence alone doesn't trip it, so war, history and true-crime scripts import normally. If a script is flagged, nothing is imported and the error says why.
Review the speakers
The review lists every detected label before anything is created. Each row has a searchable host picker listing every active host in your account (not just this podcast's), a Create new button, and a sample line.
- Matched: if a label's name matches an active host in your account, that host is preselected.
- Unmatched: choose an existing host, or click Create new to have Jellypod generate a character from that speaker's lines (name and voice are editable afterwards). The row shows "Creating character…" while it works, and other rows stay usable. A character you create is available in the other rows' pickers.
- Remove: the trash icon excludes a label that isn't really a speaker. After you confirm Remove Speaker, the words stay in the script, spoken by whoever had the floor before.
- Start over: appears once you've removed a speaker, and resets removals and host choices to the original detection.
Until every active speaker has a host, the review reads "Choose a host for N remaining speakers." and Import script stays disabled. At least one speaker must stay active. Nothing is created in your account until you import. If you removed labels, Jellypod re-checks the corrected speakers against the script once more before importing.
Jellypod folds performance and emotion cues such as [Laugh], [Sigh] or [Pause] into the surrounding line, and drops short document headers such as an Audience: or Episode Type: line. A longer header that carries real speech folds into the line after it. If a cue or header still appears as a speaker, Remove it, or direct delivery with audio tags instead of bracket labels.
A Short or Video allows up to 4 distinct hosts, and the review refuses more, telling you to reuse a host or remove a speaker. An episode has no host ceiling.
To change the host of a single block after import, see speech blocks in the script editor.
Attach a script as a source
You can attach a finished script as a source from the new-episode composer, from automations (including inbound email) and from the API. Jellypod judges each attached text source and looks for exactly one that reads like a finished script:
- Exactly one: that source is used word for word, and the other sources are not used for that generation.
- None, or more than one: every source is treated as research material for a newly written script.
- Override in your prompt: say "read this verbatim" to force a word-for-word read, or "rewrite this" to force a fresh script. With no sources, only pasted text that carries speaker labels qualifies.
From the composer, Jellypod loads the script into the composer and opens the speaker review when you send. If every speaker already matches a host and you haven't changed anything, it imports without asking. Automations and the API have no one to review speakers, so a speaker they can't match to a host fails the run, naming the speaker. For the same reason, speech past your plan's episode length is cut at the limit rather than refused.
Edge cases
| Situation | What happens |
|---|---|
| Speaker review times out or finds no speakers | Jellypod asks you to try again, or to start each turn with a [Name] label so the labels are read as written instead of detected. |
A turn with no spoken words (an audio tag such as [sigh], an emoji, or leftover Markdown like a --- rule or a table divider row) | Dropped, not narrated. If every turn is like this, the import is rejected. |
| A [Name] label matches no saved character (automations, API, source scripts) | Generation stops and names every unmatched label. Create a character for each (Creating a character), then generate again. |
| Script over your plan's episode length | Refused, not shortened, in the review flows; automations and the API cut it at the limit. See limits above. |
| Episode exists but has no audio | Only narration didn't start, usually an empty credit balance. Generate audio from the script editor. |
To get a script back out as a .txt file, see Download the script as text.
Was this page helpful?
Audio tags and backchannels for expressive delivery
Add laughs, whispers and reactions to AI hosts with the slash-command tag picker, plus backchannels, and fix tags that are unsupported or stripped.
Download a transcript, captions or script text
Download your episode's transcript as .txt, captions as SRT for YouTube and video editors, or the editable script as a .txt file, and why an option is grayed out.