Video → 1024×1024 frame atlases → Roblox Open Cloud → Luau catalog
Videos below are scoped to this browser session (a cookie), not a Roblox account — nobody else can see or touch them. Clearing cookies loses this list, but the Roblox assets you've already uploaded are unaffected.
×
ffmpeg not found. Install it with brew install ffmpeg, then restart the server.
Resumable jobs
Left over from a previous server run — still need atlases uploaded.
Drop a video here or click to choose a file
Skips the first N seconds; playback begins there and looping returns to it.
If Roblox image moderation rejects an atlas, record that frame as missing and retire the account that uploaded it, instead of failing the whole job. You can re-upload missing frames later from the Videos list ("Fill missing frames"). Off by default.
API keyUser id
Keys are held in memory only — never written to disk, logs, or any response. Uploads run in parallel across every account listed, each with its own rate limit, and a job survives one account being banned or moderated: the rest keep uploading. Each account needs the Assets Read+Write scope (add legacy-asset:manage too for automatic id resolution). This tool cannot set asset privacy per upload — each uploading account's own setting decides it, at creation, irreversibly: Creator Hub → Settings → Advanced → Asset Privacy. Pick by what you need: leave "Opt-in to restrict assets on creation" off if the video only has to render in another account's experience (Open Use, nothing else to do), or turn it on if the atlases must back an EditableImage there — that requires Restricted assets plus a share grant, which is what the "Share uploads" section below does. Set it before converting; it cannot be changed afterwards (see README).
Every asset the accounts above upload is granted Roblox's Use permission to this user or group, so required alongside the accounts above for every action on this page — converting, resuming, retrying, resolving and sharing.
Repair mode — this video already exists in the catalog. Instead of a fresh conversion, re-upload only the atlases owned by the account(s) you pick below (for example after one was banned). Drop the same video file and use the same fps / frame size as the original conversion; every other atlas keeps its existing asset id.
Fill missing frames — re-uploading only the frames previously skipped by moderation for this video. Drop the same video file and use the same fps / frame size as the original conversion; every other atlas keeps its existing asset id. A frame that gets moderated again simply stays missing.
Starting…
Catalog entry written.
Note: new image assets go through moderation and may take a few minutes to appear in-game.
Create a ModuleScript named exactly under , then paste the copied code into its script editor (not the Command Bar — large id lists don't paste there).
Videos
Every video currently in the catalog. Edit AudioId/StartOffset and Save, install a video's module into Studio, resolve outstanding ids, or delete an entry.
No videos yet.
Name
Frames
Atlases
Ids
AudioId
StartOffset
Get the code
Everything this feature needs besides a video's own module — copy or download each piece and paste it into the script editor at the listed path (create the instance first with that exact name/type). Command Bar is not recommended here; large id lists don't paste there.
Re-sync files
After creating a video's ModuleScript instance in Studio (or editing AudioId/StartOffset below), click this to bump every generated file's mtime so Azul's watcher pushes the current contents into Studio.
Resolve decal ids
Re-checks catalog atlas ids and upgrades any that fell back to a decal id. New conversions already run this automatically — use this to retry a video that came back unresolved, or to re-check the whole catalog. Leave the name blank to process everything. Uses the account list above: each atlas is checked with the key of the account that uploaded it, so an account missing from the list has its atlases skipped and reported rather than resolved. Every key needs the legacy-asset:manage scope (in addition to Assets read/write), and its IP allowlist must cover this server's egress IP — a key that is correctly scoped but allowlisted to a different machine is rejected exactly like an unscoped one. Group-scoped keys currently aren't accepted by this endpoint; use the Studio script from the README instead if resolving group-owned assets.
Share uploads
Grants Roblox's Use permission on every asset the account list above has uploaded to the share recipient above (a user or a group), so a place or script running under that account/group can use them. The server keeps a ledger of what it has already granted, so re-running only grants what's new — each asset is granted with the key of the account that uploaded it, so an account missing from the list has its assets skipped and reported rather than granted. To share just one video instead of this whole-account sweep, use the Share button on a video's row in the Videos table above.
Only Restricted assets can be granted. Whether an atlas is Restricted is decided by the uploading account's Asset Privacy setting at the moment it is created (Creator Hub → Settings → Advanced → Asset Privacy) — this tool cannot set it per upload. Anything created Open Use is irreversible and can never be granted, no matter what; those are reported separately as a permanent, expected skip, and the only fix is enabling that setting and re-converting. Open Use atlases still render fine as ordinary decals — what they cannot do is back an EditableImage in an experience that does not own them.