For shops, platforms & developers

Color separation, as an API

POST a piece of artwork and get back press-ready spot inks, a film-positive for every ink, and a composite preview — in one request. Meter it by credit: pay-as-you-go or a monthly plan.

Quickstart

Send a base64 image and your key. One separation = one credit.

POST /api/separate
curl -X POST https://www.aiseparations.com/api/separate \
  -H 'X-API-Key: sk_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"image":"data:image/png;base64,iVBOR...","colors":6,"garment":"dark"}'
200 OK — response
{
  "count": 6,
  "colors": ["#100c09", "#542a1d", "#963c26", "#c88756", "#fbfafa"],
  "composite": "data:image/png;base64,...",   // print-simulation preview
  "plates": [{"ink":"#100c09", "image":"data:image/png;base64,..."}, /* one film-positive per ink */ ],
  "recommend": "screen",          // "screen" or "dtf"
  "photographic": false,        // measured from the art, not the ink count
  "remaining": 199,

  // every setting the request resolved to, echoed back
  "mode": "sim", "lpi": 55, "dpi": 300, "angle_set": "Spot 15° offset (default)",
  "choke": 1, "trap": 0, "ub_min_cov": 8.0, "regmarks": false,
  "saturation": 0.85, "winner_boost": 0.2, "suppress_below": 0.08,
  "ink_budget": 1.4, "gcr": 0.0, "ucr": 0.0,
  "highlight": false, "hw_halftone": false
}

Endpoints

POST /api/separate  —  separate an image (consumes 1 credit)

GET  /api/credits  —  check your balance (free), header X-API-Key

Parameters

All fields go in the JSON body; only image is required. Every knob below is optional and defaults to the values the browser app uses, so {"image": "..."} alone gives you a sensible separation. Values outside a listed range are clamped, not rejected. Images up to 12 MB.

Core

ParamTypeDefaultWhat it does
imagestring—Required. Base64 PNG/JPG/WEBP, raw or as a data: URL.
colorsint 2–12autoTarget ink count. Omit to let the engine pick the plates a printer would actually burn.
garment"dark" | "light" | color name | "#rrggbb""dark"The shirt the art prints on. "dark" = black, "light" = white; or a color name (Navy, Royal, Red, Maroon, Forest, Kelly Green, Gold, Orange, Purple, Heather Grey, Charcoal, Light Blue, Pink, Sand) or any hex. The separation is solved against that exact shirt color: inks that match the shirt are dropped (the shirt shows through), and the preview is drawn on it.
underbaseboolautoPrint a choked white underbase. Default: on for shirts darker than mid-grey ("dark", Navy, Red...), off for light ones ("light", Gold, Heather Grey...).
mode"sim" | "spot" | "index" | "cmyk" | "gray" | "dtf""sim"Simulated process halftones every ink (photos, gradients). Spot prints each plate solid — crisp edges for logos and flat vector art. Index prints one ink per square pixel with no halftone and no overlap. CMYK is 4-color process; gray is one screen (black ink on light shirts, white ink on dark); DTF preps a transparent print file plus a white layer.
index_ppiint 50–400150Index mode only (mode: "index" — one ink per square pixel, no halftone): index pixels per inch.

Halftone & film output

