Text Layers
SudoMock renders the text layers in your PSD, so you can swap the wording, font, size, and color at render time and get back an image that keeps the look the designer built.
What Text Layer Rendering Means
A text layer is live, editable type inside a PSD, the kind a designer uses for a headline, a name, or a price. SudoMock reads those layers on upload and lets you swap the wording, font, size, and color at render time, so one template becomes an endless run of personalized images. Most PSD mockup tools flatten or ignore text; SudoMock renders it and stays faithful to the style the designer built.
Text layers and fonts at a glance
- 2,000+ open-licensed font families, free for commercial use
- Custom TTF and OTF font upload, up to 5 MB each, on Pro and Scale
- Styled segments: mixed-style layers stay editable run by run
- Box text: area text wraps inside its box and clips exactly as designed
What You Get on Upload
Every POST /api/v1/psd/upload response lists the text layers it found under text_layers. Each one carries its current text, font, size, color, whether that font is available in your catalog, and whether it can be edited in this version.
1{2 "success": true,3 "data": {4 "uuid": "c315f78f-d2c7-4541-b240-a9372842de94",5 "name": "Greeting Card Front",6 "smart_objects": [ /* ... */ ],7 "text_layers": [8 {9 "uuid": "b7f2c1a0-9e34-4d21-8f0a-1c2b3d4e5f60",10 "name": "Headline",11 "text_content": "YOUR BRAND",12 "font_postscript_name": "Poppins-Bold",13 "font_size": 96,14 "color": "#1A1A1A",15 "font_available": true,16 "is_editable": true,17 "segment_count": 118 }19 ],20 "collections": []21 },22 "message": ""23}
| Field | Meaning |
|---|---|
| uuid | Stable id of the text layer. Use it to target the layer at render time. |
| name | Layer name as set in Photoshop. |
| text_content | The current text, or null if the layer has none. |
| font_postscript_name | The layer's font, by PostScript name. |
| font_size | Effective size in pixels at the PSD resolution. |
| color | Fill color as #RRGGBB. |
| font_available | true if the font is in your catalog, false if not, null before it is resolved. |
| is_editable | true when you can change the text in this version. |
| segment_count | 1 for a single-style layer, 2 or more when the layer mixes styles. Mixed-style layers also list each run under segments. |
Personalizing at Render Time
Add a text_layers array to your render request with only the layers you want to change. Each entry needs the layer uuid and the new text; font, font_size, and color are optional and fall back to the layer's original values. The font value is either a catalog font uuid or its PostScript name from GET /api/v1/fonts.
1{2 "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",3 "smart_objects": [4 {5 "uuid": "128394ee-6758-4f2f-aa36-e2b19b152bd9",6 "asset": { "url": "https://your-cdn.com/design.png", "fit": "cover" }7 }8 ],9 "text_layers": [10 {11 "uuid": "b7f2c1a0-9e34-4d21-8f0a-1c2b3d4e5f60",12 "text": "SUMMER SALE",13 "font": "Poppins-Bold",14 "font_size": 96,15 "color": "#C0392B"16 }17 ]18}
smart_objects is no longer required on its own
smart_object or one text_layer. You can render a text-only personalization without touching a smart object.Hidden layers are personalization slots
Editing Mixed-Style Layers
When a single layer mixes styles, like a thin first name next to a bold surname, the upload response marks it with segment_count greater than 1 and lists each run under segments. Personalize it by sending a segments array with only the runs you want to change, each by its index. Every segment keeps its own font, size, and color, and any run you leave out keeps its original text.
1{2 "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",3 "text_layers": [4 {5 "uuid": "b7f2c1a0-9e34-4d21-8f0a-1c2b3d4e5f60",6 "segments": [7 { "index": 0, "text": "Jane " },8 { "index": 1, "text": "SMITH" }9 ]10 }11 ]12}
Fonts
The built-in font catalog is the full open-licensed Google Fonts library (2,000+ families under OFL, Apache, and UFL licenses), free to use in commercial work. Pro and Scale plans can also upload their own TTF and OTF fonts.
List, search, and filter the catalog with GET /api/v1/fonts. On Pro and Scale plans, upload your own fonts with POST /api/v1/fonts (TTF and OTF, up to 5 MB each) and remove them with DELETE /api/v1/fonts/{uuid}. Pro includes 10 custom fonts; Scale is unlimited.
Confirm your font license on upload
license_confirmed field set to true, confirming you have the right to use and embed it. Without it the upload returns 422: “Confirm you have the right to use and embed this font.”1curl -X POST https://api.sudomock.com/api/v1/fonts \2 -H "X-API-KEY: sm_your_api_key" \3 -F "[email protected]" \4 -F "license_confirmed=true"
When a Font Is Missing
When a text layer's original font is in your catalog, SudoMock renders with it automatically. When it is not, the layer still renders in a default font and the response flags it, so you can upload the exact font or pick a catalog one and render again. Nothing is dropped and nothing fails silently.
A fallback never fails the render. It succeeds and attaches a warning so you can decide what to do next: upload the exact font, or pick a catalog font and render again.
1{2 "success": true,3 "data": { "print_files": [ /* ... */ ] },4 "warnings": [5 {6 "code": "TEXT_FONT_FALLBACK",7 "text_layer_uuid": "b7f2c1a0-9e34-4d21-8f0a-1c2b3d4e5f60",8 "message": "Original font not in catalog; rendered in a default font."9 }10 ]11}
What Is Supported (as of July 2026)
| Feature | Status | Notes | What to do instead |
|---|---|---|---|
| Point text (single line) | Supported | Renders with your text, matched to the original font, size, and color. | |
| Edit text, font, size, and color | Supported | Override any of these per render, or leave them to render exactly as designed. | |
| Font catalog (2,000+ families) | Supported | The full open-licensed Google Fonts library, referenced by uuid or PostScript name. | |
| Custom font upload | Supported | Upload your own TTF and OTF fonts (up to 5 MB each) on Pro and Scale plans. | |
| Hidden text layers | Supported | Target a hidden layer to render it, which makes personalization slots easy to build. | |
| Faux bold and italic | Supported | Photoshop's synthetic bold and italic styling renders true to the original, even when the family ships without those cuts. | |
| Underline and strikethrough | Supported | Both decorations carry over exactly as set on the layer. | |
| Letter spacing (tracking) | Supported | Tight or loose tracking is preserved, so the spacing matches the design. | |
| All caps and small caps | Supported | Both caps styles render as designed, including when you swap in new wording. | |
| Superscript and subscript | Supported | Raised and lowered characters render at the correct size and position. | |
| Baseline shift | Supported | Characters nudged above or below the baseline stay exactly where the designer placed them. | |
| Horizontal and vertical scale | Supported | Condensed or stretched text keeps its exact character width and height. | |
| Text stroke | Supported | Outline color and width render faithfully, with the fill painted first. | |
| Multi-line point text | Supported | Manual line breaks and line spacing (leading) render true to the original across every line. | |
| Text opacity | Supported | Semi-transparent text renders at the exact fill opacity the designer set. | |
| Styled segments (mixed-style text) | Supported | Text that mixes styles in one layer (a thin name next to a bold surname, a big price with a small currency) is editable segment by segment; every segment keeps its exact styling. | |
| Paragraph (box) text | Supported | Area text wraps to its box exactly as designed; text past the box renders clipped, matching the original behavior. | |
| Warped text | Not supported | Not editable in this version; it renders with its original appearance. | Need curved or wavy custom text today? Render your text as an image and place it in a warped smart object slot; warped smart objects are fully supported. Or rasterize the text layer in Photoshop before upload. |
| Rotated text layers | Not supported | Not editable in this version; it renders with its original appearance, rotation and all. | Set the layer rotation back to zero in Photoshop before upload to edit the wording, or rasterize it to keep the angle. |
| Vertical text | Not supported | Not editable in this version; it renders with its original appearance. | Convert the vertical text to horizontal point text in Photoshop before upload to make it editable. |
| Justified alignment | Not supported | Not editable in this version; it renders with its original appearance. | Switch the paragraph to left, center, or right alignment before upload to make it editable. |
| Overflowing multi-line edits | Not supported | A multi-line edit that would overflow its slot renders the original instead of breaking the composition. | Shorten the replacement text, or design the slot with more room so longer edits fit. |
A few layer types and styles -- warped, rotated, and vertical text, and justified alignment -- are not editable in this version, so they render exactly as they look in the PSD. Each has a one-step workaround in the table above, so your layout still survives the upload.
Optical kerning nuances and ligature toggles may differ slightly from the original.
Errors and Warnings
Errors block a render so you can fix the request; warnings ride along with a successful render so you know exactly what happened. The codes are stable, so you can branch on them in your integration.
| Code | Type | What it means |
|---|---|---|
| TEXT_LAYER_NOT_FOUND | Error (400) | The text layer uuid in your request does not belong to this mockup. |
| FONT_NOT_FOUND | Error (422) | The font you asked for is not in your catalog. Upload it or pick a catalog font. |
| TEXT_FONT_FALLBACK | Warning | The original font was not in your catalog, so the layer rendered in a default font. Upload the font or choose a catalog font, then render again. |
| TEXT_WARP_BAKED | Warning | The text layer is warped, so it rendered with its original appearance instead of your new text. |
| TEXT_LAYER_NOT_EDITABLE | Warning | This text layer cannot be edited in this version (for example paragraph text), so it rendered as-is. |
The full feature matrix, including everything beyond text, lives on the PSD Compatibility page, and the request and response fields are documented on Render Mockup.
Frequently Asked Questions
Can an API edit the text in a Photoshop PSD?
Yes. SudoMock renders the text layers in your PSD, so you can swap the wording, font, size, and color at render time and get back an image that keeps the look the designer built. Upload a PSD and the response lists each text layer with its text, font, size, and color; send new values at render time to personalize the image.
What happens if a PSD uses a font I do not have?
When a text layer's original font is in your catalog, SudoMock renders with it automatically. When it is not, the layer still renders in a default font and the response flags it, so you can upload the exact font or pick a catalog one and render again. Nothing is dropped and nothing fails silently.
Which fonts can I use?
The built-in font catalog is the full open-licensed Google Fonts library (2,000+ families under OFL, Apache, and UFL licenses), free to use in commercial work. Pro and Scale plans can also upload their own TTF and OTF fonts.
Can I upload my own fonts?
Yes, on Pro and Scale plans. Upload your own TTF and OTF fonts (up to 5 MB each); Pro includes 10 custom fonts and Scale is unlimited. Free and Starter plans render from the catalog.
Does SudoMock support warped, rotated, and vertical text?
A few layer types and styles -- warped, rotated, and vertical text, and justified alignment -- are not editable in this version, so they render exactly as they look in the PSD. Each has a one-step workaround in the table above, so your layout still survives the upload.
Next Steps
See the render request and response fields, or check what else SudoMock renders from your PSD.