SVG Editor online

Code

Export

Width and height stay in proportion. JPG has no transparency, so it always gets a background.

My drawings

Click a drawing to open it. They are stored only in this browser - nothing is uploaded. Clearing the browser's site data removes them, so download the ones you want to keep.

AI Assistant

Any AI can draw with you - ChatGPT, Claude, Gemini, Copilot.

  1. Click Copy prompt.
  2. Paste it into your AI and say what it should draw.
The AI should

The drawing travels in the link after the “#”, which no server sees. What you paste into your AI is handled by its provider.

Save to your server

The editor can send each saved version to your own server (a webhook), so your drawings are kept where you want them. Nothing is sent until you enter an address here.

What your server receives

A POST request with JSON (your server must allow CORS from https://svg.giit.ch):

{ "editor": "svg", "event": "save", "id": "…", "name": "Logo",
  "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" …>…</svg>",
  "updated": "2026-01-15T09:30:00.000Z" }
Embed the editor in your website
<iframe src="https://svg.giit.ch/?embed=1" style="width:100%;height:80vh;border:0"></iframe>
<script>
const frame = document.querySelector('iframe');
addEventListener('message', e => {
  if (e.origin !== 'https://svg.giit.ch' || e.source !== frame.contentWindow) return;
  if (e.data.type === 'svgeditor:ready')
    frame.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Logo',
      content: '<svg …>…</svg>' }, 'https://svg.giit.ch');
  if (e.data.type === 'svgeditor:save') saveOnYourServer(e.data.content);
});
</script>

