New: Nano Banana 2.1Try the model
API Stock

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€ ํŽธ์ง‘

์ฐธ์กฐ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•œ ๋ฐฐ๊ฒฝ, ์ œํ’ˆ, ์Šคํƒ€์ผ ํŽธ์ง‘๊ณผ Midjourney ์ž‘์—….

1๋ถ„ ๋ถ„๋Ÿ‰2๊ฐœ ์„น์…˜

ํŽธ์ง‘์€ ์ง€์‹œ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ๋ฐ”๊ฟ€์ง€ ๋จผ์ € ๋งํ•˜๊ณ , ๋ฌด์—‡์„ ์œ ์ง€ํ• ์ง€ ์ด์–ด์„œ ๋งํ•˜์„ธ์š”. ์ฐธ์กฐ ์ด๋ฏธ์ง€๋Š” ๊ธด ํ˜•์šฉ์‚ฌ ๋ชฉ๋ก๋ณด๋‹ค ์›ํ•˜๋Š” ์™ธ๊ด€์„ ์ •ํ™•ํžˆ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด ํ•ต์‹ฌ

์†๋„, ์ถฉ์‹ค๋„, ํ•ด์ƒ๋„, ์ œ์–ด ์ค‘ ๋ฌด์—‡์ด ์šฐ์„ ์ธ์ง€์— ๋”ฐ๋ผ ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ๋ชจ๋“  ๊ฒฐ๊ณผ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฒ„์ „์„ ์ €์žฅํ•˜์„ธ์š”. nano-banana-*, gpt-image-2, wan2.7-image and midjourney โ€” Image editing.

ํ•œ ๋ฒˆ์˜ ์‹œ๋„์—์„œ๋Š” ํ•œ ๊ฐ€์ง€๋งŒ ๋ฐ”๊พธ์„ธ์š”. ์ข‹์€ ์ถœ๋ ฅ์€ ์ฐธ์กฐ๊ฐ€ ๋˜๋ฉฐ ๋‹ค์Œ ๋ฐ˜๋ณต์˜ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ถœ๋ฐœ์ ์ž…๋‹ˆ๋‹ค.

finished์™€ failed๋ฅผ ์ตœ์ข… ์ƒํƒœ๋กœ ๋‹ค๋ฃจ์„ธ์š”. polling ๋˜๋Š” webhook์„ ์‚ฌ์šฉํ•˜๊ณ  ์›๋ณธ ์˜ค๋ฅ˜๋Š” ์„œ๋ฒ„์— ๋ณด๊ด€ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์•ˆ์ „ํ•œ ๋ฉ”์‹œ์ง€๋งŒ ํ‘œ์‹œํ•˜์„ธ์š”.

ํ”„๋กฌํ”„ํŠธ์™€ API ์˜ˆ์‹œ

text
Replace the overcast sky with a clear blue one. Keep the building, the
lighting on the facade and the framing exactly as they are.
The original living-room input supplied with the Google editing example; its generation prompt is not published.
The original living-room input supplied with the Google editing example; its generation prompt is not published.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.

text
Using the provided image of a living room, change only the blue sofa to be a
vintage, brown leather chesterfield sofa. Keep the rest of the room, including
the pillows on the sofa and the lighting, unchanged.
Nano Banana 2.1 changes only the sofa while retaining the room, pillows and lighting from the source.
Nano Banana 2.1 changes only the sofa while retaining the room, pillows and lighting from the source.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.

text
Put the chair from image 1 into the room from image 2. Match the window light
and cast a soft shadow on the floor. Do not change the room's furniture or
the chair's upholstery.
text
The person from the reference, now standing on a train platform at night,
three-quarter view, rain, sodium lighting. Keep their face, hair and jacket
identical to the reference.
text
Redraw image 1 in the visual style of image 2 โ€” same palette, line weight and
grain. Keep the composition and subject of image 1 unchanged.
text
A ceramic mug in the masked area, same lighting and perspective as the rest of
the frame

About these samples. Ready-made examples are copied to our own storage only when their source permits reuse. The exact prompt appears above each result, and the original source and license are linked below the media.

