คุณสามารถส่งไฟล์รูปภาพหรือไฟล์ Zip ผ่านโปรแกรมภายนอกเพื่อเชื่อมต่อระบบหั่นภาพ (Split) และบีบอัดไฟล์ (Compress to WebP 80%) ได้โดยอัตโนมัติ โดยระบบจะส่งไฟล์ Zip ผลลัพธ์ที่ปรับแต่งแล้วกลับไปให้ทันที
🌐 Base URL: https://999.kairew.co — ทุก Request ต้องมี Header x-api-key เสมอ
| Header Key | Value | คำอธิบาย |
|---|---|---|
| x-api-key | xxxxxxx | คีย์สำหรับเข้าใช้งานติดต่อแอดมิน |
| Content-Type | multipart/form-data | ต้องระบุประเภทเป็นฟอร์มข้อมูลแบบไฟล์ |
| Field Name | Type | Required | คำอธิบาย |
|---|---|---|---|
| uploadType | string | Optional | ระบุ zip (เริ่มต้น), img (อัปโหลดรูปภาพหลายๆ ไฟล์) หรือ url_image (อัปโหลดลิงก์รูปภาพ) |
| mangaUrls | string | กรณี url_image | ลิงก์รูปภาพเรียงบรรทัดละ 1 ลิงก์ (Newline-separated URLs) |
| referral | string | Optional | ใช้เฉพาะกรณี url_image เพื่อกำหนด HTTP Referer Header ป้องกันบอทตรวจจับหรือบล็อกของเว็บเซิร์ฟเวอร์มังงะต้นทาง |
| mangaZip | file | กรณี zip | ไฟล์ .zip ต้นฉบับที่รวบรวมภาพการ์ตูนไว้ภายใน |
| mangaImages | file array | กรณี img | ไฟล์รูปภาพทีละหลายไฟล์ส่งพร้อมกัน (รองรับสูงสุด 2000 ภาพ) |
| authorName | string | Optional | ชื่อผู้ส่งงาน/สถิติ ค่าเริ่มต้นคือ External_API |
| responseType | string | Optional | รูปแบบการรับผลลัพธ์:
|
| mangaName | string | Optional | ชื่อเรื่องมังงะ (ภาษาไทย/อังกฤษ) เพื่อนำใช้ในการตั้งชื่อไฟล์ Zip ผลลัพธ์แบบไดนามิก |
| chapterNumber | string | Optional | หมายเลขตอน (เช่น 1110 หรือ 10.5) เพื่อใช้ประกอบตั้งชื่อไฟล์ Zip |
| maxSplitHeight | number / string | Optional | ความสูงสูงสุดของภาพในการหั่นรูปแนวยาว (หน่วยเป็นพิกเซล PX) ค่าเริ่มต้นคือ 8000 |
| ☁️ S3 Upload Parameters (ใช้เมื่อ responseType=s3 เท่านั้น) | |||
| s3AccessKeyId | string | บังคับ (s3) | AWS Access Key ID เช่น AKIAXXXXXXXXXXXXXXXX |
| s3SecretAccessKey | string | บังคับ (s3) | AWS Secret Access Key |
| s3Bucket | string | บังคับ (s3) | ชื่อ S3 Bucket เช่น my-manga-bucket |
| s3Region | string | Optional | AWS Region ค่าเริ่มต้น ap-southeast-1 (สำหรับ R2 ป้อน auto) |
| s3Endpoint | string | Optional | S3 endpoint URL (จำเป็นสำหรับ Cloudflare R2 / Custom S3) เช่น https://<account_id>.r2.cloudflarestorage.com |
| s3Prefix | string | Optional | Path prefix ใน Bucket เช่น OnePiece/ch_1110/ — ส่งผลให้ key ผลลัพธ์เป็น OnePiece/ch_1110/001_kairew.webp |
| customDomain | string | Optional | 🌐 ใช้กับ responseType=s3 เท่านั้น — แทน S3 URL ด้วย CloudFront หรือ CDN domain เช่น https://cdn.mysite.com → URL ผลลัพธ์: https://cdn.mysite.com/prefix/001_kairew.webp |
{
"success": true,
"jobId": "ext_...",
"responseType": "url",
"expiresIn": "30 minutes",
"expiresAt": "2026-06-29T11:00:00.000Z",
"images": [
"http://domain/outputs/api_temp_ext_xxx/001_kairew.webp",
"http://domain/outputs/api_temp_ext_xxx/002_kairew.webp"
]
}
curl -X POST https://999.kairew.co/api/external/optimize \ -H "x-api-key: xxxxxxx" \ -F "uploadType=zip" \ -F "mangaName=OnePiece" \ -F "chapterNumber=1110" \ -F "mangaZip=@/path/to/your_manga.zip" \ -o OnePiece_ch_1110_optimized.zip
import requests
url = "https://999.kairew.co/api/external/optimize"
headers = {
"x-api-key": "xxxxxxx"
}
files = {
"mangaZip": open("your_manga.zip", "rb")
}
data = {
"uploadType": "zip",
"authorName": "ExternalPython",
"mangaName": "OnePiece",
"chapterNumber": "1110"
}
response = requests.post(url, headers=headers, files=files, data=data)
if response.status_code == 200 and response.headers.get("Content-Type") == "application/zip":
with open("OnePiece_ch_1110_optimized.zip", "wb") as f:
f.write(response.content)
print("บันทึกไฟล์สำเร็จเรียบร้อย!")
else:
print("ข้อผิดพลาด:", response.json())
curl -X POST https://999.kairew.co/api/external/optimize \ -H "x-api-key: xxxxxxx" \ -F "uploadType=img" \ -F "mangaName=Naruto" \ -F "chapterNumber=700" \ -F "mangaImages=@/path/to/image01.jpg" \ -F "mangaImages=@/path/to/image02.png" \ -o Naruto_ch_700_optimized.zip
import requests
url = "https://999.kairew.co/api/external/optimize"
headers = {
"x-api-key": "xxxxxxx"
}
# ส่งรูปภาพหลายไฟล์พร้อมกันโดยผูกภายใต้คีย์ 'mangaImages' เดียวกัน
files = [
("mangaImages", ("image01.jpg", open("image01.jpg", "rb"), "image/jpeg")),
("mangaImages", ("image02.png", open("image02.png", "rb"), "image/png"))
]
data = {
"uploadType": "img",
"authorName": "ExternalPython",
"mangaName": "Naruto",
"chapterNumber": "700"
}
response = requests.post(url, headers=headers, files=files, data=data)
if response.status_code == 200 and response.headers.get("Content-Type") == "application/zip":
with open("Naruto_ch_700_optimized.zip", "wb") as f:
f.write(response.content)
print("บันทึกไฟล์สำเร็จเรียบร้อย!")
else:
print("ข้อผิดพลาด:", response.json())
curl -X POST https://999.kairew.co/api/external/optimize \ -H "x-api-key: xxxxxxx" \ -F "uploadType=url_image" \ -F "responseType=url" \ -F "mangaName=SoloLeveling" \ -F "chapterNumber=180" \ -F "referral=https://manga-site.com/chapter-180" \ -F "maxSplitHeight=8000" \ -F $'mangaUrls=https://cdn.manga-site.com/page001.jpg\nhttps://cdn.manga-site.com/page002.jpg'
import requests
url = "https://999.kairew.co/api/external/optimize"
headers = {"x-api-key": "xxxxxxx"}
image_urls = [
"https://cdn.manga-site.com/page001.jpg",
"https://cdn.manga-site.com/page002.jpg",
]
data = {
"uploadType": "url_image",
"responseType": "url",
"mangaName": "SoloLeveling",
"chapterNumber": "180",
"authorName": "ExternalPython",
"referral": "https://manga-site.com/chapter-180",
"maxSplitHeight": "8000",
"mangaUrls": "\n".join(image_urls)
}
response = requests.post(url, headers=headers, data=data)
print(response.json())