ByteDance Seed: Seedream 5.0 Flash
Seedream 5.0 Flash는 텍스트·시각 참조에서 공간 안내 변경, 다국어 이미지 글자·레이어 분해로 이미지를 생성·편집합니다. ByteDance Seed는 Flash를 더 빠른 생성용으로 소개하며 품질 중심 Pro와 구별합니다.
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
더 빠른 이미지 제작 버전
Seedream 5.0 Flash는 생성 속도를 우선하는 워크플로용 ByteDance Seed 이미지 생성·편집 모델입니다. 제작사 Pro/Flash 가이드는 텍스트-이미지와 단일·다중 참조 이미지-이미지 제작을 모두 설명합니다. 모든 기획의 고정 응답 시간을 정하지 않으면서 Flash의 빠른 생성과 Pro의 높은 이미지 품질 우선순위를 구별합니다.
핵심 공통 기능은 대화형 편집, 레이어 분해·네이티브 다국어 생성입니다. 일반 생성은 완성 이미지 하나를 반환합니다. 제조사 Flash 워크플로는 순차 관련 이미지 생성, 웹 검색·스트리밍 이미지 출력을 지원하지 않습니다. 프롬프트 최적화는 standard 모드를 사용하며 별도 빠른 최적화 제어는 Flash가 아니라 Pro에 속합니다.
기획·참조에서 제작
원하는 이미지, 주요 피사체, 구도·시각 처리를 명시한 뒤 각 참조가 무엇을 제어하는지 식별하세요. 제품 비주얼은 물체를 정하는 참조와 팔레트·표면 재질을 주는 참조를 구분합니다. “첫 이미지의 물체 실루엣·시점을 유지하고 두 번째는 차분한 배경 팔레트에만 사용한다”는 별도 역할을 줍니다.
제작사는 중국어 300자 또는 영어 600단어 이내의 간결한 프롬프트를 권장합니다. 명시된 엄격한 텍스트 입력 차단선이 아니라 준비 안내입니다. 정확한 필수 문구, 원하는 화면비·유지 디테일을 포함한 결정적 요구를 먼저 나열하세요. 전체 인상에만 의존하지 말고 완성 이미지를 목록과 비교합니다.
공간 안내 편집
Flash는 점, 바운딩 박스, 화살표·자유 표시로 편집 위치를 식별할 수 있습니다. 원본 이미지와 위치·변경을 제공하세요. 실내 콘셉트라면 의자를 표시하고 천 교체를 요청하며 유지할 바닥, 벽, 카메라 각도·주변 물체를 식별합니다. 표시가 안내용이면 완성 이미지에서 제거하도록 명시하세요.
제작사 좌표 편집 가이드는 지정 입력 이미지에 대해 0–999로 정규화한 좌표의 <point>·<bbox> 태그를 사용합니다. 점에는 x·y, 박스에는 왼쪽 위·오른쪽 아래 좌표가 들어갑니다. 특히 박스에 여러 피사체가 있으면 이미지 번호·목표 물체를 식별하세요. 이미지 간 편집은 한 참조에서 가져올 물체와 다른 참조의 목적 영역을 구분합니다.
비례 위치를 구할 때 표시 이미지 자체의 크기를 사용하세요. 캔버스 확대, 이동·브라우저 좌표는 정규화 이미지 좌표가 아닙니다. 편집 영역과 보호 영역을 모두 설명하고 결과의 원근, 조명·주변 디테일을 원본과 비교하세요.
구도를 편집 가능 레이어로 분리
레이어 분해는 정확히 이미지 하나를 받아 기본 이미지와 독립 레이어 최대 16개를 반환하는 별도 모드입니다. 각 레이어는 알파가 있는 PNG입니다. 프롬프트로 제목, 주요 피사체·장식처럼 분리 요소를 명명할 수 있으며 분해 프롬프트가 없으면 모델이 주요 요소를 자동 식별합니다.
결과는 레이어 이름, 설명, 쌓임 순서·배치 박스를 포함합니다. 기본 이미지에 쌓임 인덱스 0을 쓰고 다른 레이어를 오름차순으로 배치하세요. 절대 박스는 출력 기본 이미지에서의 배치, 정규화 박스는 다른 캔버스에서의 비례 배치를 설명합니다. 재배치 전에 원래 구도를 재구성하도록 반환 배치 메타데이터를 이미지 파일과 함께 보관하세요.
포스터 수정에서는 주요 아트워크를 제목·장식과 분리하고 가장자리·복원 배경을 확인합니다. 투명 레이어는 알파 채널 입력 하나로 편집해 투명 PNG를 출력할 수 있습니다. 투명 배경 옵션은 그 단일 입력 이미지 편집 워크플로에 한정되며 일반 텍스트-이미지는 별도 작업입니다.
다국어 구성
제작사는 중국어·영어 외에 러시아어, 아랍어, 필리핀어, 태국어, 터키어, 한국어, 말레이어, 스페인어, 포르투갈어, 인도네시아어, 프랑스어, 독일어, 베트남어·일본어의 네이티브 프롬프트·이미지 글자 지원을 문서화합니다. 승인된 정확한 문구·읽기 방향과 각 텍스트 블록 영역을 제공하세요. 최종 이미지에서 발음 구별 기호, 연결 문자, 줄바꿈·작은 라벨을 검토합니다.
참조 파일과 출력 사양
이미지 생성은 JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF 참조 최대 10개를 받습니다. 각각 최대 30MB, 두 변 14픽셀 초과, 총 196–36,000,000픽셀, 화면비 1:16–16:1입니다. 레이어 분해는 대신 같은 비율 범위에서 총 262,144–36,000,000픽셀, 최대 30MB의 JPEG·PNG 하나가 필요합니다.
생성은 기본 2K인 1K·1.5K·2K 출력 등급 또는 총 921,600–4,624,220픽셀, 비율 1:16–16:1의 명시적 크기를 제공합니다. 사용자 크기에는 두 제약이 모두 적용됩니다. 레이어 출력은 1K·1.5K·2K·auto를 쓰며 기본값은 auto입니다. 기본 이미지·각 레이어는 각각 원본 화면비를 유지합니다.
완성 이미지는 JPEG·PNG입니다. 기본 이미지 형식은 별도로 고를 수 있고 분해 레이어는 알파가 있는 PNG를 유지합니다. 전달은 인코딩 이미지 데이터나 24시간 보관 다운로드 링크를 사용할 수 있습니다. 의도한 디자인 워크플로를 위해 반환 이미지·메타데이터 모두 저장하세요. 실제 아트워크 사용 크기에서 글자, 편집 디테일·레이어 정렬을 확인합니다.
Ailoot Ultra · 이미지 POST /v1/images/generations bytedance-seed/seedream-5-0-flash
bytedance-seed/seedream-5-0-flash
bytedance-seed/seedream-5-0-flash시작하기
텍스트 설명으로 완성된 이미지 한 장을 만드세요.
- 제품 스틸 이미지 만들기
- 시각적 콘셉트 탐색하기
- 장면을 그림으로 표현하기
- 허용 입력
- 텍스트
- 결과
- 이미지
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot Ultra · 이미지 POST /v1/images/generations
- 입력
text- 출력
image- 출력 형식
- 이미지 파일
- 출력 수
- 1 출력
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 bytedance-seed/seedream-5-0-flash | 기본값— |
필드prompt | 유형string | 요건필수 | 값과 한도 최소 길이: 1 조건: 비어 있지 않은 UTF8 프롬프트입니다. 제조사 전체에 적용되는 문자 제한을 임의로 설정하지 않습니다. | 기본값— |
필드n | 유형integer | 요건선택 사항 | 값과 한도 1 | 기본값1 |
필드response_format | 유형string | 요건선택 사항 | 값과 한도 url, b64_json | 기본값— |
필드stream | 유형boolean | 요건선택 사항 | 값과 한도 false | 기본값false |
입력 자료 조합
텍스트로 이미지 생성 · 필수: prompt
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수content_type | 명세application/json |
매개변수required | 명세model, prompt |
매개변수material_types | 명세text |
매개변수optional | 명세n, response_format, stream |
매개변수n | 명세1 |
매개변수stream | 명세false |
매개변수response_format | 명세url, b64_json |
매개변수reference_images | 명세false |
매개변수edit | 명세false |
매개변수output_format_optional | 명세 |
매개변수resolution_control | 명세null |
매개변수aspect_ratio_control | 명세null |
매개변수other_fields | 명세정확히 고정된 내부 공급자 라우팅을 제외하고 거부됨 |
수명 주기: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · 실제로 반환된 task_id 또는 미디어 라이브러리 기록
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
프롬프트로 이미지 하나를 생성합니다.
모든 데이터 항목을 저장하세요. url/b64_json은 결과 인코딩 형식입니다.
요금
최종 요금 계산 방식
표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.
요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.
- 빠른 모드
- 미지정 빠른 모드를 선택한 경우
- Flex 모드
- 미지정 flex 모드를 선택한 경우
- 최대 추론 수준
- 미지정 최대 추론 수준에 default 조정값을 적용하는 경우
비교용 예상 요금
설정별 가격
각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.
| 설정 | 요금표 | 예측 수량 | 과금 단위 | 요금 |
|---|---|---|---|---|
| 설정기본 토큰 요금 | 요금표기본 요금 | 예측 수량— | 과금 단위— | 요금 입력 · 입력 토큰 · 비교 전용 추정치 — / 1K 토큰 출력 · 출력 토큰 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 읽기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기, 1시간 · 비교 전용 추정치 — / 1K 토큰 |
| 설정입력 이미지 | 요금표— | 예측 수량— | 과금 단위입력 이미지당 | 요금 입력 · 입력 이미지 · 비교 전용 추정치 $0 입력 이미지당 |
| 설정Ultra | 요금표— | 예측 수량— | 과금 단위출력 이미지당 | 요금 출력 · 이미지 출력 · 비교 전용 추정치 $0.036 출력 이미지당 |
| 설정예상 생성 비용 | 요금표— | 예측 수량1회 생성 예상치 | 과금 단위— | 요금 출력 · 예상 생성 비용 · 비교 전용 추정치 $0.036 생성 전 추정치 이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다. |
Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →
참조 요금 상세 정보
모델 수준의 참조 요금표는 메서드 선택, 견적 또는 요금을 변경하지 않습니다. 실제 과금에는 선택한 Ailoot 메서드 요금이 적용됩니다.
이미지 요금 설정
설정별 가격
각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.
| 설정 | 과금 조건 | 요금 |
|---|---|---|
| 설정출력 이미지 | 과금 조건요금 변형이 선언되어 있지 않습니다. | 요금 출력 · 출력 이미지 $0.036 이미지당 |
| 설정입력 이미지 | 과금 조건요금 변형이 선언되어 있지 않습니다. | 요금 입력 · 입력 이미지 $0 이미지당 |
동등한 목록 항목들은 동일한 청구액을 설명합니다. 별도의 추가 요금을 부과하지 않습니다.
요청 예제
Ailoot Ultra · 이미지
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "bytedance-seed/seedream-5-0-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
request={'model': 'bytedance-seed/seedream-5-0-flash', 'prompt': 'A lighthouse on a cliff, watercolor', 'n': 1, 'response_format': 'b64_json'}
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "bytedance-seed/seedream-5-0-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"};
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
결과 수신 및 저장
Ailoot Ultra · 이미지
반환된 각 이미지를 다운로드하거나 Base64 내용을 저장하세요
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
완료된 결과 모두 보관
완료된 이미지를 모두 저장하세요. 반환된 각 URL에서 가져오거나 Base64 내용을 디코딩하세요.
모든 데이터 항목을 저장하세요. 각 b64_json을 디코딩하거나 반환된 모든 서명된 URL에서 가져오세요. 실제 MIME/바이트에 따라 파일 확장자를 선택하세요.
원래 응답을 확인해야 할 경우
이미지 생성 또는 편집 결과를 확인해야 하는 경우 최초 operation_id/X-Client-Request-ID와 반환된 결과 정보를 보관하세요. 실제 task_id 또는 asset_id 값으로 미디어 라이브러리에서 기존의 소유한 결과를 복구하세요. 생성/편집 요청을 다시 제출하거나 operation_id로 폴링 URL을 구성하지 마세요.
응답 필드
| 필드 | 유형 |
|---|---|
필드created | 유형integer |
필드data[].url | 유형string |
필드data[].b64_json | 유형base64 string |
필드usage | 유형object |
오류와 다음 단계
| 응답 | 조건 | 다음 단계 |
|---|---|---|
응답400 · invalid_request_error | 조건필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음 | 다음 단계새 생성 요청 전에 표시된 필드를 수정하세요. |
응답server_error | 조건반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다 | 다음 단계최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요. |
별칭
모델 별칭
Ailoot Ultra bytedance-seed/seedream-5-0-flash
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
FAQ · ByteDance Seed: Seedream 5.0 Flash
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/images/generations·bytedance-seed/seedream-5-0-flash:text→image- 요청은 어떤 필드를 사용하나요?
POST /v1/images/generations·bytedance-seed/seedream-5-0-flash:model,prompt,n,response_format,stream