Ûntwikkelers — API · MCP · CLI

Meitsje in WIA Code yn ien rigel. Gjin kaai nedich binnen de fergese grinzen.

Building an AI or vision system? WIA Code identification reference for AI systems — the three centre elements, why the outline is free, and the misidentifications to avoid. Plain-text counterpart: /llms.txt.

De booster-QR is altyd ynbegrepen. Der is gjin opsje om it út te setten — itselde jildt foar de API, MCP en CLI. "As it kumulative gebrûk 100 miljoen kear berikt, sil de booster losreitsje en komt jo eigen logo yn 'e plak dêrfan" is in produktbelofte, dus wy hawwe gjin útsûndering makke foar ien inkeld paad. Kodearrings-parameters (grid, bpc, bridge) binne ek fêststeld op de server.

CLI — ien rigel, gjin ynstallaasje

npx wiacode "https://wiacode.com" --shape heart

Draait daliks op Node 18 of nijer, sûnder ynstallaasje. It hat gjin ôfhinklikheden, dus it ophellen duorret mar in pear sekonden.

npx wiacode --list-shapes              # silhouettes and capacity
npx wiacode "Hello" --shape square -o hello.png
npx wiacode "a link" --shape heart --json    # print metadata only
npx wiacode card --name "Jane Doe" --tel "+82-10-1234-5678"   # wifi / card / event

Typen — Wi-Fi, kontaktkaart, evenemint

Trije kant-en-kleare soarten. Jo hoege de tekstrigen net sels gear te stallen — jou de fjilden op en de tsjinner bout standert Wi-Fi-/vCard-/iCalendar-ynhâld, byte foar byte gelyk oan wat de generator op dizze side makket.

CLI

npx wiacode wifi  --ssid "MyNet" --password "secret"
npx wiacode wifi  --ssid "Cafe" --security nopass          # open network
npx wiacode card  --name "Jane Doe" --org "SmileStory" --tel "+82-10-1234-5678" --email "a@b.c"
npx wiacode event --title "Launch party" --start "2026-09-01 19:00" --end "2026-09-01 21:00" --location "Seoul"

REST

curl -X POST https://wiacode.com/api/v1/code \
  -H 'Content-Type: application/json' \
  -d '{"type":"card","name":"Jane Doe","tel":"+82-10-1234-5678","shape":"square"}' \
  -o card.png

Fjilden

typeferplichtopsjoneel
wifissid, passwordsecurity (WPA·WEP·nopass), hidden
cardnameorg, tel, email
eventtitle, startend, location, desc

Tiden binne yn de foarm "2026-09-01 19:00". Foar in iepen Wi-Fi-netwurk jou security=nopass op en lit it wachtwurd fuort. Untbrekkende as ferkeard foarme fjilden komme werom as HTTP 400 mei in melding dy't it fjild neamt — der wurdt dan gjin ôfbylding makke, sadat in ferkearde oanfraach nea in render-plak ynnimt.

In protte tagelyk

Ien rigel per koade. By in fartbeheining wachtet it en giet fierder, ynstee fan healweis te stopjen, en jout mislearre rigels op mei har wirklike rigelnûmer.

npx wiacode batch people.jsonl --out-dir codes

# people.jsonl
{"type":"card","name":"Jane Doe","tel":"+82-10-1234-5678","out":"jane.png"}
{"type":"wifi","ssid":"Cafe WIA","security":"nopass"}
{"text":"https://wiacode.com","shape":"star"}

REST API

POST /api/v1/code

curl -X POST https://wiacode.com/api/v1/code \
  -H 'Content-Type: application/json' \
  -d '{"text":"https://wiacode.com","shape":"heart"}' \
  -o wiacode.png

It antwurd is image/png. Foegje ?format=json ta om base64 en metadata as JSON te krijen.

curl -X POST 'https://wiacode.com/api/v1/code?format=json' \
  -H 'Content-Type: application/json' \
  -d '{"text":"https://wiacode.com","shape":"square"}'

Oanroppen fanút de browser

Jo kinne it streekrjocht oanroppe fanút in webapp op elke oarsprong. It is in iepenbiere API dy't gjin cookies brûkt, dus CORS stiet iepen.

