Polotno is a JavaScript image editor SDK for building canvas editors inside a React app. You integrate it, and your team owns the editor from there.
But Polotno is an SDK: a library you integrate, host and maintain yourself. The license starts at $249/month (Grass Roots, subject to review) and the standard Self-Serve license is $899/month. You still run the storage, database, render servers and user accounts around it.
I built Orshot because I wanted that part done for me. Orshot Embed puts a full design editor in your app with one iframe (or a React or Vue component). Hosting, storage and a REST API for rendering come with it.
This is the editor your users would get: "Acme Studio" is a made-up brand running a real Orshot embed. Switch templates, edit anything, then press "Add to App" to send the design to this page the way your app would receive it. Nothing you change is saved.
Press “Add to App” in the editor and this page receives the PNG, the way your app would.
- for a white-label editor
- $160/mo
- Orshot$160/moPolotno$249/mo
- extra for 20,000 renders a month
- $0
- Orshot$0Polotno$80
- domains on one plan
- 5
- Orshot5Polotno1
What's Different
If you're evaluating Polotno SDK to embed a design editor, here's how Orshot Embed compares:
| Feature | Orshot Embed | Polotno SDK |
|---|---|---|
| Integration | One iframe, or the React/Vue SDK | An SDK you build your editor around |
| Integration Effort | Paste the embed code, configure in the dashboard | You wire up storage, accounts, saving and export |
| Framework | Any stack, since it's an iframe | React inside; Vue, Angular and no-framework setups wrap it |
| Free Option | Free plan with 100 credits a month, about 100 images (embed from $39/mo) | 60-day trial on a dev server, with a "Powered by Polotno" credit |
| Starting Price | $39/month: embed plus 1,500 credits (about 1,500 images) | $249/month Grass Roots (reviewed), $899/month Self-Serve |
| Pricing Model | Flat plan. API renders, workflow renders and MP4 downloads count; opening the editor doesn't | Flat license. Cloud Render billed on top |
| Hosting and Storage | Fully managed | You host the editor, designs and uploads |
| Rendering API | REST API on every plan | Self-host polotno-node, or Cloud Render at $0.004/image |
| User Downloads | PNG, PDF and HTML from the embed, plus MP4 on video pages, which uses renders* | Built into their UI, running on your hosting |
| Multi-page Templates | Native carousel/PDF support, all pages in one API call | Native pages and multi-page PDF export |
| Video | MP4/WebM/GIF with per-layer controls and animations | MP4 encoded in the browser, or Cloud Render at $0.03/minute |
| White-label | Your title, icon and accent color from the dashboard. Orshot branding can be removed* | Full control in code (paid license) |
| Per-user permissions | Lock create, delete, uploads, downloads and more per user from the dashboard*, or per session in a JWT on any embed plan | You build accounts and permission checks |
| Template Import | Canva, Figma, AI | Figma, PSD, PDF and SVG import |
| Webhooks | Built in: template.create, template.update, template.delete* | Client-side hooks; syncing to your server is yours |
| Browser Events | postMessage events for saves and downloads* | Store events inside your own app |
| Social Publishing | Built in, 15+ platforms | Build your own |
* Available on specific plans. See pricing for what each plan includes.
The Real Problems with Polotno
Based on conversations with developers who've evaluated or used Polotno:
1. It's an SDK, Not a Ready-to-Use Embed
Polotno gives you the components for a canvas editor. The product around it is yours to build. You need to:
- Set up React (Vue, Angular and plain JS setups still load the React core)
- Host the editor on your infrastructure
- Store designs, uploads and fonts in your own database and bucket
- Run rendering yourself (polotno-node drives headless Chromium through Puppeteer) or pay for Cloud Render
- Build user accounts, and decide who can edit, delete or export what
Orshot Embed is the opposite approach. One iframe gives your users a full design editor, and Orshot hosts the editor, the designs and the uploads. Need to render at volume? The REST API is part of every plan.
2. The License Is Only the Start
Polotno's pricing is a flat license:
- Grass Roots, $249/month: subject to manual review, for small operators (under 50 people) in lower-purchasing-power markets, with limited volume
- Self-Serve, $899/month: unlimited use on a single domain under one brand family
- Enterprise: custom pricing
The 60-day trial runs on a dev server only, and trial keys always show a "Powered by Polotno" credit. Their Cloud Render API is extra: $0.004 per image and $0.03 per video minute.
Orshot's embed starts at $39/month with 1,500 credits (about 1,500 images). Opening the embed, designing in it and downloading images, PDFs or HTML don't use renders. API renders, workflow renders and MP4 downloads from the embed count against your plan.
White-label, user downloads, events and webhooks start at $160/month (20,000 credits, about 20,000 images), which also adds per-user data for 50 embed users.
3. React Inside, Wrappers Outside
Polotno 4 targets React 19. Their docs cover Vue, Angular and no-framework setups, but those wrap the same React core. So React ships in your bundle either way.
Orshot Embed is framework-agnostic. It's an iframe, so it works in React, Vue, Angular, Svelte, WordPress, Webflow or anything that renders HTML:
<iframe src="https://orshot.com/embeds/YOUR_EMBED_ID" title="Orshot Embed" allow="clipboard-write" style="width: 100%; height: 600px; border: none;"></iframe>Prefer a component? There's a React SDK (@orshot/embed-react) and a Vue SDK. The REST API works from any backend: Python, Node, PHP, Go.
4. Templates Don't Become an API on Their Own
Polotno handles multi-page designs well and exports multi-page PDFs. Filling a template with data is where the work starts.
Their variables are {name} placeholders in the design JSON. Your backend swaps in values, then renders the result itself or sends it to Cloud Render.
In Orshot, you mark any layer as dynamic and the template becomes an API endpoint. Multi-page templates work the same way: design a carousel in Studio, then generate every slide in one API call. Same for multi-page PDFs and multi-page videos.
5. Building vs Buying Takes Real Time
Polotno's site says customers save "6+ months" of internal building time by using their SDK. That's fair, but you still own the integration: storage, rendering, accounts and permissions. Building on the libraries underneath is more work again; see Konva vs Fabric.js for the same editor features coded in both.
With Orshot, you can go from signup to rendering via API in under an hour. Design a template, grab your API key, start rendering. Adding the embed is a copy and paste.
What You Get with Orshot
Beyond solving Polotno's integration overhead:
- One-line embed - Orshot Embed drops a full design editor into your app. Users design in it without using renders. They can download PNG, PDF and HTML at no render cost*. MP4 downloads on video pages use renders from your plan.
- Customization without code - Configure everything from your dashboard:
- Branding - Your accent color, icon and title (Orshot branding can be removed*)
- Template controls - Show or hide the template list, allow delete and rename, enable carousels
- Download permissions - Turn user downloads on or off*
- Language - 6 languages (English, Spanish, Portuguese, French, German, Russian) with optional user switching
- Domain security - Restrict the embed to your domains
- Per-user data and permissions* - Give each of your users a private template library and lock actions per user (create, delete, uploads, downloads and more) from the dashboard. Locks set per session in your JWT work on any plan with the embed.
Built-in webhooks - Get notified on your server when users create, update or delete templates*. Trimmed payload:
{
"event_type": "template.update",
"template": {
"id": "abc123",
"name": "Spring promo",
"thumbnail_url": "https://..."
},
"workspace_id": "workspace_789",
"user_id": "user_456",
"timestamp": "2026-09-22T10:30:00Z"
}Browser events via postMessage - Listen for saves and downloads in your app*:
window.addEventListener("message", (event) => {
if (event.origin !== "https://orshot.com") return;
const { type, data } = event.data;
if (type === "orshot:template:update") {
console.log("Template saved:", data.id);
// Update your UI, trigger workflows, etc.
}
if (type === "orshot:download:png") {
console.log("User downloaded a PNG");
}
});REST API included - Every template becomes an API endpoint. The API is part of every plan, not a separate add-on like Polotno's Cloud Render.
A capable design editor - Orshot Studio includes features your users will use:
- Gradient text - Linear and radial gradients on any text layer, picked with Colorshot, our open source gradient picker
- Auto-scale text - Text shrinks to fit its container
- Smart Stacking - Position elements relative to each other for dynamic layouts
- Video layers - Add video elements with trim, loop and mute controls
- Dynamic layers - Mark any layer as dynamic for API/parameter overrides
- Multi-page templates - Create carousels, slideshows, multi-page PDFs
- Background removal - One-click AI background removal
- Import from Canva/Figma - Bring existing designs in
Multi-page templates - Create carousels, multi-page PDFs and multi-page videos. See how it works.
Video generation - Export to MP4, WebM or GIF. Control each video layer with .trimStart, .trimEnd, .muted and .loop parameters via API. Add per-layer animations: fade ins, slide transitions, scale effects, visibility timing and staggered choreography. Learn more.
Import from anywhere - Clone from Canva, import from Figma, or use AI to generate templates. Much faster than designing from scratch.
No-code integrations - Make, Zapier, n8n. Connect to thousands of apps without writing code. Plus MCP Server for AI apps and CLI for terminal workflows.
Social Publishing - Render and post to 15+ social platforms in one API call. Publish now, schedule, or save as a draft.

