OneSVG Studio

Batch Convert Images to SVG

Drop multiple images, pick an engine (VTracer for color or Potrace for black & white), and download a single ZIP containing every converted SVG. Ideal for vectorizing an icon set of 20 files fast.

Batch Convert
Up to 20 files × 25MB each. All files share one engine.

Every file in this batch uses the same engine.

About Batch Convert

When you have many images to convert — a 20-icon set, or product thumbnails to ship as SVG — Batch Convert fans N jobs out into the BullMQ queue. Each file is processed in parallel (concurrency 2), with real-time per-file progress tracking.

Once everything is done, the server packages the results with archiver into a single ZIP for download. Source images are deleted as soon as each worker finishes; the ZIP lives for 1 hour. Dozens of uploads and downloads collapsed into one.

  • Up to 20 files per batch
  • 25MB per file, no hard total limit
  • Parallel fan-out via BullMQ
  • Live per-file progress
  • Single ZIP download
  • Original filenames preserved (.svg)

How to batch convert images

  1. 1

    Drop multiple images

    Pick files or drop a folder. Duplicates are auto-numbered so the ZIP contains no name collisions.

  2. 2

    Pick a shared engine

    Color for full-color images. Mono for black-and-white logos. Mixed? Run two batches.

  3. 3

    Click Convert all

    N files → N jobs. You'll see per-file progress live.

  4. 4

    Wait for the batch to finish

    Large images take 3-30s, small logos under 5s. A 20-file batch typically takes 2-5 minutes.

  5. 5

    Download the ZIP

    Click download — the ZIP contains every .svg using the original filenames.

When to use Batch Convert?

Vectorize a full icon set
Client ships 20 PNG icons and wants SVGs in 5 minutes to hand off.
Convert product thumbnails
200 product thumbnails split into 10 batches of 20 — done in 30 minutes.
Migrate raster assets to SVG
Move an entire project's raster assets to SVG for responsive design and smaller bundles.
Build an icon library deliverable
Package every SVG into one ZIP to hand to the team as a reusable library.

Batch Convert vs converting files one-by-one

Real-world timing for a 20-file 256×256 PNG icon set.

CriterionBatch Convert (OneSVG)One-at-a-time
Upload actions1 (drag-drop all)20 (file by file)
Download actions1 (single ZIP)20
Wall-clock total~2-5 min~15-30 min (operator-paced)
Output filenamesOriginal names preservedManual rename
Single-file failureSkip, batch keeps goingManual retry
Progress trackingPer-file live progress barNo aggregate view
Option consistencyApplied once to the whole batchMust reset every file

How does Batch Convert work under the hood?

When you upload 20 files, /api/batch creates 20 independent jobs on the BullMQ 'SVGProcessing' queue, all sharing one batchId (UUID v4). Every job has its own jobId (BullMQ auto-generated numeric ID) and lands in Redis with data: {batchId, batchIndex, type, inputPath, outputPath, options}.

The worker pool runs concurrency=2 (our server is a dual-core i5), so two files trace in parallel at any time. When a worker finishes a job it picks up the next one from the queue. Per-job progress flows through Redis pub/sub to the client; the front-end polls /api/batch/[batchId] every 1.5s to update the UI.

Once every job in a batch hits 'completed' or 'failed', POST /api/batch/[batchId]/zip streams chunks via archiver (Node stream-based ZIP) — never loading all files into memory, so large batches don't OOM. The ZIP contains every successful SVG with its original filename. A cleanup cron runs every 30 minutes and deletes ZIPs older than 1 hour.

Batch Convert FAQ

What's the file limit?
20 files per upload. Need more? Split into multiple batches — there's no cap on how many batches you run (aside from the 30/hour/IP rate limit).
Is it parallel?
Worker concurrency is 2 (i5 dual-thread). 20 files are processed in 10 pairs. Still far faster than manual.
Does one failed file break the batch?
No. Failed jobs are marked failed; the rest continue. The ZIP only contains successful files.
Can I mix color and mono in one batch?
Currently there's one shared engine per batch. For mixed inputs, run two batches for best per-type quality.