모델

Recraft: Recraft V4

Markdown · JSON

Recraft: Recraft V4

Recraft V4는 구도, 색상 관계, 상세한 창작 지시에 초점을 맞춘 1K 래스터 이미지를 생성합니다. 일러스트레이션, 실사 장면, 그래픽 디자인 콘셉트를 다루며 선택 사항인 스타일 입력과 별도의 이미지 간 변환 작업을 제공합니다.

모델 소개

이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.

Recraft V4는 Recraft V4 세대의 표준 래스터 모델입니다. 제작사는 균형 잡힌 구도, 일관된 색상 관계, 시각적 의도를 뒷받침하는 디테일 등 디자인 판단을 강조합니다. 양식화된 일러스트레이션, 사진 같은 장면, 그래픽 디자인 콘셉트를 다룰 수 있습니다. 짧은 방향으로 분위기를 탐색하거나 의도적인 레이아웃을 상세히 지정하는 등, 미적 선택과 정확한 프롬프트 반영을 결합한 이미지가 필요한 작업에 사용하세요.

정확한 모델 코드는 recraftv4입니다. 제작사 자료에는 무손실 WebP 또는 PNG 형식의 1K 래스터 출력이 명시되어 있습니다. 정사각형은 1024 × 1024픽셀, 16:9는 1344 × 768픽셀, 2:3은 832 × 1280픽셀이며 다른 지원 비율에는 각각의 크기가 있습니다. V4 Pro는 별도의 2K 래스터 에디션이고 V4 Vector 및 Pro Vector는 편집 가능한 SVG를 반환합니다. 서로 다른 출력 속성을 결합하지 말고 필요한 결과물에 맞는 정확한 V4 변형을 선택하세요.

제작사 가이드는 짧은 해석형 프롬프트와 구조화된 창작 지시를 구분합니다. 짧은 문구는 형태, 분위기, 프레이밍을 탐색할 여지를 남길 수 있습니다. 구조화된 지시서는 대상, 배경 환경, 자세, 소재, 부차적 요소, 조명, 시각적 위계를 명시할 수 있습니다. 서사적 일러스트레이션이라면 작은 다리를 건너는 자전거 이용자, 대담하게 단순화한 형태, 따뜻하고 차분한 색상, 명확한 왼쪽에서 오른쪽으로의 움직임을 설명하세요. 이런 내용과 구도 결정이 서로 관련 없는 스타일 형용사의 긴 목록보다 실행하기 쉽습니다.

V4의 범위에는 일러스트레이션, 입체적인 이미지, 실사 이미지가 포함됩니다. 가이드는 일러스트레이션에는 그리는 방식의 논리를, 3D처럼 보이는 이미지에는 소재, 빛, 카메라, 깊이를 설명할 것을 권장합니다. 후자는 편집 가능한 메시가 아닌 래스터 이미지입니다. 포스터나 패키지 콘셉트에서는 어떤 단어가 주된 것인지, 어디에 놓이는지, 이미지와 서체가 어떻게 상호 작용하는지 명시하세요. 제작사는 짧거나 중간 길이의 읽기 쉬운 텍스트를 강조합니다. 사용 전에 반환된 이미지의 실제 문구와 배치를 확인하세요.

생성은 최대 10,000자의 프롬프트, 난수 시드, 출력 1~6개, 선호 색상, 원하는 배경색을 지원합니다. 선택 사항인 호환 사용자 지정 스타일과 참조 이미지는 flexible 또는 precise 매칭으로 시각적 처리를 안내할 수 있습니다. 깔끔한 참조 하나나 같은 시각적 세계에 속하는 참조 세트를 고른 뒤 프롬프트로 새로운 대상과 장면을 설명하세요. 참조와 출력 간 색상 일치는 보장되지 않으므로 필요한 팔레트를 분명히 제시하고 결과와 비교해야 합니다. 참조 스타일 생성에는 PNG, JPG 또는 WebP 이미지 1~10개를 사용하며, 총용량은 64 MB 이하, 각 파일은 20 MB 미만이어야 합니다. 각 참조 이미지의 짧은 변은 최소 256픽셀, 긴 변은 최대 4,096픽셀, 해상도는 최대 16메가픽셀이어야 합니다. 이러한 참조 이미지와 호환 저장 스타일 중 하나만 사용하고 둘을 함께 사용하지 마세요.