* Available on specific plans. See pricing for what each plan includes.
Cost Comparison: Real Numbers
Here's what a typical embed setup costs on each, using list prices.
Scenario: 5,000 API images a month, plus your users designing and downloading in a white-label editor
| Cost Component | Orshot ($160/mo) | Polotno (Self-Serve) |
|---|---|---|
| Plan or License | $160/month | $899/month |
| Credits Included | 20,000/month (about 20,000 images) | Self-hosted, or pay per render on Cloud Render |
| 5,000 Image Renders | Included | $20 on Cloud Render (5,000 × $0.004) |
| White-label Editor | Included | Included with a paid license |
| User Downloads | Included (MP4 uses renders) | Built into their UI, on your hosting |
| Hosting, Storage, Database | Included | Your cost |
| Per-user Libraries & Permissions | 50 embed users | You build it |
| Monthly Total | $160 | $919 with Cloud Render, plus your hosting |
If you qualify for Grass Roots at $249 (reviewed, for small operators), the gap is smaller. Hosting, storage and rendering are still yours to run.
If you don't need white-label or user downloads, the $99 tier covers 5,000 credits a month, enough for this scenario's 5,000 images (Orshot branding stays on the embed). At 20,000 images a month, Orshot is still $160. Polotno's Cloud Render fees alone would be $80 on top of the license.
Bring Your Polotno Designs With You
You don't start over. Paste the JSON from Polotno Studio, or the store.toJSON() output your app already saves, and each design becomes an Orshot template. Text and image layers turn into API parameters on import, and you can bulk import up to 10 files at once.

