Turn Google Drive scripts into narrated audio, line by line

One desk to pull scripts from Drive, give every line its own voice, redo the one take that missed, and share approved audio in Slack.

App
HumeGoogle DriveSlack BotMarketingOperationsContent GenerationDocument Processing
PromptCreate

Build me an audio production desk for the team that narrates our content with Hume Octave. It is a two pane workspace: a list of narration scripts on the left, and the selected script opened as an editable segment table on the right. Producers live in this screen, so it has to be fast to scan and safe to redo one thing at a time.

Left pane, the script library. A handler calls Google Drive List Files scoped to a configurable folder id, filtered to Google Docs and plain text files that are not trashed, and shows each script with its name, last modified date, and a status badge. Status is one of draft, generated, or approved, stored by the app against the Drive file id so the team always knows what is still outstanding. Let me filter the list by status and search by name. Selecting a script loads its text: use Export Google Workspace File for anything with the Google Docs mime type, and Download File Content for plain text files.

Right pane, the segment table. Each row is one narration segment and carries the segment text (editable), an assigned voice picked from a dropdown populated by Hume List Voices (include both the shared Voice Library and our own custom voices), an optional acting instruction describing the delivery, a per row Generate button, an inline audio player for the latest take, and a small state marker showing whether that row has been generated. The Generate button calls Hume Text-to-Speech (JSON) for that one segment only, passing the segment text, the chosen voice, and the acting instruction as the description. Use the JSON variant rather than the file variant on purpose, because the JSON response carries base64 audio the app can play inline plus the metadata we need to keep. Also give me a Generate all button that runs ungenerated rows as a paced batch with a visible progress bar.

Persist each segment's generation id from the text to speech response alongside its audio. This is load bearing: Hume's Save Custom Voice only accepts a generation id returned by an earlier text to speech call, so if the app throws the id away, promoting a take to a reusable voice becomes impossible. Keep the id on the row even after regeneration, replacing it with the id of the newest take.

Add a Prep this script button that kicks off a background agent. The agent reads the selected Drive document, splits it into natural narration segments, works out who is speaking in each one, assigns a voice per speaker or character from the voices returned by Hume List Voices, and drafts a short acting instruction for each segment describing tone and pacing. It writes all of that back into the segment table as a proposal. It must not generate any audio. A human reviews the split, swaps voices, and edits the instructions before pressing Generate on anything.

Approving a script runs the publish step. Create a folder for the project with Google Drive Create Folder under a configurable parent, upload the generated segment audio into it with Upload File (Multipart) named by segment order so the files sort correctly, then post a message to a configurable Slack channel with Slack Bot Send a Message containing the script name and the Drive folder link. Note that Upload File (Multipart) covers files up to 5MB, so upload per segment rather than as one giant file. Slack has no file upload in this catalog, so the audio is shared as a Drive link rather than an attachment. Approving flips the script status to approved.

Give me a voice library panel too. From any generated row, a Save as brand voice action calls Hume Save Custom Voice using that row's retained generation id and a name I type, and the new voice immediately becomes selectable in the voice dropdown. The panel also lists our custom voices with a Delete action wired to Hume Delete Custom Voice behind a confirmation, so the library can be pruned.

Two more things to handle. Hume text to speech is rate limited to roughly 100 requests per minute and returns error code E0811 when exceeded, so throttle batch generation, retry E0811 with backoff, and surface which segments failed rather than silently dropping them. And keep the status transitions honest: a script is draft until at least one segment has audio, generated once every segment has a take, and approved only after the publish step succeeds.

What does this prompt do?

  • Lists the narration scripts sitting in a Google Drive folder and opens any one of them as a line by line segment table.
  • Gives every line its own voice, its own delivery note, and its own Generate button, so one flubbed sentence gets redone in seconds instead of forcing a full re-render.
  • Includes a Prep this script button that reads the document in the background, splits it into segments, assigns a voice per speaker or character, and drafts a delivery note for each line for a producer to adjust before anything is generated.
  • Files approved audio into a per project folder in Google Drive and posts the link to Slack, with every script showing a clear status of draft, generated, or approved.

What do I need to use this?

  • A Hume account with an API key, used for the voice library and the voice generation itself
  • A Google Drive account with a folder of narration scripts saved as Google Docs or plain text files
  • A Slack workspace with a channel where the team should receive links to finished audio
  • A rough idea of the voices your brand uses, so the prep agent has something to match

How can I customize it?

  • Point the script list at a different Drive folder, or narrow it to only the scripts your team is working on this week
  • Change how the prep agent assigns voices, for example one voice per character in a dialogue versus a single narrator throughout
  • Pick which Slack channel gets the approval post and what the message says about each finished script
  • Adjust the naming and folder structure used when finished audio is filed back into Drive

FAQs

Can I regenerate just one line instead of the whole script?
Yes, that is the whole point of the segment table. Every line has its own Generate button, so a mispronounced name or a flat read gets fixed on its own while the rest of your approved takes stay exactly as they were.
Does the prep agent generate audio on its own?
No. The agent only fills in the table: it splits the document into segments, suggests a voice for each speaker, and drafts a delivery note. A producer reviews and edits all of it, and nothing is voiced until someone presses Generate.
Where does the finished audio end up?
Approving a script creates a folder for that project in Google Drive, files the audio there, and posts the link into your Slack channel so the rest of the team can grab it.
Can I save a voice I love and reuse it on other scripts?
Yes. When a take sounds right you can promote it into a saved voice that shows up in the voice list for every future script, and you can remove saved voices you no longer want. One catch worth knowing: only takes generated inside this app can be promoted, so an outside recording cannot be turned into a voice this way.
What kinds of script files can it read?
Google Docs and plain text files stored in the Drive folder you point it at. Docs are pulled in as text automatically, so writers can keep drafting where they already work.
What happens with a very long script?
Generating a whole script runs the lines in a paced batch with a progress indicator, so a long piece will not trip the voice provider's rate limits partway through and leave you with half a render.

Related templates

Ad creative studio with a pre-approved variant library

Generate on-brand ad variants in every format, approve the winners, and keep a ready library you can swap in the day an ad starts to fatigue.

Ideogram
Google Drive
App
Review desk for portal forms your team still fills in by hand

Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.

Kernel
Google Sheets
Slack Bot
App
Client-by-client cold email pipeline review for agencies

Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.

Instantly
HubSpot
Slack Bot
App
Filter every signed Ironclad contract and brief it on demand

Search, filter and sort your whole signed contract repository, then have an assistant read any contract and write a plain English brief back onto the row.

Ironclad
Google Drive
App
Audit what Intercom's Fin AI actually resolved before you pay

Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.

Intercom
Google Sheets
Slack Bot
App
Artwork desk for the Notion posts still missing an image

Open one screen each Monday to see which upcoming posts still have no image, generate three on-brand options, and file the one you pick.

Ideogram
Notion
Google Drive
App

Stop re-rendering a whole script for one bad line.

Set up your narration desk once and let producers preview, fix, and approve audio one line at a time.