NAV
PuppiesAI.com
shell python php javascript

Introduction

Welcome to the PuppiesAI.com platform API!

Each feature is designed to help our users more easily create puppy images with AI on PuppiesAI.com"s system.

To get your API key please go to account page.

Default Base URL

The default base URL for PuppiesAI.com API is: https://api.puppiesai.com/v1/

Note: for security reasons, all PuppiesAI.com APIs are served over HTTPS only.

Authorization

To use the PuppiesAI.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.puppiesai.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-puppy/",
        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.puppiesai.com/v1/create-puppy/ \
  -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.puppiesai.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.puppiesai.com/v1/edit-image/";
$results_url = "https://api.puppiesai.com/v1/results/";

function download_file($url, $filename){
    $curl = curl_init();
    $url = "https://api.puppiesai.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.puppiesai.com/v1/create-puppy/'
const results_url = 'https://api.puppiesai.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-puppy/

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