문서의 이미지 간 변환 작업은 기존 이미지와 프롬프트를 결합하고, 0~1의 strength 값으로 새 출력이 원본에서 얼마나 달라질지 정합니다. 이 작업에서는 V4 스타일 설정을 받지 않습니다. 현재 생성 자료는 큐레이션된 스타일 이름, negative_prompt, text_layout, artistic_level, no_text도 제외합니다. 원하는 결과를 긍정형으로 설명하고 목표 구도 안에서 자료를 평가하세요. 표준 V4는 특정 에디션, 형식, 출력 크기에 따른 집중적인 래스터 디자인 해석을 제공합니다. 이미지 간 변환에는 20 MB 미만, 최대 16메가픽셀, 각 변이 256~4,096픽셀인 PNG, JPG, WebP 또는 SVG를 제공해야 합니다.

Ailoot Ultra · 이미지 POST /v1/images/generations recraft/recraft-v4

recraft/recraft-v4

Recraft /recraft/recraft-v4

시작하기

Recraft V4는 구도, 색상 관계, 상세한 창작 지시에 초점을 맞춘 1K 래스터 이미지를 생성합니다. 일러스트레이션, 실사 장면, 그래픽 디자인 콘셉트를 다루며 선택 사항인 스타일 입력과 별도의 이미지 간 변환 작업을 제공합니다.

허용 입력
텍스트 · 이미지
결과
이미지

Ailoot에서 사용 가능 · 입력 및 메서드

Ailoot Ultra · 이미지 POST /v1/images/generations
입력
text, image
출력
image
출력 형식
이미지 파일
필드유형요건값과 한도기본값
필드model유형string요건필수값과 한도
recraft/recraft-v4
기본값—
필드prompt유형string요건필수값과 한도
최소 길이: 1
기본값—
필드n유형integer요건선택 사항값과 한도
최솟값: 1
최댓값: 6
기본값—
필드aspect_ratio유형string요건선택 사항값과 한도
1:1, 4:3, 3:4, 16:9, 9:16, auto
기본값—
필드input_references유형array요건선택 사항값과 한도
최소 항목 수: 0
최대 항목 수: 1
기본값—
입력 자료 조합

텍스트로 이미지 생성 · 필수: prompt

reference_guided_image · 필수: prompt, actual image reference

메서드 매개변수와 수명 주기
매개변수명세
매개변수content_type명세application/json
매개변수required명세model, prompt
매개변수material_types명세text, image
매개변수optional_controls명세n, aspect_ratio, input_references
매개변수n명세{"minimum":1,"maximum":6}
매개변수reference_images명세{"minimum":0,"maximum":1,"source":"고객이 실제로 제공한 자료"}
매개변수provider_specific_options명세저장된 정확한 엔드포인트 허용 목록의 style/controls/text_layout만 사용하세요. 구조를 추측하지 마세요.

메서드 별칭: /v1/images

수명 주기: 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}

프롬프트만 사용하는 예제는 공식 ImageGenerationRequest 구조를 유지합니다.

반환된 모든 이미지와 응답 전체를 보존하세요. 출력 수량은 요청한 n이 아니라 실제 수량을 따릅니다.

요금

최종 요금 계산 방식

표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.

요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.

빠른 모드
미지정 빠른 모드를 선택한 경우
Flex 모드
미지정 flex 모드를 선택한 경우
최대 추론 수준
미지정 최대 추론 수준에 default 조정값을 적용하는 경우

비교용 예상 요금

설정별 가격

각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.

