jetskibayConnect
← All resources

CLI / TOOLS

The Inspired CLI.

A dependency-free Node script that shops a photograph from the terminal: start a read, poll it, and write the cutouts and the mood board to disk.

Mock studioPublic information
The Inspired CLI
OverviewUsageExamples & promptsFormats & downloads

inspired — the command-line client

One file, no dependencies, Node 20 or newer. Shop a photograph from a terminal:

export INSPIRED_KEY=isk_your_key
./inspired.mjs shop living-room.jpg --domain furniture --out ./cutouts

It starts a durable read, polls it at the interval the server asks for, prints which object is being worked on as it goes, and writes every cutout, the mood board and the raw JSON into a directory.

Why not curl

A read is asynchronous and takes minutes, so a useful client has to do four things that are tedious to retype: start a job, poll it on the server's own pollAfterMs rather than a guessed interval, show progress per object, and decode the base64 data: URLs the result carries into actual image files.

Commands

| Command | Does | Costs | | --- | --- | --- | | shop <image\|pin-url> | Start a read and wait for it | one request | | start <image\|pin-url> | Start a read, print the id, exit | one request | | get <request-id> | Look at a read you started earlier | free | | domains | List the focus domains — no key needed | free | | key new <email> | Mint a trial key, mailed to that address | free | | key status / key revoke | Allowance and expiry, or revoke | free |

Options: --domain, --focus, --out, --json, --quiet, --timeout, --key, --base.

What it refuses to do

  • Retry a spent allowance. A quota_exhausted response is printed and the process exits non-zero. Minting another key would not help — re-minting carries the old balance over.
  • Fetch an arbitrary image URL. The API takes bytes or a public Pinterest pin URL. Passing any other https:// image link is an error telling you to download it first, because there is no parameter that would make the platform an open image proxy.
  • Send an oversized file. Over 10 MB is refused locally, before the upload, with the file's actual size in the message.
  • Poll forever. After --timeout minutes (20 by default) it stops and tells you the request id, which stays valid: inspired get <id> collects it later.

Requirements

Node 20 or newer — it uses the built-in fetch, FormData, File and Buffer. No npm install, no lockfile, nothing to audit. It talks only to inspired.jetskibay.com unless you point --base somewhere else.

Limits

It is a client, not a library: the output is text and files, and --json gives you the API's payload verbatim if you want to pipe it. It does not cache, batch, or run reads in parallel — one photograph per invocation, because one read is one charged request and making that easy to do by accident would be a bug.

Make it yours.

Choose the format that fits your workflow.

inspired.mjs

text/javascript · v1.0.0 · en · 17 KB

Get file

node >=20 · macos / linux / windows

node inspired.mjs shop photo.jpg --domain furniture --out ./cutouts
File details & reuse

License: All rights reserved
Redistribution: prohibited

SHA-256 63d7a40620a85dbbada7c7e0253017601981071f15429de6a7b489b1d5103863

Ships with.

Make it your own.

EXAMPLES & PROMPTS
A real session
==============

$ node --version
v24.19.0

$ ./inspired.mjs domains
fashion (default)
  Clothing & accessories — Garments, shoes, bags, and jewellery worn by a person.
  aliases: clothing, clothes, style, outfit, apparel
  An outfit photo returns each layer as its own shoppable piece.
furniture
  Furniture & interiors — Sofas, chairs, tables, lighting, rugs, shelving, and decor.
  A living room photo returns the sofa, the lamp, and the rug.
devices
  Devices & electronics — Phones, laptops, audio, cameras, peripherals, and appliances.
  A desk photo returns the laptop, the keyboard, and the monitor.
beauty
  Beauty & personal care — Skincare, makeup, fragrance, haircare, and tools.
  A shelfie returns each bottle and jar as its own shoppable product.
everything
  Anything — No category filter. Every distinctly purchasable object in the frame.
  Use with `focus` to aim the same pipeline at a category we have not named.

  (Free, and no key needed — this is the live catalogue, verbatim.)


Refusals, before anything is charged
------------------------------------

$ ./inspired.mjs shop notes.txt
notes.txt: send a .jpg, .png, .webp or .gif file (or a Pinterest pin URL).
$ echo $?
1

$ ./inspired.mjs shop https://example.com/photo.jpg
Inspired takes image bytes or a public Pinterest pin URL, not an arbitrary
image URL. Download the image first.
$ echo $?
1

$ ./inspired.mjs shop huge.jpg
huge.jpg is 14.2 MB. The limit is 10 MB — resize it first.
$ echo $?
1

$ unset INSPIRED_KEY; ./inspired.mjs shop outfit.jpg
No API key. Set INSPIRED_KEY or pass --key.
Get one with: inspired key new you@example.com
$ echo $?
1

$ ./inspired.mjs shop outfit.jpg --nope
Unknown option --nope. Try 'inspired help'.
$ echo $?
1


A whole read
------------

$ ./inspired.mjs key new me@example.com
Mailed a key to me@example.com.
  prefix    isk_7f3a
  requests  10
The key itself is only in that email — it is stored here as a hash and
nowhere else.

$ export INSPIRED_KEY=isk_7f3a…      # pasted from the email

$ ./inspired.mjs shop living-room.jpg --domain furniture --out ./cutouts
started 3f0c8a5e-1d4b-4a9e-9a1c-2b8f5d7e6c40 · 9 request(s) left
waiting — a full read takes a few minutes
  Reading the room
  Cutting out the floor lamp
  Searching for the floor lamp · 1 of 3
  Cutting out the sofa
  Searching for the sofa · 2 of 3
  Cutting out the rug
  Building the mood board
wrote 5 files to ./cutouts
Found 3 clearly visible furniture items.
3 object(s) · domain furniture

floor lamp
  Slim brass floor lamp with a white cone shade and a round weighted base
  €149     Brass arc floor lamp
           https://shop.example/brass-arc-lamp
  €189     Tall brass reading lamp
           https://shop.example/reading-lamp

sofa
  Three-seat sofa in sage green boucle, straight arms, tapered wooden legs
  €899     Boucle three-seater, sage
           https://shop.example/boucle-three-seater

rug
  Flatweave rug in oatmeal with a narrow charcoal border
  (nothing visually similar found)

Objects are spotted, not identified; results are visually similar, not the
same product.

$ ls ./cutouts
mood-board.webp  piece-1-floor-lamp.webp  piece-2-sofa.webp
piece-3-rug.webp  result.json


Starting and collecting separately
----------------------------------

$ ID=$(./inspired.mjs start desk.jpg --domain devices --quiet)
$ echo "$ID"
9b2e41c7-5a08-4c3d-8f61-7d4e2a9b0c31

$ ./inspired.mjs get "$ID"
running: Cutting out the headphones
  laptop — searching
  headphones — extracting
  keyboard — queued

  (get looks once and exits. Polling is free, so look as often as you like.)

$ ./inspired.mjs get "$ID" --out ./desk
wrote 5 files to ./desk
Found 3 clearly visible device items.
…


When the allowance runs out
---------------------------

$ ./inspired.mjs shop another.jpg
This key's 10 included requests are used up. (quota_exhausted)
$ echo $?
1

  Minting a new key for the same address will not help: it revokes the old one
  and carries the remaining allowance over. That is the point.


Note on this transcript
-----------------------

The `domains` output and every refusal above are verbatim from running this
client against the live platform. The finished read is shown with placeholder
retailers and ids — the field names, ordering, progress lines and file layout
are exactly what a real read produces.
Open raw example

Published by Inspired. Fictional brand, working prototype.