Geração e edição de imagem
A Norlen oferece dois endpoints de imagem: geração (texto → imagem) e edição (imagem + instrução → imagem). Ambos retornam a imagem em base64 e seguem o espírito da API de imagens da OpenAI.
Geração (texto → imagem)
Seção intitulada “Geração (texto → imagem)”Gera uma imagem a partir de um prompt de texto. Segue o formato de images/generations da OpenAI.
POST https://app.norlen.io/api/v1/images/generationsAuthorization: Bearer SUA_API_KEYContent-Type: application/jsonParâmetros
Seção intitulada “Parâmetros”| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | sim | qwen-image |
prompt | string | sim | Descrição da imagem desejada |
size | string | não | Dimensões, ex. 1024x1024 (padrão e recomendado) |
n | integer | não | Número de imagens (padrão 1) |
Exemplo
Seção intitulada “Exemplo”curl https://app.norlen.io/api/v1/images/generations \ -H "Authorization: Bearer $NORLEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen-image", "prompt": "Uma bússola de latão sobre um mapa náutico, luz de estúdio", "size": "1024x1024" }'import base64, requests
r = requests.post( "https://app.norlen.io/api/v1/images/generations", headers={"Authorization": "Bearer SEU_TOKEN"}, json={"model": "qwen-image", "prompt": "Uma bússola de latão sobre um mapa náutico", "size": "1024x1024"}, timeout=120,)data = r.json()["data"][0]["b64_json"]with open("imagem.png", "wb") as f: f.write(base64.b64decode(data))const r = await fetch("https://app.norlen.io/api/v1/images/generations", { method: "POST", headers: { Authorization: `Bearer ${process.env.NORLEN_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: "qwen-image", prompt: "Uma bússola de latão sobre um mapa náutico", size: "1024x1024" }),});const { data } = await r.json();const buffer = Buffer.from(data[0].b64_json, "base64");await require("fs/promises").writeFile("imagem.png", buffer);Resposta
Seção intitulada “Resposta”{ "created": 1750000000, "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." } ]}A imagem vem em data[0].b64_json (PNG em base64). Decodifique e salve, ou exiba com data:image/png;base64,<...>.
Edição (imagem + instrução → imagem)
Seção intitulada “Edição (imagem + instrução → imagem)”Edite uma imagem existente por instrução — descreva a mudança e a Norlen a aplica preservando o resto da cena (modelo Qwen-Image-Edit). Segue o espírito de images/edits da OpenAI.
POST https://app.norlen.io/api/v1/images/editsAuthorization: Bearer SUA_API_KEYAceita dois formatos de entrada:
multipart/form-data(como a SDK da OpenAI): campoimagecom o arquivo +promptcom a instrução.- JSON:
{ "image": "<base64 ou data URL>", "prompt": "..." }.
Parâmetros
Seção intitulada “Parâmetros”| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
image | arquivo | string | sim | A imagem a editar — arquivo (multipart) ou base64/data URL (JSON). Máx. ~10MB |
prompt | string | sim | A instrução de edição, ex. “deixe a maçã azul”. Até 2000 caracteres |
n | integer | não | Número de variações (1–4, padrão 1) |
Não há campo model: a edição usa o modelo Qwen-Image-Edit automaticamente.
Exemplo
Seção intitulada “Exemplo”curl https://app.norlen.io/api/v1/images/edits \ -H "Authorization: Bearer $NORLEN_API_KEY" \ -F image=@foto.png \ -F prompt="deixe a maçã azul"import base64, requests
r = requests.post( "https://app.norlen.io/api/v1/images/edits", headers={"Authorization": "Bearer SEU_TOKEN"}, files={"image": open("foto.png", "rb")}, data={"prompt": "deixe a maçã azul"}, timeout=180,)open("editada.png", "wb").write(base64.b64decode(r.json()["data"][0]["b64_json"]))import { readFile } from "node:fs/promises";
const form = new FormData();form.append("image", new Blob([await readFile("foto.png")]), "foto.png");form.append("prompt", "deixe a maçã azul");
const r = await fetch("https://app.norlen.io/api/v1/images/edits", { method: "POST", headers: { Authorization: `Bearer ${process.env.NORLEN_API_KEY}` }, body: form,});const { data } = await r.json();const fs = await import("node:fs/promises");await fs.writeFile("editada.png", Buffer.from(data[0].b64_json, "base64"));curl https://app.norlen.io/api/v1/images/edits \ -H "Authorization: Bearer $NORLEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image":"<base64-ou-data-url>","prompt":"deixe a maçã azul"}'A resposta tem o mesmo formato da geração: { "created": ..., "data": [{ "b64_json": "..." }] }.
Cobrança
Seção intitulada “Cobrança”Cada plano inclui uma cota mensal de imagens — válida tanto para geração quanto para edição. Imagens além da cota custam $0.03 cada, debitadas do seu saldo. Veja Preços & cotas.