Kehittäjille — API · MCP · CLI

Luo WIA Code yhdellä rivillä. Avainta ei tarvita ilmaisrajojen sisällä.

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.

Tehostin-QR sisältyy aina mukaan. Sitä ei voi kytkeä pois — sama pätee API:iin, MCP:hen ja CLI:hen. "Kun kumulatiivinen käyttö saavuttaa 100 miljoonaa kertaa, tehostin irtoaa ja sen paikalle tulee oma logosi" on tuotelupaus, joten emme tehneet poikkeusta millekään yksittäiselle polulle. Koodausparametrit (grid, bpc, bridge) on kiinnitetty myös palvelimella.

CLI — yksi rivi, ei asennusta

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

Toimii heti Node 18:lla tai uudemmalla, ilman asennusta. Sillä ei ole riippuvuuksia, joten sen hakeminen kestää vain muutaman sekunnin.

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

Tyypit — Wi-Fi, käyntikortti, tapahtuma

Kolme valmista tyyppiä. Sinun ei tarvitse koota merkkijonoja itse — anna kentät, ja palvelin muodostaa standardin mukaisen Wi-Fi-, vCard- tai iCalendar-sisällön, tavu tavulta identtisen sen kanssa, jonka tämän sivuston generaattori tuottaa.

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

Kentät

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

Kellonajat ovat muodossa "2026-09-01 19:00". Avoimelle Wi-Fi-verkolle anna security=nopass ja jätä salasana pois. Puuttuvat tai virheelliset kentät palautuvat HTTP 400 -virheenä, joka nimeää kyseisen kentän — kuvaa ei tällöin muodosteta, joten virheellinen pyyntö ei koskaan vie renderöintipaikkaa.

Monta kerralla

Yksi rivi per koodi. Jos nopeusrajoitus osuu kohdalle, se odottaa ja jatkaa sen sijaan että pysähtyisi kesken kaiken, ja ilmoittaa epäonnistuneet rivit niiden todellisilla rivinumeroilla.

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

Vastaus on image/png. Lisää ?format=json saadaksesi base64:n ja metatiedot JSON-muodossa.

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

Kutsuminen selaimesta

Sitä voi kutsua suoraan mistä tahansa alkuperästä tulevasta verkkosovelluksesta. Se on julkinen API, joka ei käytä evästeitä, joten CORS on avoinna.

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

Parametrit

nimipakollinenkuvaus
textKoodattava teksti tai URL. Pitkät URL:t kannattaa lyhentää ensin.
typewifi · card · event. Annetaan text:n sijaan — palvelin kokoaa standardin merkkijonon kentistä. Katso yllä oleva Tyypit-osio.
shapeSiluetti (oletus heart). Katso alla oleva taulukko.
cellPxPikseliä solua kohden (3–20, oletus 8). Suurempi arvo tarkoittaa isompaa kuvaa.
labelMetatiedoissa säilytettävä tunniste. Sitä ei piirretä kuvaan.

Siluetit ja kapasiteetti

Kukin siluetti mahduttaa eri määrän (UTF-8-tavuja). Käytä pitkälle sisällölle muotoa square; lyhyille linkeille mikä tahansa muoto käy.

shapebytesshapebytes
square1450rose586
round1093clover521
hex861star386
heart854boomerang386

MCP — anna tekoälyn tehdä se

Yhdistä se tekoälyasiakkaaseen, kuten Claudeen, niin se luo koodeja suoraan keskustelussa. Päätepiste on https://mcp.wiacode.com/mcp, eikä avainta tarvita.

Claude Desktopin asetukset

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

Jos asiakasohjelmasi tukee Streamable HTTP:tä suoraan, anna sille vain URL.

Työkalut

työkalutoiminto
get_wia_code_infoSelittää, mikä WIA Code on, miten se eroaa QR-koodista ja mikä on kunkin siluetin kapasiteetti. Tämän kutsuminen ensin vähentää virheitä.
generate_wia_codeMuuttaa tekstin koodikuvaksi. Jos se ylittää kapasiteetin, se kertoo, mitkä siluetit sopisivat.
generate_wia_code_wifiWi-Fi-tunnukset — skannaus liittää laitteen verkkoon ilman salasanan kirjoittamista.
generate_wia_code_cardYhteystieto standardin vCard-muodossa — skannaus tarjoutuu tallentamaan sen puhelimen yhteystietoihin.
generate_wia_code_eventTapahtuma standardin iCalendar-muodossa — skannaus lisää sen kalenteriin.

Ilmaisrajat

Jos tarvitset enemmän — joukkotuotantoa, kumppanuuksia tai kaupallista käyttöä varten lähetä meille sähköpostia. Annamme sinulle avaimen, joka nostaa rajaa. 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.

Lisää

Avaa generaattori →

WIA Code on SmileStory Co., Ltd.:n tuote. Tehostin-QR on opastin, joka auttaa myös niitä, joilla ei ole omaa skanneria, lukemaan sen.