Roblox TTS Asset Generation (October 2026): the Four Fields CreateAssetAsync Reads, the Rate Limit, and the Voice List
- On October 22, 2026, Roblox expanded to accept
Code: Select all
AssetService:CreateAssetAsync()objects, so speech can be generated once in Studio and stored as a normal audio asset instead of being synthesised every time it plays.Code: Select all
AudioTextToSpeech - The point is rate limits. Live text-to-speech is throttled by a formula based on concurrent players, so a game with a lot of dynamic dialogue can hit the ceiling. An asset that already exists plays instantly and consumes none of that budget.
- Only four properties of the object are read by the asset service: ,
Code: Select all
Text,Code: Select all
VoiceIdandCode: Select all
Pitch. Everything else on the object is ignored.Code: Select all
Speed - Three things are still missing: you cannot add a name or description to the uploaded asset, you cannot specify a creator ID, and every generated asset is named followed by its asset ID.
Code: Select all
TTS_Asset_ - The API is a Studio-side tool. It cannot be called from inside a running experience, which is a separate limitation from the rate limits and worth knowing before you plan around it.
Roblox first opened text-to-speech to creators in beta at the end of June 2025, and announced the full release in October 2025 alongside higher rate limits and observability dashboards on Creator Hub. The original
Code: Select all
CreateAssetAsyncCode: Select all
Enum.AssetType.ModelCode: Select all
Enum.AssetType.PluginCode: Select all
Enum.AssetType.MeshCode: Select all
Enum.AssetType.ImageThe October 2026 change closes that gap. Roblox's own framing is that running text-to-speech at play time is what forces you into the rate limit in the first place, and generating the asset in Studio removes the request from the running experience entirely. If your dialogue is static, or mostly static with a few dynamic lines mixed in, this is the difference between a voice that works and a voice that silently fails to play during a busy match.
The Rate Limit Problem, With Numbers
The live API is throttled per experience, not per player, and the formula scales with concurrency:
Code: Select all
max requests per minute per experience = 1 + (6 * number_of_concurrent_users)- 10 concurrent players gives 61 requests per minute across the whole experience.
- 100 concurrent players gives 601 requests per minute.
- 1,000 concurrent players gives 6,001 requests per minute.
- 10,000 concurrent players gives 60,001 requests per minute, which is the number Roblox itself uses in the release announcement.
So the honest trade is this. The formula is generous for a small game, and tight for a big one the moment you start synthesising a lot of speech on the fly. Asset generation moves the cost to a build-time operation that nobody in a live server is paying for.
Which Properties the Asset Service Actually Reads
The announcement lists four. Read them carefully, because two of the four are not what most people expect them to be:
- (string): the text you intend to have voiced.
Code: Select all
text - (string): the ID describing the speaker.
Code: Select all
voiceId - (number): defaults to 0, valid range from -12.0 to 12.0.
Code: Select all
pitch - (number): defaults to 1, valid range from 0.5 to 2.0.
Code: Select all
speed
Code: Select all
AudioTextToSpeechCode: Select all
SpeedCode: Select all
PlaybackSpeedCode: Select all
SpeedCode: Select all
PlaybackSpeedCode: Select all
PlaybackSpeedThe Voice List, and How AutoLocalize Interacts With It
Code: Select all
VoiceId- 1 British male, 2 British female
- 3 United States male #1, 4 United States female #1
- 5 United States male #2, 6 United States female #2
- 7 Australian male, 8 Australian female
- 9 Retro voice #1, 10 Retro voice #2
- 11 Host voice, added in August 2026 alongside the new languages
- 101 and 102 Spanish male and female
- 201 and 202 German male and female
- 301 and 302 Italian male and female
- 401 and 402 French male and female
- 501 and 502 Chinese (Mandarin) male and female
- 601 and 602 Hindi male and female
- 701 and 702 Japanese male and female
- 801 and 802 Arabic male and female
- 901 and 902 Korean male and female
- 1001 and 1002 Portuguese male and female
Code: Select all
AutoLocalizeCode: Select all
trueCode: Select all
AutoLocalizeThe automatic translation path covers eleven languages: Arabic, Chinese (Mandarin), English, French, German, Hindi, Italian, Japanese, Korean, Portuguese and Spanish. Speech-to-text, the sibling feature, supports a wider set, including Indonesian, Polish, Russian, Thai, Turkish, Vietnamese and both Simplified and Traditional Chinese.
The documentation recommends reading
Code: Select all
Player.LocaleIdStep by Step: Baking a Voice Line Into an Asset
- Enable the Luau API beta feature in Studio. It is not on by default, and Roblox states that it will not be auto-enabled even for accounts enrolled in automatic beta enrollment.
Code: Select all
CreateAssetAsync - Create a local plugin, or call the API from the command bar. The API does not work from plugins acquired from the Creator Store, because untrusted code uploading assets on your behalf is a real risk.
- Insert an object under SoundService and set
Code: Select all
AudioTextToSpeech,Code: Select all
Text,Code: Select all
VoiceIdandCode: Select all
Pitch.Code: Select all
Speed - Call . Pass an empty options table for now, since no options are supported for this asset type.
Code: Select all
AssetService:CreateAssetAsync(ttsObject, Enum.AssetType.Audio, {}) - Read the result. A successful call returns plus the new asset ID as a number. A failure returns the result enum plus a string error.
Code: Select all
Enum.CreateAssetResult.Success - Wire the returned asset ID into an and connect it to an
Code: Select all
AudioPlayerwith aCode: Select all
AudioDeviceOutput, exactly as you would for an audio file you imported.Code: Select all
Wire - Roblox also ships a sample script in the announcement thread that takes a table of voice lines with their speed, pitch and ID and generates the ones that need it. Worth using if you have more than a handful of lines.
Code: Select all
CreateAssetAsyncWhat You Still Cannot Do
The announcement is short on purpose, and the gaps are the part people hit first:
- No names or descriptions. You cannot attach metadata to the uploaded asset.
- No creator ID. You cannot specify who the asset belongs to, which matters for group-owned projects.
- Automatic naming. Every generated asset is called , where the number is the asset ID. If you generate fifty lines, you get fifty identically-prefixed entries in your inventory and you will be renaming them by hand or not at all.
Code: Select all
TTS_Asset_1234567890 - No in-experience use. The API is for creator tooling, so you cannot generate speech on the fly from a live server or from a client.
- No options table. Unlike the mesh and image paths, there is nothing to configure in the request parameters for audio.
Where This Fits Against the Other Audio Work
- Text-to-speech, live: one request per playback, counted against the per-minute budget, limited to 300 characters per call.
- Text-to-speech, baked: one asset per line, generated in Studio, no per-minute cost at runtime, but a fixed voice and language per asset.
- Speech-to-text: a separate feature entirely, converting a player's microphone input into text. It needs enabled and an
Code: Select all
VoiceChatService.UseAudioApiwired to anCode: Select all
AudioDeviceInputobject.Code: Select all
AudioSpeechToText - Text generation: the third leg of the set, which is what makes freeform NPC conversation possible when you combine all three.
Moderation Responsibility Depends on the API You Use
This is the detail most easily missed, and it changes who gets punished for bad output. Roblox splits it by API:
- For the real-time API, you are not held responsible for potentially violative audio output unless you intentionally program the system to generate violating content.
Code: Select all
AudioTextToSpeech - For the asset generation path, the generated audio is saved to your inventory, and any moderation action is taken against your account as the asset owner. Roblox directly recommends against letting players input text for audio asset generation because of this.
- All text and audio output is filtered before processing, and violative input returns an error with no audio generated.
FAQ
Is text-to-speech free to use?
The baseline utilisation is free, with rate limits and character limits in place. Roblox also integrates it with Extended Services, so you can purchase additional usage if the free tier is not enough for your experience.
Can I call CreateAssetAsync from inside my game?
No. The API can only be used in locally loaded plugins and in Open Cloud Luau execution. It is not available in-experience, and Roblox says these APIs are explicitly not meant for that context.
Does using TTS change my content maturity rating?
No. Roblox states a rating is not impacted solely because you include an AI component, including text-to-speech. Only an experience where users can have unlimited conversations with an AI model receives the Restricted rating.
Why does my baked asset sound different from the live version?
Because
Code: Select all
PlaybackSpeedCode: Select all
textCode: Select all
voiceIdCode: Select all
pitchCode: Select all
speedCode: Select all
PitchCode: Select all
SpeedCan I name my generated speech assets?
Not yet. Roblox lists the lack of name and description support as a current limitation, so every asset comes out named
Code: Select all
TTS_Asset_Do I need to handle multiple languages separately?
For baked assets, yes.
Code: Select all
AutoLocalizeSources
- Roblox Developer Forum: Studio Beta, Text-to-Speech Asset Creation Support in Lua (October 22, 2026), including the four supported fields, the signature, and the limitations list
- Roblox Creator Hub: AssetService:CreateAssetAsync reference, the supported asset types including Audio with an AudioTextToSpeech root, and the request parameter table
- Roblox Creator Hub: AudioTextToSpeech reference, the per-minute throttle formula, the client-side throttle, the 300 character text limit, and the full property list
- Roblox Creator Hub: Audio objects guide, the 2D and 3D text-to-speech setup, the artificial voices table, and the AutoLocalize language list
- Roblox Developer Forum: Text-to-Speech API Full Release, the rate limit formula, the observability dashboards, and the moderation responsibility split
- Roblox Developer Forum: Text-to-Speech API Update, the August 2026 addition of VoiceId 11 and the four new languages
- Roblox Developer Forum: Lua Asset Creation for Creator Tooling with CreateAssetAsync (December 2024), the original four supported asset types, the 30 requests per minute limit, and the plugin scope restrictions
- Roblox Creator Hub: AssetType enum reference, confirming Audio as a valid asset type value