Also possible: ?src=<URL of an .svg file> opens a file, &webhook=<URL> saves this drawing there. The editor can also open in a window of its own (?embed=window), and your page can hand it its own AI prompt and a session key so the AI sends its result to your server (svgeditor:ai, svgeditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

Help

How it works

  1. Open an SVG file, drag it into the window or paste SVG code - or start with New.
  2. My drawings (the folder button at the top left) lists every drawing kept in this browser: open, rename, duplicate, download or delete them.
  3. Click a shape on the canvas. Drag it to move it, drag the small squares to resize it. Colors, size and position are under Properties on the right.
  4. Draw new shapes with the tools above the canvas.
  5. The code on the left always shows the current drawing and can be edited directly.
  6. Download SVG saves the file, Export offers pictures (PNG, JPG) and code for websites.

Made a mistake? Undo takes back every step. Your drawings are kept in this browser, even after closing the page.

Keyboard shortcuts

V
Select and move
R E L P T
Rectangle, ellipse, line, freehand, text
H / hold Space
Move the view
Mouse wheel, + -
Zoom
Drag with the mouse wheel pressed
Move the view
Double-click the mouse wheel
Fit to window
0 / 1
Fit to window / actual size
# / G
Grid on/off / snap on/off
Arrow keys
Move the selection by 1, with Shift by 10
Shift while dragging
Only horizontal/vertical, keep proportions
Alt + click
Select the surrounding group
Delete
Remove the selection
Ctrl + D
Duplicate
Ctrl + ↑ / ↓
Forward / backward (with Shift: to front / to back)
Ctrl + Z / Y
Undo / redo
Ctrl + S / E
Download SVG (or save to your server) / export
Ctrl + O
My drawings
Esc
Deselect

In the code: Tab indents, Shift+Tab outdents, clicking into a tag selects that shape on the canvas.

Просматривайте, редактируйте и экспортируйте SVG онлайн

Редактор SVG показывает ваш рисунок и его код рядом. Всё, что вы меняете в коде, сразу появляется в предпросмотре, - а всё, что вы перемещаете, масштабируете или перекрашиваете на холсте, отражается в коде. Так можно быстро поправить иконки, логотипы, диаграммы и иллюстрации, не открывая большой графический редактор.

Всё работает в вашем браузере. Файлы никуда не загружаются, нет регистрации и нет рекламы.

Что умеет редактор

Код с подсветкой

Теги, атрибуты и значения своими цветами, номера строк, отступы клавишей Tab, автоматическое закрытие тегов и понятное сообщение об ошибке с номером строки.

Правка фигур напрямую

Щелчок, перетаскивание, изменение размера за маркеры, поворот, отражение, дублирование, перемещение вперёд или назад - прямоугольники, круги, контуры, многоугольники, текст и группы.

Цвета и контуры

Заливка и контур через палитру или значением, непрозрачность, толщина контура, пунктирные линии, круглые или квадратные концы линий.

Сетка с привязкой

Любой шаг сетки в собственных координатах рисунка. Фигуры точно привязываются к линиям - или снимите флажок «Привязка», чтобы двигать их свободно.

Инструменты рисования

Прямоугольник, эллипс, круг, линия, рисование от руки и текст - с выбранными вами цветами для новых фигур.

Экспорт

SVG (как написан, приведённый в порядок или сжатый), PNG с прозрачным фоном, JPG, WebP, data URI, Base64, CSS и компонент React.

Как это работает

  1. Откройте SVG - выберите файл, перетащите его в окно или вставьте код.
  2. Редактируйте - пишите в коде или щёлкайте по фигурам на холсте, перетаскивайте их и задавайте цвета справа.
  3. Экспортируйте - выберите формат, задайте размер для изображений, затем скачайте или скопируйте.

Редактор на вашем сайте

Любая страница на https (и localhost) может встроить редактор через <iframe> и ?embed=1 - без регистрации и без ключа. Во встроенном виде редактор скрывает этот текст и показывает кнопку «Сохранить». Есть два способа передать рисунок в редактор и получить его обратно.

1. Открыть файл по ссылке, сохранять на ваш сервер

src= открывает файл (ваш сервер должен разрешать CORS), webhook= заставляет «Сохранить» (Ctrl+S) отправлять рисунок на этот адрес. Добавьте &token=… для заголовка Authorization: Bearer … и &auto, чтобы сохранять после каждого изменения.

<iframe src="https://svg.giit.ch/?embed=1&src=https://your-site.com/docs/logo.svg&webhook=https://your-site.com/save.php"
        allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>

Вебхук получает POST с JSON { editor, event: "save", id, name, content, updated }. Небольшой PHP-скрипт, который его сохраняет:

<?php
header('Access-Control-Allow-Origin: https://svg.giit.ch');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
$d = json_decode(file_get_contents('php://input'), true);
$name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
file_put_contents(__DIR__ . "/docs/$name.svg", $d['content']);
echo '{"ok":true}';

2. Рисунок хранит ваша страница (postMessage)

Редактор сообщает svgeditor:ready, ваша страница отвечает svgeditor:load, редактор сообщает svgeditor:loaded, svgeditor:change при настоящих правках и svgeditor:save, когда пользователь сохраняет. Ваша страница может отправить svgeditor:get (текущее состояние) или svgeditor:save (нажать «Сохранить»). Сохранение тогда идёт через ваш собственный вход и сеанс.

<iframe id="ed" src="https://svg.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://svg.giit.ch';

addEventListener('message', async e => {
  if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
  const m = e.data;
  if (m.type === 'svgeditor:ready') {             // редактор готов: передаём ему рисунок
    ed.contentWindow.postMessage({
      type: 'svgeditor:load',
      name: 'Logo',
      content: await (await fetch('/docs/logo.svg')).text(),
    }, ORIGIN);
  }
  if (m.type === 'svgeditor:change') document.title = '● not saved';   // настоящая правка
  if (m.type === 'svgeditor:save') {              // пользователь нажал «Сохранить»
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Кнопка сохранения на вашей странице: ответ приходит как svgeditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'svgeditor:get' }, ORIGIN); }
</script>

ИИ-ассистент внутри вашей страницы: он работает и во фрейме. С allow="clipboard-write" на iframe кнопка «Копировать промпт» напрямую использует буфер обмена (иначе редактор переходит на старую команду копирования или показывает промпт для ручного копирования). Ссылка, которую присылает ИИ, не может попасть в редактор внутри другого сайта, поэтому редактор просит ИИ и пользователя вставить весь ответ ИИ в редактор - или открыть редактор в отдельном окне.

3. В отдельном окне

window.open("https://svg.giit.ch/?embed=window", "svgeditor-17") открывает полный редактор в отдельном окне и обменивается теми же сообщениями с window.opener. Ссылки от ИИ попадают туда. svgeditor:load может также содержать context: { host, title, rules } - тогда промпт для ИИ говорит, к чему относится рисунок, и следует вашим правилам, - и hook: { url, token }, вебхук только для этого рисунка, который никогда не сохраняется. При закрытии окна с несохранёнными изменениями отправляется svgeditor:closing.

4. ИИ через ваш собственный сервер

Передайте редактору свой промпт, адрес на вашем сайте и ключ для этого сеанса редактора. Тогда диалог ИИ показывает «Подключено к» вашему сайту, что вы сообщаете ИИ, и выбор изменить текущий рисунок или создать новый; Копировать промпт собирает всё вместе. ИИ отправляет свой результат с ключом на ваш сервер, а ваша страница открывает его в редакторе - новый рисунок открывается отдельно и остаётся в браузере пользователя. Один ключ на сеанс редактора: он действует, пока редактор открыт, и только пока ключа нет, редактор запрашивает его через svgeditor:key-request. Редактор никогда сам не отправляет ключ и никогда не сохраняет его; адрес должен быть https на вашем собственном хосте или его поддомене.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // один ключ на сеанс редактора
const k = await key();
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content, ai: {
  label: 'My Site', prompt: 'Keep the [[placeholders]]. Write in German.',
  endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// запомните id из svgeditor:loaded и игнорируйте change/save/closing с другим id
// только пока у редактора нет ключа:
if (m.type === 'svgeditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'svgeditor:ai', key: k.key }, ORIGIN); }
// пока редактор открыт, сообщайте серверу каждую минуту; закрытие редактора или страницы аннулирует ключ
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// у вашего сервера есть результат (polling, SSE …): target - "current" или "new"
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content: draft, from: 'ai', target }, ORIGIN);
<?php // api/ai-key.php - ключ этого сеанса редактора для вошедшего пользователя (его вызывает ваша страница)
session_start();                                     // проверьте, что пользователь может редактировать этот рисунок
$key = bin2hex(random_bytes(24));
$_SESSION['ai'][hash('sha256', $key)] = ['doc' => (int)$_GET['doc'], 'seen' => time()];  // или в вашей базе данных; ?alive= снова обновляет seen
echo json_encode(['key' => $key]);

<?php // api/ai-result.php - сюда отправляет ИИ (без заголовков CORS: ИИ вызывает его с сервера)
$key = preg_replace('/^Bearer\s+/', '', $_SERVER['HTTP_AUTHORIZATION'] ?? '');
$row = find_key(hash('sha256', $key));               // ваша база данных: не аннулирован, seen за последние 3 минуты
if (!$row) { http_response_code(401); exit('{"ok":false,"error":"key not valid"}'); }
$d = json_decode(file_get_contents('php://input', false, null, 0, 2000000), true);
save_draft($row['doc'], $d['content'], $d['target'] === 'new' ? 'new' : 'current');   // ваша страница показывает его через svgeditor:load
echo '{"ok":true}';

Создавайте ключи минимум из 128 случайных бит, храните только их хеш, привязывайте каждый к вошедшему пользователю, рисунку и этому сеансу редактора, создавайте один ключ на сеанс, считайте его действительным, только пока ваша страница сообщает, что сеанс открыт, и аннулируйте его, когда редактор или страница закрываются.

Весь протокол описан в llms.txt - дайте его ИИ, и он построит подключение для вашей системы. Редактор LaTeX работает так же с префиксом latexeditor: - latex.giit.ch.

Частые вопросы

Мой файл SVG куда-то загружается?

Нет. Редактор полностью работает в вашем браузере. Открытые файлы и ваш код никогда не отправляются на сервер; черновик хранится только в локальном хранилище вашего браузера.

Где сохраняются мои рисунки?

Только в вашем браузере. Редактор хранит там любое количество рисунков - нажмите кнопку с папкой вверху слева («Мои рисунки»), чтобы открывать, переименовывать, дублировать, скачивать или удалять их. Ничего не загружается на сервер; очистка данных сайта в браузере удалит их, поэтому скачайте те, которые хотите сохранить.

Как конвертировать SVG в PNG?

Откройте или вставьте свой SVG, нажмите «Экспорт», выберите PNG, задайте размер (1×, 2×, 4× или свой) и нажмите «Скачать». Фон остаётся прозрачным, если вы не выберете цвет.

Можно ли редактировать фигуры мышью?

Да. Щёлкните по фигуре, чтобы выделить её. Её можно перетаскивать, менять размер за маленькие квадраты, поворачивать, отражать и перекрашивать. Код слева меняется вместе с ней.

Для чего нужна сетка?

Сетка показывает направляющие линии в собственных координатах рисунка. Когда она включена, фигуры, которые вы перемещаете или рисуете, точно привязываются к линиям сетки. Снимите флажок «Привязка», чтобы сетка оставалась видимой, а фигуры двигались свободно.

Можно ли использовать SVG как компонент React?

Да. Выберите в экспорте «Компонент React (JSX)». Атрибуты вроде stroke-width превращаются в strokeWidth, class - в className, а компонент принимает дополнительные props.

Может ли ИИ рисовать в редакторе SVG?

Да, любой ИИ - ChatGPT, Claude, Gemini, Copilot или ИИ в вашем инструменте для программирования. Нажмите «ИИ-ассистент», затем «Копировать промпт», вставьте его в свой ИИ и скажите, что нужно нарисовать. ИИ ответит ссылкой; щёлкните по ней, и рисунок появится в вашем редакторе. ИИ может изменить открытый рисунок или создать новые рядом с остальными. Ничего не нужно устанавливать, а «Отменить» возвращает любое изменение.

Можно ли использовать редактор на моём сайте?

Да. Встройте его через iframe и обменивайтесь рисунками через postMessage или пусть он отправляет каждую сохранённую версию на ваш сервер через вебхук. Примеры - в разделе Редактор на вашем сайте.

Сколько стоит редактор SVG?

Нисколько. Редактор бесплатный, без рекламы и без регистрации.