Recraft: Recraft V3
Recraft V3 matnni hisobga oladigan kompozitsiya va uslub boshqaruvlari bilan fotosuratlar, illyustratsiyalar va grafik maketlar yaratadi. Uning alohida rastr va SVG variantlari plakatlar, brendli tasvir to‘plamlari, ikonalar hamda so‘zlar va vizual tuzilma birga ishlashi kerak bo‘lgan dizaynlarga mos.
Model haqida
Bu tavsif model imkoniyatlarini yoritadi. Ailoot da tanlangan usul uchun mavjud kirish, chiqish va parametrlar quyida keltirilgan.
Recraft V3 — grafik dizayn bilan birga fotografik va illyustrativ sahnalar uchun qurilgan tasvir yaratish modeli. Yozma topshiriq obyekt, muhit va kompozitsiyani tasvirlaydi; natija tasvirdir. V3 qayta o‘qitishsiz namuna tasvirlaridan uslub izchilligini saqlagan holda Recraft’ning matn tasvirlash va fotorealizmini rivojlantiradi.
Matn kompozitsiyaning bir qismi sifatida
V3 tasvir ichidagi matn, jumladan uzunroq matn va o‘rtacha o‘lchamli yozuv bilan ishlaydi. Recraft tasvir yaratishdan oldin so‘zlar va joylarini belgilaydigan maket bosqichini tasvirlaydi. Maket topshiriqdan avtomatik yaratilishi yoki Recraft dizayn muhitida qo‘lda joylashtirilishi mumkin. Bu sarlavha, illyustratsiya va yordamchi matnni bitta kompozitsiyada bog‘lashga yordam beradi. Ishlab chiqaruvchi o‘zgarmas piksel to‘ri emas, tasvirga nisbatan ifodalangan aniq matn maketi koordinatalarini ham hujjatlashtiradi. Har bir matn elementi bitta so‘z va normallashtirilgan koordinatalardagi to‘rtta burchak nuqtasini qamrab oladi: (0, 0) yuqori chap, (1, 1) pastki o‘ng. Koordinatalar shu oraliqdan tashqariga chiqishi mumkin; bunday holatda shakl qirqiladi. Aniq matn maketi so‘zlari hujjatlashtirilgan belgi cheklovlariga amal qilishi kerak.
Plakat yoki muqova uchun aniq so‘zlarni bering va iyerarxiyasini tasvirlang: qaysi satr yetakchi, qayerda turadi va rasm unga qanday xizmat qiladi. Natijani tanlashda tasvirlangan imlo va oraliqlarni tekshiring.
Uslub, palitra va badiiy yo‘nalish
V3 tayyor tanlangan fotografik, illyustratsiya va emblema uslublarini hamda alohida vektor uslublari kutubxonasini qamrab oladi. Recraft V3 Raw — rastr modelning standart uslubi; Vector art esa vektor variantining standarti. Photorealism fotografik ko‘rinishni ko‘zlaydi, Illustration esa uslublashtirilgan teksturalar, soyalash va murakkabroq rang o‘tishlariga mos. Vektor uslublari shakllar, cheklangan palitralar va tekis rang to‘ldirish yoki sodda gradientlarni afzal ko‘radi.
Maxsus uslublar namuna tasvirlari, mavjud mos uslublar yoki ularning kombinatsiyasidan tuzilishi mumkin. Ular tasvir seriyasida qayta ishlatiladigan vizual yo‘nalish beradi. Hujjatlashtirilgan aralashtirish boshqaruvlari namunalar va manba uslublariga alohida vaznlar berishga imkon beradi; vaznlar soni manbalar soniga mos. PaletteMatch va MaxWeight — ro‘yxatdagi ikki aralashtirish siyosati. Ishlab chiqaruvchi 10 tagacha uslub namuna tasviriga ruxsat beradi va V3 uchun oddiy style-match rejimini ishlatadi. Saqlangan maxsus uslub va to‘g‘ridan-to‘g‘ri uslub namunalari muqobil kirishlar; maxsus uslub yaratish modeliga mos bo‘lishi kerak.
Afzal ranglar va fon rangi palitrani yo‘naltiradi. Har bir komponenti 0 dan 255 gacha bo‘lgan 10 tagacha RGB rang hujjatlashtirilgan. Ixtiyoriy nisbiy vaznlar 0 dan 1 gacha; ular barcha ranglarga berilishi yoki hech biriga berilmasligi kerak, jami esa 1 dan oshmaydi. Artistic level statik, toza ishlov uchun 0 dan dinamikroq, noodatiy kompozitsiyalar uchun 5 gacha. Salbiy topshiriq istalmagan elementlarni tasvirlaydi; alohida no-text boshqaruvi ichki matn maketlarini o‘chiradi. Takrorlanuvchanlik uchun tasodifiy seed mavjud. Bu boshqaruvlar sahna, uning uslubi va vizual maketiga turli ta’sir vositalarini beradi.
Rastr tasvirlar va alohida SVG varianti
Recraft ikkita V3 variantini hujjatlashtiradi. Rastr model yo‘qotishsiz WebP yoki PNG yaratadi va fotografik detallar, soyalash hamda teksturali illyustratsiyaga mos. Recraft V3 Vector SVG yaratadi: o‘zgarmas piksel aniqligisiz masshtablanadigan yo‘llar va shakllar. U piktogrammalar, logotip g‘oyalari, nishonlar va batafsil vektor materiallariga mos. Rastrdan vektorga aylantirish bevosita vektor material yaratishdan alohida amaldir.
Ikkala variantning o‘z identifikatsiyasi bor. Vektorga o‘xshash ko‘rinishdagi tasvir va haqiqiy SVG natija — turli tanlovlar. Dizayn jarayonini tayyorlashda umumiy V3 nomini har bir amal bir xil fayl turini qaytarishiga dalil deb qarash o‘rniga kerakli natijani tanlang.
Mavjud materialni tahrirlash va yakuniy ishlov
Recraft V3 hujjatlarida tasvirdan tasvir yaratish, inpainting, outpainting va fonni almashtirish yoki yaratish ko‘rsatilgan. Tasvirdan tasvir mavjud tasvirni yangi topshiriq bilan birlashtiradi. Inpainting tasvir va mos niqob yordamida tanlangan hududni qayta yaratadi; outpainting asl kadr tashqarisiga mazmun qo‘shadi. Fon amallari obyekt atrofidagi muhitga tegishli.
Yordamchi vositalar to‘plami o‘chirish, fonni olib tashlash, vektorlashtirish va ikki xil kattalashtirishni ham qamrab oladi. Creative upscaling yangi detallar kiritishi mumkin; crisp upscaling mavjud mazmunning aniqroq katta ko‘rinishini ko‘zlaydi. Bular rastr yoki vektor model nomining qo‘shimcha ma’nolari emas, o‘z kirishlari va natijalariga ega alohida amallardir.
Topshiriq, o‘lcham va manba tasviri chegaralari
Ishlab chiqaruvchining V3 yaratish spetsifikatsiyasi 1000 belgigacha topshiriq va har so‘rovda 1–6 tasvirni qabul qiladi. U 14 ta tomonlar nisbatini qo‘llaydi: 1:1, 2:1, 1:2, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 6:10, 14:10, 10:14, 16:9 va 9:16. Hujjatlashtirilgan rastr misollariga 1024x1024, 1820x1024 va 1024x1820 kiradi. Aniq rastr o‘lchamlari qo‘llanadigan ro‘yxatdan bo‘lishi kerak; SVG o‘zgarmas piksel o‘lchamisiz tomonlar nisbatlaridan foydalanadi. O‘lcham berilmasa, ishlab chiqaruvchi tizimi uni topshiriqdan tanlaydi.
Tasvir kirishli amallar uchun ishlab chiqaruvchi PNG, JPG va WebP ni, muayyan amal ruxsat berganda SVG ni ko‘rsatadi. Fayllar 20 MB dan kichik, ko‘pi bilan 16 MP, eng uzun tomoni ko‘pi bilan 4096 piksel bo‘lishi kerak. Eng qisqa tomon kamida 256 piksel, crisp upscaling uchun esa 32 piksellik istisno bor. Niqoblar tasvir o‘lchamiga mos va sof qora-oq bo‘ladi; uslub namunalarining jami chegarasi 64 MB.
Ailoot API loyihasi uchun vazifani aniq yo‘naltirilgan tasvir topshirig‘iga aylantiring: aniq matn, obyekt joylashuvi, vizual uslub va kerakli kompozitsiya. Plakat, mahsulot sahnasi va ikonalar seriyasi turli topshiriqlarni talab qiladi; har bir natija qanday ishlatilishini hal qilishda tegishli V3 varianti va amallarning farqlarini saqlang.
Ailoot Ultra · Rasmlar POST /v1/images/generations recraft/recraft-v3
recraft/recraft-v3Boshlash
Recraft V3 matnni hisobga oladigan kompozitsiya va uslub boshqaruvlari bilan fotosuratlar, illyustratsiyalar va grafik maketlar yaratadi. Uning alohida rastr va SVG variantlari plakatlar, brendli tasvir to‘plamlari, ikonalar hamda so‘zlar va vizual tuzilma birga ishlashi kerak bo‘lgan dizaynlarga mos.
- Qabul qilinadigan kirish ma’lumotlari
- Matn · Rasmlar
- Natijalar
- Rasmlar
Ailoot da mavjud · kirish ma’lumotlari va usullar
Ailoot Ultra · Rasmlar POST /v1/images/generations
- Kirish
text,image- Chiqish
image- Chiqish formati
- Rasm fayli
| Maydon | Tur | Talab | Qiymatlar va cheklovlar | Standart |
|---|---|---|---|---|
Maydonmodel | Turstring | TalabMajburiy | Qiymatlar va cheklovlar recraft/recraft-v3 | Standart— |
Maydonprompt | Turstring | TalabMajburiy | Qiymatlar va cheklovlar Eng kam uzunlik: 1 | Standart— |
Maydonn | Turinteger | TalabIxtiyoriy | Qiymatlar va cheklovlar Eng kam: 1 Eng ko‘p: 6 | Standart— |
Maydonaspect_ratio | Turstring | TalabIxtiyoriy | Qiymatlar va cheklovlar 1:1, 4:3, 3:4, 16:9, 9:16, auto | Standart— |
Maydoninput_references | Turarray | TalabIxtiyoriy | Qiymatlar va cheklovlar Elementlarning eng kam soni: 0 Elementlarning eng ko‘p soni: 1 | Standart— |
Kirish materiallari birikmalari
Matndan rasm · Majburiy: prompt
Usul parametrlari va hayot sikli
| Parametr | Parametr talablari |
|---|---|
Parametrcontent_type | Parametr talablariapplication/json |
Parametrrequired | Parametr talablarimodel, prompt |
Parametrmaterial_types | Parametr talablaritext, image |
Parametroptional_controls | Parametr talablariaspect_ratio, n, input_references |
Parametrexact_supported_parameters | Parametr talablari{"aspect_ratio":{"type":"enum","values":["1:1","4:3","3:4","16:9","9:16","auto"]},"n":{"type":"range","min":1,"max":6},"input_references":{"type":"range","min":0,"max":1}} |
Parametrreference_material_rule | Parametr talablariFaqat mijozning haqiqiy rasm referenslari; ularga provayder endpointi shartlari qo‘llanadi. |
Usul taxalluslari: /v1/images
Hayot sikli: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Amalda qaytarilgan task_id yoki media kutubxonasidagi yozuv
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Aniq model va hujjatdagi kirish maydonlaridan foydalaning.
To‘liq javobni, har bir haqiqiy chiqish natijasini va dastlab qaytarilgan ID larni saqlang.
Tariflar
Yakuniy to‘lov qanday hisoblanadi
Ko‘rsatilgan tariflar xarajatni generatsiyadan oldin taxminiy hisoblash uchun xizmat qiladi. Yakuniy to‘lov dastlabki generatsiya uchun qayd etilgan xarajat asosida hisoblanadi. Natijaning o‘lchangan davomiyligi va oldindan taxmin qilingan miqdorlar haq undiriladigan yakuniy miqdor hisoblanmaydi.
Tarif ma’lumotlari so‘rov imkoniyatlarini qo‘shmaydi. Qo‘llab-quvvatlanadigan parametrlar tanlangan usulda ko‘rsatilgan.
- Tezkor rejim
- Ko‘rsatilmagan Tezkor rejim tanlanganda
- Flex rejimi
- Ko‘rsatilmagan flex rejimi tanlanganda
- Maksimal fikrlash darajasi
- Ko‘rsatilmagan Maksimal fikrlash darajasi uchun standart (default) tuzatish qo‘llanganda
Taqqoslash uchun taxminiy tariflar
Sozlamalar bo‘yicha narxlar
Har bir to‘lovni ko‘rsatilgan shartlarga moslang. Har bir muqobil sozlamalar to‘plami uchun bitta tarifdan foydalaning.
| Sozlama | Tariflar jadvali | Prognoz miqdori | Hisob birligi | To‘lov |
|---|---|---|---|---|
| SozlamaTokenlar uchun bazaviy tariflar | Tariflar jadvaliAsosiy tarif | Prognoz miqdori— | Hisob birligi— | To‘lov Kirish · Kirish tokenlari · Faqat taqqoslash uchun taxmin — / 1K token Chiqish · Chiqish tokenlari · Faqat taqqoslash uchun taxmin — / 1K token Kirish · Keshdan o‘qish · Faqat taqqoslash uchun taxmin — / 1K token Kirish · Keshga yozish · Faqat taqqoslash uchun taxmin — / 1K token Kirish · Keshga yozish, 1 soat · Faqat taqqoslash uchun taxmin — / 1K token |
| SozlamaUltra | Tariflar jadvali— | Prognoz miqdori— | Hisob birligichiqish rasmi uchun | To‘lov Chiqish · rasm chiqishi · Faqat taqqoslash uchun taxmin $0.08 chiqish rasmi uchun |
| SozlamaYaratishning taxminiy qiymati | Tariflar jadvali— | Prognoz miqdoribir generatsiya uchun taxmin | Hisob birligi— | To‘lov Chiqish · Yaratishning taxminiy narxi · Faqat taqqoslash uchun taxmin $0.08 yaratishdan oldingi taxmin Bu taxmin qo‘shimcha to‘lov ham, tugallangan generatsiya uchun qat’iy tarif ham emas. |
Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. Summani band qilish va to‘lovni hisoblash tartibi →
Ma’lumot uchun tarif tafsilotlari
Modelning ma’lumot jadvallari usul tanlash, narx hisobi yoki to‘lovlarni o‘zgartirmaydi. Amaldagi to‘lovlar tanlangan Ailoot usuli tariflari bo‘yicha hisoblanadi.
Rasm narxining sozlamalari
Sozlamalar bo‘yicha narxlar
| Sozlama | To‘lovni hisoblash shartlari | To‘lov |
|---|---|---|
| SozlamaChiqish rasmi | To‘lovni hisoblash shartlariNarxlash varianti e’lon qilinmagan. | To‘lov Chiqish · Chiqish rasmi $0.08 rasm uchun Teng kuchli yozuvlar ayni to‘lovni tavsiflaydi; ular ikkinchi haqni qo‘shmaydi. |
So‘rov namunalari
Ailoot Ultra · Rasmlar
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-v3', '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-v3', '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-v3", "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");
Natijalarni olish va saqlash
Ailoot Ultra · Rasmlar
Har bir qaytarilgan rasmni yuklab oling yoki uning Base64 kontentini saqlang
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Barcha tayyor natijalarni saqlash
Har bir tayyor rasmni saqlang; har bir qaytarilgan URL dan kontentni oling yoki uning Base64 kontentini dekodlang.
Har bir data elementini va to‘liq foydalanish ma’lumotini saqlang; haqiqatda qaytarilgan barcha rasmlarni o‘z egaligingizga olib saqlang. URL yoki ID lar o‘ylab topilmasin.
Asl javobni tekshirish kerak bo‘lsa
Rasm yaratish yoki tahrirlash natijasini tekshirish kerak bo‘lsa, dastlabki operation_id/X-Client-Request-ID va qaytarilgan natija haqidagi ma’lumotlarni saqlang. Amalda qaytarilgan task_id yoki asset_id qiymatlari yordamida media kutubxonasidan o‘zingizga tegishli mavjud natijalarni tiklang. Rasm yaratish/tahrirlash so‘rovini qayta yubormang va operation_id dan holatni davriy tekshirish uchun URL tuzmang.
Javob maydonlari
| Maydon | Tur |
|---|---|
Maydoncreated | Turinteger |
Maydondata[].url | Turstring |
Maydondata[].b64_json | Turbase64 string |
Maydonusage | Turobject |
Taxalluslar
Model taxalluslari
Ailoot Ultra recraft/recraft-v3
Usul yo‘llari taxalluslari
/v1/images
Chaqirish uchun tegishli ID lar
FAQ · Recraft: Recraft V3
- Qanday kirish ma’lumotlari va natijalar mavjud?
POST /v1/images/generations·recraft/recraft-v3:text,image→image- So‘rov qaysi maydonlardan foydalanadi?
POST /v1/images/generations·recraft/recraft-v3:model,prompt,n,aspect_ratio,input_references- Qanday cheklovlar amal qiladi?
POST /v1/images/generations·recraft/recraft-v3:n.minimum:1;n.maximum:6