Step-by-step in the Polotno import docs, and the full move, from editor to renders, in the Polotno migration guide.
When a Self-Hosted SDK Fits Better
An SDK you host is the better route if you need:
- Code-level changes to every editor component
- The editor and rendering on your own servers
- PSD import or PPTX export
- A complex design product of your own, where the editor is the product
If you want a design editor in your app without running the stack behind it, with a REST API ready for rendering, Orshot gets you there in minutes instead of weeks.
Getting Started with Orshot Embed
If you're evaluating alternatives to Polotno SDK, here's how to get an editor running in your app:
Step 1: Configure Your Embed (5 min)
Sign up for Orshot and open Orshot Embed from your workspace sidebar. Then:
- Enable embed and add your allowed domains (including
localhost:3000for testing) - Customize branding - accent color, title, custom icon
- Set permissions - template visibility, carousels, and downloads*
- Add a webhook URL (optional)* - receive
template.create,template.updateandtemplate.deleteevents

Step 2: Add It to Your App (2 min)
These are the pieces embed customers wire up most, from the first iframe to syncing designs to your backend:
One iframe, with a userId so each of your users gets their own templates and uploads (per-user data*), and a templateId to open a design straight away.
<iframe
src="https://orshot.com/embeds/YOUR_EMBED_ID?userId=user_123&templateId=YOUR_TEMPLATE_ID"
title="Orshot Embed"
style="width: 100%; height: 700px; border: none; border-radius: 8px;"
allow="clipboard-write"
></iframe>Prefer a component? @orshot/embed-react mounts the same editor and hands you callbacks for its events.
import { OrshotEmbed } from "@orshot/embed-react";
export default function Editor() {
return (
<div style={{ height: "700px" }}>
<OrshotEmbed
embedId="YOUR_EMBED_ID"
templateId="YOUR_TEMPLATE_ID"
modifications={{ headline: "Spring sale" }}
onTemplateCreate={(data) => console.log("Created:", data)}
onError={(err) => console.error(err)}
/>
</div>
);
}Listen for saves and downloads in your page to sync your database or track usage (with events on)*.
window.addEventListener("message", (event) => {
if (event.origin !== "https://orshot.com") return;
const { type, data } = event.data;
if (type === "orshot:template:update") saveToYourDb(data);
if (type === "orshot:download:pdf") trackDownload(data);
});Fill layers from your own UI or data without reloading the editor. Keys are the parameter names in your template. Needs events on*.
const iframe = document.querySelector("iframe");
iframe.contentWindow.postMessage(
{
type: "orshot:embed:control",
modifications: {
headline: "Hello from Acme",
"page2@image": "https://example.com/product.jpg",
},
},
"*",
);Add a webhook URL and your server gets a POST whenever a user creates, updates or deletes a template*. Trimmed:
{
"event_type": "template.update",
"template": {
"id": "abc123",
"name": "Spring promo",
"canvas_width": 1080,
"canvas_height": 1080,
"thumbnail_url": "https://..."
},
"workspace_id": "workspace_789",
"user_id": "user_123",
"timestamp": "2026-09-22T10:30:00Z"
}Turn on Require signed token and your server signs a short-lived JWT for each session. sub is the user, and permissions can lock actions for that session.
import jwt from "jsonwebtoken";
const token = jwt.sign(
{ sub: "user_123", permissions: { "template/delete": true } },
EMBED_SIGNING_SECRET,
{ expiresIn: "15m" },
);
const src = `https://orshot.com/embeds/YOUR_EMBED_ID?token=${token}`;Full references: events, controlling the embed, webhooks and JWT authentication. New to the embed? Start with the introduction or this walkthrough.
That's it. A full design editor in your app with webhooks and events. No React setup, no component wiring, no rendering servers.
* Available on specific plans. See pricing for what each plan includes.
Embed Features at a Glance
| Feature | What It Does |
|---|---|
| Branding | Your accent color, title and icon. Orshot branding can be removed* |
| Domain restrictions | Embed only works on your specified domains |
| Template controls | Show/hide templates, allow delete/rename, enable carousels |
| Download permissions | Turn user downloads on or off: PNG, PDF, HTML, plus MP4 on video pages* |
| Per-user permissions | Lock actions per user from the dashboard*, or per session in your JWT (any embed plan) |
| Multi-language | 6 languages, optional user switching |
| Webhooks | Server-side notifications for template events* |
| Browser events | Real-time postMessage events for frontend integration* |
| Template pre-loading | Open embed with a specific template via URL param |
* Available on specific plans. See pricing for what each plan includes.
Common questions
How much does the Polotno SDK cost?
What's the difference between Polotno Studio and the Polotno SDK?
Is there an open-source alternative to Polotno?
Can I import my Polotno designs into Orshot?
Can I white-label the editor and keep each user's designs separate?
Do I need React to use Orshot Embed?
Start Building
If you've been evaluating Polotno SDK and want something ready to use, start here, or follow the Polotno migration guide. The Free plan covers the API, and the embed starts at $39/month.
You can always dig into SDK-level solutions later if you need that control, but most teams don't. Comparing other editor SDKs? See the img.ly alternative too.