ParamTypeDefaultWhat it does
lpiint 25–8055Halftone line frequency — dot fineness.
meshint—Convenience: 110, 156, 200, 230, 280, 305 or 355 sets the lpi that mesh can hold (35/45/50/55/60/65/70). Ignored if you send lpi yourself.
angle_setstring"Spot 15° offset (default)"Screen angles, cycled across plates. Also accepts "CMYK process (15/75/0/45)" and "Wide 30° spacing". Wider spacing is extra moiré safety on coarse mesh.
dot_shape"round" | "elliptical" | "line" | "square" | "diamond""round"Halftone dot shape for every screened plate. Elliptical smooths midtones (skin, gradients); the non-round shapes hold exact coverage at every tone.
dpiint 150–1200300Output resolution of the film positives.
dot_gainfloat 0–4018Percent dot-gain compensation — pre-shrinks dots for ink spread on press.
min_dotfloat 0–300Percent. Smallest printable highlight dot; below it, coverage drops to zero instead of flashing an unholdable dot.
max_dotfloat 70–100100Percent. Caps shadow coverage so dark areas don't plug.
regmarksboolfalseStamp identical crosshair registration targets on every plate.
job_infoboolfalseSimulated process and spot: adds a strip under every film (which screen, its place in the print order, angle, LPI, suggested mesh, and an 11-step grayscale wedge at that plate's angle) and returns a job_sheet image. job_name (string) labels it. The response always includes print_order.

Tone & mixing (simulated process only)

ParamTypeDefaultWhat it does
saturationfloat 0.1–1.50.85Gamma on each ink channel. Lower pulls colors apart harder — richer, more saturated.
winner_boostfloat 0–10.2Extra coverage pushed onto each pixel's dominant ink, toward solid.
suppress_belowfloat 0–0.50.08Zero out any ink coverage under this — kills color speckle.
ink_budgetfloat 0.4–31.4Max total ink coverage on a single pixel, summed over all plates (1.4 = 140%). Keep it above 1 or no plate can print solid.
gcrfloat 0–10Gray Component Replacement — carries the neutral built by overlapping colors on the black plate instead. Saves ink, cleaner neutrals.
These five shape continuous tone, so mode: "spot" ignores them — solid plates have no tone to redistribute. gcr additionally needs a near-neutral black ink in the palette to carry the gray, plus at least two other chromatic inks to pull it from; if the darkest ink is saturated (a navy or maroon) it no-ops rather than muddying the art — the same rule the desktop app applies.

Underbase & trapping

ParamTypeDefaultWhat it does
chokeint 0–41Pixels the white underbase is pulled inward, so it tucks under the colors and can't peek out.
ub_min_covfloat 0–608Minimum ink coverage (0–255) before the underbase fires under a pixel.
ucrfloat 0–10Under-Color Removal — thins the white underbase beneath heavy black. Softer hand, less buildup. Needs a near-neutral black ink in the palette; works in both modes.
trapint 0–30Auto-trap strength in pixels. Dark inks spread, light inks choke, so a registration miss doesn't leave a hairline of bare shirt.

choke, ub_min_cov and ucr only do anything with garment: "dark" — a light garment gets no underbase to shape.

Highlight white (top pass · dark garments only)

ParamTypeDefaultWhat it does
highlightboolfalseAdd a white plate printed on top of the colors to recover true whites.
hw_brightnessfloat 0.5–10.85How bright a pixel must be to receive top white. Higher = only the very brightest spots.
hw_max_satfloat 0–10.18Saturation ceiling. Vivid brights (a strong yellow) are excluded — their own plate handles them.
hw_chokeint 0–62Choked harder than the underbase — it's the last screen down, so registration error has compounded.
hw_halftoneboolfalseFade highlights with dots on the next free screen angle instead of one hard solid white.

The response echoes back every setting it resolved (lpi, angle_set, gcr, ub_min_cov, …) so you can log exactly what produced a given set of plates.

Pricing

One separation = one credit. Mix both models — your monthly allowance is spent first, then pack credits never expire.

Pay as you go

Sample

$29
10 separations · $2.90 ea
  • Credits never expire
  • Full API access
Get started
BEST VALUE

Shop

$99
50 separations · $1.98 ea
  • Credits never expire
  • Full API access
Get started

Monthly plans

PlanSeparations / monthPriceEffective
Lite150$29/mo$0.19 eaSubscribe
Pro750$99/mo$0.13 eaSubscribe
Scale3,000$299/mo$0.10 eaSubscribe
Need higher volume, an SLA, or on-prem? Talk to us.

Who it's for

Prefer a one-time app?

The AI Separations desktop app is $179 one-time and adds AI background removal, upscaling, the Separation Advisor, instant quoting, and ink matching — built for individual shops. Or try it live in your browser first.