Recraft: Recraft V4.1 Flash
Recraft V4.1 Flash는 빠른 시각적 반복 작업을 위해 텍스트로 1K 래스터 이미지를 생성합니다. 사진, 인물 사진, 복잡한 장면, 로고 콘셉트를 지원하며 PNG 또는 무손실 WebP 출력과 명시적인 색상 선호 설정을 제공합니다.
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
Recraft V4.1 Flash는 빠른 반복과 대량의 시각 자료 작업을 위한 Recraft의 텍스트 이미지 생성 모델입니다. 제작사는 사진, 인물 사진, 분위기 표현, 복잡한 장면, 혼합 매체, 로고 콘셉트를 주요 활용 분야로 제시합니다. 문서로 작성한 지시서를 래스터 이미지로 바꾸어 최종 자료를 만들기 전에 다른 창작 방향과 비교할 수 있습니다. Flash는 자체 출력 크기와 지원 설정을 가진 V4.1 제품군의 개별 모델입니다.
기본 출력은 Recraft의 1K 래스터 이미지 등급입니다. 페이지 헤더용 가로 일러스트레이션, 세로 인물 사진, 작은 카드용 정사각형 이미지 등 배치할 위치에 맞춰 캔버스를 선택하세요. 출력 형식은 무손실 WebP와 PNG입니다.
지시서에는 주요 대상과 이미지의 목적을 먼저 쓰고, 이어서 프레이밍, 배경 환경, 조명, 표현 매체를 설명하세요. 제품 콘셉트의 유용한 예시는 “호두나무 책상 위의 작고 크림색인 라디오, 정면에서 비스듬히 본 3/4 시점, 부드러운 창가 빛, 차분한 에디토리얼 사진, 왼쪽에 넉넉한 여백”입니다. 일러스트레이션에서는 형태의 표현 방식, 팔레트, 요소 간 관계를 지정하세요. 관련 없는 형용사를 덧붙이기보다 아이디어를 규정하는 디테일을 분명히 하세요. Flash의 문서상 프롬프트 한도는 최대 10,000자이므로 작업에 필요하면 장면을 자세히 설명할 수 있습니다.
제작사의 설정에는 선호 색상과 원하는 배경색이 포함됩니다. 재현 가능한 결과를 위해 시드를 지정할 수 있으며, 생성 인터페이스 문서에는 요청당 이미지 1~6개가 명시되어 있습니다. 이 설정들은 대상과 구도를 일정하게 유지하고 하나의 시각적 방향만 바꾸어 결과 이미지를 실제 레이아웃에서 비교하는 작업에 유용합니다. 색상 선호는 원하는 결과를 설명하는 설정입니다. 기존 디자인 시스템과 결합하기 전에 중요한 브랜드 색상을 완성된 자료와 비교하세요.
Flash는 래스터 그래픽을 생성합니다. 로고 콘셉트는 윤곽, 분위기, 배치를 선택하는 데 도움이 되지만 편집 가능한 패스는 별도로 명명된 Vector 모델에서 제공합니다. Flash에는 Pro 변형도 없습니다. 벡터 편집이나 고해상도 디테일이 결과물의 핵심이라면 전체 V4.1 계열에서 별도의 모델을 선택할 수 있습니다. 제작사는 선택한 초안을 더 정교한 이미지로 발전시키는 후속 다듬기 단계를 설명하며, 이는 Flash의 다른 기본 출력 크기가 아닌 별도의 작업입니다.
이 에디션은 이미지 간 변환 입력, 사용자 지정 스타일, 스타일 식별자, 스타일 매칭, 스타일 참조 이미지를 지원하지 않습니다. 문서의 인터페이스는 네거티브 프롬프트와 명시적인 텍스트 레이아웃 설정도 제외합니다. 요청하는 외관과 구도는 긍정형 지시서에 담으세요. 콘셉트에 글자가 포함되면 원하는 문구를 따옴표로 제시하고 렌더링된 글자를 확인하세요. 정확한 서체와 배치가 필수라면 별도의 레이아웃 단계를 사용하세요.
Flash의 실용적인 결과물은 명확한 지시서, 적절한 종횡비, 사용할 수 있는 래스터 파일을 갖춘 선택된 시각적 방향입니다. 이미지가 표시될 크기에서 대상, 프레이밍, 배경, 중요한 디테일을 비교하세요. 성공한 프롬프트와 선택한 파일을 함께 보관하면 다음 창작 단계에서도 선택한 방향을 따를 수 있습니다. 빠른 반복은 디자인 탐색에 도움이 되며, 기본 벡터 출력, 참조 스타일 매칭, 다른 V4.1 에디션의 해상도는 별도 모델 선택에 해당합니다.
Ailoot Ultra · 이미지 POST /v1/images/generations recraft/recraft-v4.1-flash
recraft/recraft-v4.1-flash시작하기
Recraft V4.1 Flash는 빠른 시각적 반복 작업을 위해 텍스트로 1K 래스터 이미지를 생성합니다. 사진, 인물 사진, 복잡한 장면, 로고 콘셉트를 지원하며 PNG 또는 무손실 WebP 출력과 명시적인 색상 선호 설정을 제공합니다.
- 허용 입력
- 텍스트
- 결과
- 이미지
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot Ultra · 이미지 POST /v1/images/generations
- 입력
text- 출력
image- 출력 형식
- 이미지 파일
- 출력 수
- 1 출력
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 recraft/recraft-v4.1-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 토큰 |
| 설정Ultra | 요금표— | 예측 수량— | 과금 단위출력 이미지당 | 요금 출력 · 이미지 출력 · 비교 전용 추정치 $0.014 출력 이미지당 |
| 설정예상 생성 비용 | 요금표— | 예측 수량1회 생성 예상치 | 과금 단위— | 요금 출력 · 예상 생성 비용 · 비교 전용 추정치 $0.014 생성 전 추정치 이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다. |
Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →
참조 요금 상세 정보
모델 수준의 참조 요금표는 메서드 선택, 견적 또는 요금을 변경하지 않습니다. 실제 과금에는 선택한 Ailoot 메서드 요금이 적용됩니다.
이미지 요금 설정
설정별 가격
| 설정 | 과금 조건 | 요금 |
|---|---|---|
| 설정출력 이미지 | 과금 조건요금 변형이 선언되어 있지 않습니다. | 요금 출력 · 출력 이미지 $0.014 이미지당 동등한 목록 항목들은 동일한 청구액을 설명합니다. 별도의 추가 요금을 부과하지 않습니다. |
요청 예제
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": "recraft/recraft-v4.1-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': 'recraft/recraft-v4.1-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": "recraft/recraft-v4.1-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 recraft/recraft-v4.1-flash
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
FAQ · Recraft: Recraft V4.1 Flash
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/images/generations·recraft/recraft-v4.1-flash:text→image- 요청은 어떤 필드를 사용하나요?
POST /v1/images/generations·recraft/recraft-v4.1-flash:model,prompt,n,response_format,stream