Every layer, still a layer.
Mosaic reads your .psd or .svg straight into Roblox Studio and rebuilds it as native Frames, TextLabels and UIGradients. Not a flattened image you have to re-export every time a pixel changes.
- Frame / Rectanglenativemaps directly to a Roblox Frame
- Button.psd:CTAapproximatedUICorner applies one radius to all four corners; the largest was used
- Hero/Backdrop.svgrasterizedradial and angular gradients have no linear equivalent, so this fill was baked to an image
- Card.psd:Shadowunrepresentableinner shadows cannot be faked with UIStroke and were dropped from the report
An image and a native object are not the same thing.
In Roblox, an image can't just live in your file. Every image has to be uploaded, pass moderation, and get referenced by a numeric ID before it exists. A native UI object needs none of that. It's just a Frame, with properties, and it's there the moment it's created.
Image asset
- Export the layer from Photoshop
- Upload it to Roblox
- Wait for moderation to clear it
- Get back a numeric AssetId
- Wire that ID into your UI
Want to nudge one pixel? Repeat all five steps.
Native object
- Open the .psd in Mosaic
- Frame appears in Explorer instantly
- Click it. Change a property.
- Ship it.
No queue, no ID, no re-export. It's just an object.
Three passes, from design file to a plan you can trust.
No exporting first. Mosaic opens the file itself and keeps what a flattened image would throw away.
Open the file, not an export of it
Point Mosaic at a .psd directly, or import an .svg from Photopea, Illustrator, or Figma. Photoshop's own SVG export flattens most content to raster. Reading the .psd itself is what keeps the layer tree, vector masks, layer effects, and type layers intact as structured data.
It reads intent, not just pixels
Internally, the file becomes a DesignDocument: what you meant, including things Roblox can't render on its own. That document runs through a series of compiler passes that decide how each piece should become a real Roblox object.
You get a plan, and a report
The output is a RobloxPlan: Frames with UICorner, UIStroke and UIGradient, TextLabels with mapped fonts, UIListLayouts recovered from evenly spaced rows. Every element ships with a reason.
Built around how people design for Roblox.
You design in Photoshop because your clients understand Photoshop.
Right now you rebuild every mockup pixel-by-pixel inside Studio afterward: twice the work, once billed. Mosaic turns the same .psd into the Frame hierarchy itself, so what you send the client is closer to what ships.
60 image layers in one file, all needing the right asset.
Bulk-import your PNGs once through Studio's own Asset Manager. Mosaic matches and binds them to the right layer by name automatically. Anything left unmatched is flagged clearly, not silently skipped.
A rounded frame with a gradient doesn't need to be a picture.
Moderation queues exist for pictures. Mosaic keeps everything that can be represented as a native object (corners, strokes, gradients, layout) out of that queue entirely.
A design update shouldn't mean a rebuild.
Fonts, gradients, and effects decided once in the design file are gone the moment someone hand-fixes a re-import in Studio. Mosaic re-imports the same file the same way every time.
What we tell you, not hide.
Every design tool has limits. Mosaic's rule is that you always know exactly which ones you hit, and why. Nothing is silently dropped.
Design files are treated as untrusted input. Document size, nesting depth, element count, coordinate range, and text length are all bounded. A malformed or hostile file is refused with an explanation, not a frozen editor.
Everything runs on your machine: no server, no upload of your design file, no account required to use the plugin.
A plugin can't upload assets. That's a Roblox platform restriction, not a Mosaic one. Bulk-import your PNGs through Studio's Asset Manager first; Mosaic matches and binds them by name. Anything left over is flagged, not dropped.
Until a real asset is bound, what you see drawn in the preview is session-only. Mosaic tells you this in-app, before it matters. It never breaks silently later.
A layer hidden in your source file comes in hidden (Visible = false), never deleted. Conditional states you built on purpose stay intact.
A design font that isn't native to Roblox gets mapped to the nearest built-in family. Every substitution is named in the capability report, so you know exactly what changed.
Roblox's UI system has no native blur or inner shadow. Mosaic reports these as unrepresentable instead of quietly leaving them out of the plan.
UICorner takes one radius per element. A design with a different radius on each corner gets approximated to the closest single value.
UIGradient is linear-only on Roblox. Radial gradients are rasterized to an image rather than faked with a linear one.
One plugin, one price.
Pay once, own it, no subscription, ever
- Full plugin, all import features
- Capability reports on every import
- All future updates included
- No renewal, no cancellation
Images still need a one-time upload through Roblox's own Asset Manager first, since plugins can't upload assets directly. Mosaic adopts them automatically by name from there. Mosaic is also listed on the Roblox Creator Store, which is a separate purchase from this one.
Send your first .psd through, and see what stays a layer.
Subscribe, your license key shows up the moment you verify your email. Covered by a 7-day money-back guarantee.
Mosaic runs entirely inside Studio, on your machine.
Your design file never leaves your computer.
A verified email gets you a license key, nothing else to fill out.