json
{
"model": "z-image",
"input": {
"prompt": "Replace the overcast sky with a clear blue one, keep the lighting on the building consistent",
"urls": ["https://example.com/facade.jpg"]
}
}
json
{
"model": "wan2.7-image",
"input": {
"prompt": "Put the chair from image 1 into the room from image 2, matching the window light",
"urls": ["https://example.com/chair.png", "https://example.com/room.jpg"],
"size": "3:2"
}
}
sh
curl -X POST https://api.api-stock.com/api/v1/generation/create \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "midjourney",
"input": {
"action": "imagine",
"prompt": "A weathered brass diving helmet on a workshop bench, volumetric dust",
"size": "1:1",
"version": "7",
"stylize": 300
}
}'
json
{
"code": 200,
"data": {
"taskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"status": "not_started",
"createdAt": "2026-02-28T13:07:45.000Z"
}
}
json
{
"code": 200,
"data": {
"taskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"status": "finished",
"files": [
{
"fileUrl": "https://storage.api-stock.com/generated/mj-grid-4c81.png",
"fileType": "image"
}
],
"createdTime": "2026-02-28T13:07:45.000Z"
}
}
sh
curl -X POST https://api.api-stock.com/api/v1/generation/create \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "midjourney",
"input": {
"action": "upscale",
"parentTaskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"index": 2
}
}'
ts
const BASE = "https://api.api-stock.com/api/v1";
const KEY = process.env.API_STOCK_KEY!;
async function submit(input: Record<string, unknown>): Promise<string> {
const res = await fetch(`${BASE}/generation/create`, {
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "midjourney", input }),
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
return body.data.taskId;
}
async function wait(taskId: string) {
for (;;) {
await new Promise((r) => setTimeout(r, 5_000));
const res = await fetch(`${BASE}/task/status/${taskId}`, {
headers: { Authorization: `Bearer ${KEY}` },
});
const body = await res.json().catch(() => null);
if (!res.ok) {
const message = body?.error?.message ?? `${res.status} ${res.statusText}`;
throw new Error(message);
}
const { data } = body;
if (data.status === "finished") return data;
if (data.status === "failed") throw new Error(data.errorMessage);
}
}
const gridId = await submit({
action: "imagine",
prompt:
"A weathered brass diving helmet on a workshop bench, volumetric dust",
size: "1:1",
version: "7",
stylize: 300,
});
await wait(gridId);
const upscaleId = await submit({
action: "upscale",
parentTaskId: gridId,
index: 2,
});
const upscaled = await wait(upscaleId);
console.log(upscaled.files[0].fileUrl); // โ†’ https://storage.api-stock.com/...
json
{
"model": "midjourney",
"input": {
"action": "pan",
"parentTaskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"index": 2,
"direction": "left"
}
}
json
{
"model": "midjourney",
"input": {
"action": "zoom",
"parentTaskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"index": 2,
"zoomRatio": 1.5
}
}
json
{
"model": "midjourney",
"input": {
"action": "modal",
"parentTaskId": "019ca8c4-3e17-7b55-9f10-cc2b6de0a8f4",
"index": 2,
"prompt": "Replace the bench with a slab of sea-worn granite",
"maskUrl": "https://example.com/mask.png"
}
}
json
{
"model": "midjourney",
"input": {
"action": "describe",
"imageUrls": ["https://example.com/reference.jpg"]
}
}
json
{
"model": "midjourney",
"input": {
"action": "blend",
"imageUrls": [
"https://example.com/texture-a.jpg",
"https://example.com/texture-b.jpg",
"https://example.com/texture-c.jpg"
],
"dimensions": "LANDSCAPE"
}
}
json
{
"code": 400,
"error": {
"message": "action \"variation\" requires index or customId",
"type": "BadRequest",
"code": "invalid_input"
}
}

์ง์ ‘ ๋ฐœ๊ธ‰ํ•œ ํ‚ค๋กœ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”

API Stock ์นดํƒˆ๋กœ๊ทธ์—์„œ ๋ชจ๋ธ๊ณผ ๊ฐ€๊ฒฉ์„ ํ™•์ธํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋‚˜ API๋กœ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

์ด์–ด์„œ ์ฝ๊ธฐ