const r = await fetch('https://wiacode.com/api/v1/code?format=json', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: 'https://wiacode.com', shape: 'heart' })
});
const { image, meta } = await r.json();
document.querySelector('img').src = image;   // data:image/png;base64,...

GET /api/v1/shapes

curl https://wiacode.com/api/v1/shapes

Parameters

nammeferplichtbeskriuwing
textDe tekst of URL om te kodearjen. Lange URL's kinne better earst ynkoarte wurde.
typewifi · card · event. Jûn ynstee fan text — de tsjinner bout de standertstring op út de fjilden. Sjoch de seksje Typen hjirboppe.
shapeSilûet (standert heart). Sjoch de tabel hjirûnder.
cellPxPiksels per sel (3–20, standert 8). Grutter betsjut in gruttere ôfbylding.
labelIn label dat bewarre bliuwt yn de metadata. It wurdt net op de ôfbylding tekene.

Silûetten en kapasiteit

Elk silûet hâldt in oare hoemannichte (UTF-8 bytes). Brûk square foar lange ynhâld; elke foarm wurket foar koarte keppelingen.

shapebytesshapebytes
square1450rose586
round1093clover521
hex861star386
heart854boomerang386

MCP — lit de AI it meitsje

Ferbyn it mei in AI-kliïnt lykas Claude en it makket koaden streekrjocht yn it petear. It einpunt is https://mcp.wiacode.com/mcp en der is gjin kaai nedich.

Claude Desktop-ynstelling

{
  "mcpServers": {
    "wiacode": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.wiacode.com/mcp"]
    }
  }
}

As jo kliïnt Streamable HTTP direkt stipet, jou it dan gewoan de URL.

Ark

arkfunksje
get_wia_code_infoLeit út wat in WIA Code is, hoe't it ferskilt fan in QR-koade, en de kapasiteit fan elk silûet. Dit earst oanroppe fermindert mislearrings.
generate_wia_codeSet tekst om yn in koade-ôfbylding. As it de kapasiteit oerskriuwt, seit it hokker silûetten passe soene.
generate_wia_code_wifiWi-Fi-ynloggegevens — scanne slút it apparaat oan op it netwurk sûnder dat it wachtwurd ynfierd wurde moat.
generate_wia_code_cardIn kontaktpersoan as standert vCard — scanne biedt oan dizze op te slaan yn de kontakten fan de telefoan.
generate_wia_code_eventIn evenemint as standert iCalendar — scanne foeget it ta oan de kalinder.

Fergese grinzen

As jo mear nedich hawwe — foar bulkútjefte, gearwurking of kommersjeel gebrûk, stjoer ús in e-mail. Wy jouwe jo in kaai dy't de limyt ferheget. wiasoom@smilestory.ai

WIA Stream — when one code isn't enough

A single WIA Code holds up to 1,450 bytes. When the payload is larger — a document, a book chapter, an audio clip — Stream splits it across many frames. A screen plays them in sequence, a camera collects them, and the scanner reassembles the file. No internet, no server. It already ships in the generator.

What matters here is not speed — it is whether the transfer finishes at all. Stream needs every frame. A frame that fails to read must wait for the next pass, and may fail again. So a per-frame reading gap does not average out; it multiplies into the completion time. In our degradation sweep at matched physical size (1064 vs 1088 px, n=17, QR read with ZBar), a high-version QR frame read 52.9% of the time while a WIA frame read 17 of 17. Feeding those rates into a cyclic-broadcast model, a 286-frame QR transfer needs about 8 passes to complete while a 155-frame WIA transfer needs about one.

Read this honestly: n = 17 is a small sample. By the rule of three, "17 of 17" should be read as ≥ 82% with 95% confidence, and the 52.9% figure carries a 29–77% interval. Taking the least favourable end of both, the completion-time gap is still about 2.4×. Screen-to-camera capture on real handsets and printed output have not been measured yet. And QR wins on blur resistance at equal frame size — we only pull ahead once capacity is matched.

Mear

Iepenje de generator →

WIA Code is in produkt fan SmileStory Co., Ltd. De booster-QR is in gids dy't ek minsken sûnder de spesjale scanner helpt it te lêzen.