The Moderation Lifecycle
A conceptual deep-dive into how the application handles Roblox's asynchronous audio moderation system.
When you click "Start Upload," your audio files don't instantly become available in-game. They must first pass through Roblox's internal moderation system.
Understanding this lifecycle explains why the Roblox Audio Bulk Uploader behaves the way it does, particularly regarding its background polling and safety mechanisms.
1. The Three States of an Asset
Throughout its lifecycle in the app, an audio asset moves through three primary states:
- Uploading: The physical file is being transferred from your local machine to Roblox's servers via the Open Cloud API.
- Reviewing: The file has been received and is sitting in Roblox's moderation queue.
- Approved or Rejected: Roblox has made a final determination on the asset's compliance with community standards.
The Unpredictability of "Reviewing"
The "Reviewing" state is heavily asynchronous. An asset might be approved by an automated system in under ten seconds, or it might be flagged for manual human review, taking several hours.
Because the app cannot predict how long this will take, it must decouple the upload action from the post-upload actions.
2. The Background Poller
To bridge the gap between upload and approval, the application utilizes a persistent background poller.
While the app is open, this poller runs silently in the background, periodically pinging the Roblox API to check the status of any assets currently in the "Reviewing" state.
On Approval
When the poller detects that an asset has transitioned from "Reviewing" to "Approved," it kicks off the deferred post-upload workflow:
- It triggers Auto-Grant Permissions (if configured) so the asset can be used in your games.
- It triggers DataStore Sync (if Owner Mode is enabled) so your live game knows the asset is ready to play.
State Persistence via pending_moderation.json
Because "Reviewing" can take hours, you might need to close the app before a batch is finished.
To prevent losing track of these assets, the app maintains a local state file called pending_moderation.json in your src/ working directory. This file simply stores the Asset IDs that are currently under review.
When you restart the application, the poller automatically reads this file and resumes tracking. You don't need to leave the app open indefinitely, and you don't need to re-upload files that are still pending.
(Note: Because this file only contains temporary Asset IDs, it is completely safe to add to your .gitignore.)
3. The Rejection Safety Halt
If the poller detects that an asset has transitioned from "Reviewing" to Rejected, it triggers an immediate, all-or-nothing queue halt. The app will stop uploading the rest of your pending queue.
Why Halt the Entire Queue?
Roblox treats moderation seriously. While a single rejected audio file usually just results in that specific asset being deleted, repeated moderation rejections in quick succession can trigger account-level moderation actions, including temporary bans or permanent account termination.
If you are uploading a batch of 500 files and the first few contain copyrighted material or violate safety guidelines, allowing the app to blindly upload the remaining 490 files could severely jeopardize your Roblox account.
By halting the entire queue immediately upon a single rejection, the app forces you to stop, review the rejected file, and assess the rest of your batch before proceeding. It is a strict safety mechanism designed to protect your creator account.