Introduction
Welcome to the KittensAI.com platform API!
Each feature is designed to help our users more easily create kitten images with AI on KittensAI.com"s system.
To get your API key please go to account page.
Default Base URL
The default base URL for KittensAI.com API is: https://api.kittensai.com/v1/
Note: for security reasons, all KittensAI.com APIs are served over HTTPS only.
Authorization
To use the KittensAI.com API, you’ll need the API key that is linked to your account.
The authorization value should be send in Headers request.
Authorization: <api_key>
Create images
import requests
import time
import shutil
import json
headers = {"Authorization": "api_key"}
params = {
"terms": "rabbit going to school, ignorant style tattoo art",
"is_sfw": True,
"negative_terms": "duplicate, poorly drawn face, morbid, poorly drawn fingers, ugly, blurry, cartoon, disney, out of frame, cropped",
"dimension": "landscape",
"fix_faces": True,
"make_tile": False,
"upscale": False,
"threesixty": False,
}
base_api_url = "https://api.kittensai.com"
api_url = f"{base_api_url}/v1"
def download_file(url, local_filename):
url = f"{base_api_url}/{url}"
with requests.get(url, stream=True) as r:
with open(local_filename, "wb") as f:
shutil.copyfileobj(r.raw, f)
return local_filename
def convert_files(api_url, params, headers):
r = requests.post(
url=f"{api_url}/create-kitten/",
json=params,
headers=headers
)
return r.json()
def get_results(params):
if params.get("error"):
print(params)
return
r = requests.post(
url=f"{api_url}/results/",
data=params
)
data = r.json()
finished = data.get("finished")
while not finished:
if int(data.get("queue_count")) > 0:
print("queue: %s" % data.get("queue_count"))
time.sleep(5)
results = get_results(params)
results = json.dumps(results)
if results:
break
if finished:
for f in data.get("files"):
print(f.get("url"))
download_file("%s" % f.get("url"), "%s" % f.get("filename"))
return {"finished": "files downloaded"}
return r.json()
get_results(convert_files(api_url, params, headers))
Create image
curl -X POST \
https://api.kittensai.com/v1/create-kitten/ \
-H 'Authorization: api_key' \
-H 'Content-Type: application/json' \
-d '{
"terms": "rabbit going to school, ignorant style tattoo art",
"is_sfw": true,
"negative_terms": "duplicate, poorly drawn face, morbid, poorly drawn fingers, ugly, blurry, cartoon, disney, out of frame, cropped",
"dimension": "landscape",
"fix_faces": true,
"make_tile": false,
"upscale": false,
"threesixty": false
}'
Get created image URL
curl -X POST \
https://api.kittensai.com/v1/results/ \
-F 'uuid=response_uuid'
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ERROR | E_PARSE);
$headers = array("Authorization: api_key");
$file_list = ['/test_files/test.jpeg'];
$api_url = "https://api.kittensai.com/v1/edit-image/";
$results_url = "https://api.kittensai.com/v1/results/";
function download_file($url, $filename){
$curl = curl_init();
$url = "https://api.kittensai.com" . $url;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
$data = curl_exec($curl);
$error = curl_error($curl);
curl_close ($curl);
# Make sure destionation path exists
$destination_path = "/path/to/result/files/";
$destination_file = fopen($destination_path . $filename, "w+");
fwrite($destination_file, $data);
fclose($destination_file);
}
function convert_files($file_list, $headers, $api_url) {
$post_data['terms'] = 'rabbit going to school, ignorant style tattoo art';
$post_data['is_sfw'] = true;
$post_data['negative_terms'] = 'duplicate, poorly drawn face, morbid, poorly drawn fingers, ugly, blurry, cartoon, disney, out of frame, cropped';
$post_data['dimension'] = 'landscape';
$post_data['fix_faces'] = true;
$post_data['make_tile'] = false;
$post_data['upscale'] = false;
$post_data['threesixty'] = false;
foreach ($file_list as $index => $file) {
$post_data['file[' . $index . ']'] = curl_file_create(
realpath($file),
mime_content_type($file),
basename($file)
);
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $api_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($curl);
curl_close($curl);
return json_decode($content);
}
function get_results($params, $results_url, $headers) {
if ($params->error) {
print_r($params->error);
return;
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $results_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_decode(json_encode($params), true));
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$content = json_decode(curl_exec($curl));
curl_close($curl);
if ($content->finished == false) {
if (intval($content->queue_count) > 0) {
print_r("queue: $content->queue_count");
}
sleep(5);
$results = get_results($params, $results_url, $headers);
return;
}
foreach ($content->files as $f) {
download_file($f->url, $f->filename);
}
}
$resp = convert_files($file_list, $headers, $api_url);
get_results($resp, $results_url, $headers);
?>
const request = require('request');
const fs = require('fs');
let file_list = ['/test_files/sala.png']
const api_url = 'https://api.kittensai.com/v1/create-kitten/'
const results_url = 'https://api.kittensai.com/v1/results/'
function convertFiles(file_list) {
let data = {
"terms": "rabbit going to school, ignorant style tattoo art",
"is_sfw": true,
"negative_terms": "duplicate, poorly drawn face, morbid, poorly drawn fingers, ugly, blurry, cartoon, disney, out of frame, cropped",
"dimension": "landscape",
"fix_faces": true,
"make_tile": false,
"upscale": false,
"threesixty": false,
};
for (var i = 0; i < file_list.length; i++) {
formData['files'] = fs.createReadStream(file_list[i]);
}
request({
url: api_url,
method: 'post',
json: data,
headers: {
"Authorization": "api_key",
"Content-Type": "application/json",
}
}, function (err, res, body) {
if (err) {
console.error(err);
return err;
}
getResults(JSON.parse(body));
});
}
function getResults(data) {
if (data.error) {
console.error(data);
return data.error;
}
request({
url: results_url,
method: 'post',
formData: data
}, function (e, r, body) {
response = JSON.parse(body);
console.log(response);
if (!response.finished) {
setTimeout(
function () {
getResults(data);
}, 1000
);
}
console.log(response);
})
}
convertFiles(file_list);
Reponse
/path/to/local/result.jpg
HTTP Request
POST /create-kitten/
Query Parameters
Parameter | Type | Description | Example |
---|---|---|---|
is_sfw | Optional | Set "true" if the "terms" are for adult image content | true or false |
terms | Required | Tell the AI what image do you want to create. | rabbit going to school, ignorant style tattoo art |
negative_terms | Optional | Tell the AI what should be excluded. | duplicate, poorly drawn face, morbid, poorly drawn fingers, ugly, blurry, cartoon, disney,
out of frame, cropped |
dimension | Optional | Get portrait or landscape images, "portrait" value is default if empty or null. | portrait or landscape |
fix_faces | Optional | Let the AI to fix faces in the result images, False value is default if not send. | true or false |
make_tile | Optional | Set True if you want an image that can be used as pattern. | true or false |
upscale | Optional | The AI will return a bigger scaled up image. | true or false |
threesixty | Optional | The AI will return a 360º image. | true or false |