설정요금표예측 수량과금 단위요금
설정기본 토큰 요금요금표기본 요금예측 수량—과금 단위—요금
입력 · 입력 토큰 · 비교 전용 추정치 — / 1K 토큰
출력 · 출력 토큰 · 비교 전용 추정치 — / 1K 토큰
입력 · 캐시 읽기 · 비교 전용 추정치 — / 1K 토큰
입력 · 캐시 쓰기 · 비교 전용 추정치 — / 1K 토큰
입력 · 캐시 쓰기, 1시간 · 비교 전용 추정치 — / 1K 토큰
설정Ultra요금표—예측 수량—과금 단위출력 이미지당요금
출력 · 출력 이미지 · 비교 전용 추정치 $0.08 출력 이미지당
설정예상 생성 비용요금표—예측 수량1회 생성 예상치과금 단위—요금
출력 · 예상 생성 비용 · 비교 전용 추정치 $0.08 생성 전 추정치

이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다.

Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →

참조 요금 상세 정보

모델 수준의 참조 요금표는 메서드 선택, 견적 또는 요금을 변경하지 않습니다. 실제 과금에는 선택한 Ailoot 메서드 요금이 적용됩니다.

이미지 요금 설정

설정별 가격

설정과금 조건요금
설정출력 이미지과금 조건요금 변형이 선언되어 있지 않습니다.요금
출력 · 출력 이미지 $0.08 이미지당

동등한 목록 항목들은 동일한 청구액을 설명합니다. 별도의 추가 요금을 부과하지 않습니다.

요청 예제

Ailoot Ultra · 이미지

curlPython SDKNode.js SDK
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={'model': 'recraft/recraft-v4', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

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', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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", "prompt": "a red panda astronaut floating in space, studio lighting"};
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}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
완료된 결과 모두 보관

완료된 이미지를 모두 저장하세요. 반환된 각 URL에서 가져오거나 Base64 내용을 디코딩하세요.

모든 데이터 항목과 사용량 전체를 보존하세요. 실제로 반환된 모든 이미지의 소유권을 확보하고 저장하세요. URL이나 ID를 임의로 만들지 마세요.

원래 응답을 확인해야 할 경우

이미지 생성 또는 편집 결과를 확인해야 하는 경우 최초 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

메서드 경로 별칭

/v1/images

관련 호출용 ID

recraft/recraft-v4

FAQ · Recraft: Recraft V4
어떤 입력과 결과를 사용할 수 있나요?

POST /v1/images/generations · recraft/recraft-v4: text, image → image

요청은 어떤 필드를 사용하나요?

POST /v1/images/generations · recraft/recraft-v4: model, prompt, n, aspect_ratio, input_references

어떤 제한이 적용되나요?

POST /v1/images/generations · recraft/recraft-v4: n.minimum: 1; n.maximum: 6

자세히 보기

Claude Code, OpenCode, Hermes, 자체 앱에 Ailoot를 연결하세요.

회사와 그 프로젝트 포트폴리오

회사와 그 프로젝트 포트폴리오: 수백만 고객, 매월 수십억 규모의 매출.

할인받아 토큰을 구매하세요.

정기 작업에는 구독 할인, 토큰 구매에는 최대 50% 프로모션 코드.

구독
정기 요청에 맞는 할인 요금제를 선택하세요.
최대 50% 프로모션 코드
구매할 때 코드를 넣으면 진행 중 행사에 따라 가격을 다시 계산합니다.
이력의 지출
요청마다 모델, 토큰, 금액을 저장합니다.

구독 선택 · 모델 가격 보기

판매하는 제품에 API를 연결하세요.

Ailoot 공식 이용 조건과 라이선스 계약으로 SaaS, 앱, 봇에 사용하세요. 재판매에는 리셀러 라이선스를 요청하세요.

상업용 앱
서비스의 유료 기능에 텍스트, 이미지, 영상, 소리 생성을 넣으세요.
리셀러 라이선스
프로젝트 설명과 접근 구조를 보내 사용·재판매의 서면 조건을 요청하세요.
사이트의 문서
연결 전에 공식 이용 조건, 라이선스 계약, 데이터 처리 정책을 읽을 수 있습니다.

리셀러 라이선스 요청 · 공식 이용 조건과 라이선스 계약