liblibai
TypeScript icon, indicating that this package has built-in type declarations

0.0.11 • Public • Published

LiblibAI JavaScript SDK

npm version License: MIT

Official JavaScript/TypeScript client for the LiblibAI API. This SDK provides a convenient way to interact with LiblibAI's image generation services. 更多模型参数信息请参考 LiblibAI API Documentation

Installation

# Using npm
npm install liblibai

# Using yarn
yarn add liblibai

# Using pnpm
pnpm add liblibai

Quick Start

// JavaScript
const { LiblibAI } = require('liblibai');

// Create a client instance
const client = new LiblibAI({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
});

// Generate an image
client.text2img({
  prompt: 'a beautiful sunset',
  width: 1024,
  height: 1024,
})
  .then(result => console.log(result))
  .catch(error => console.error(error));
// TypeScript
import { LiblibAI } from 'liblibai';

// Create a client instance
const client = new LiblibAI({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
});

// Generate an image
async function generateImage() {
  try {
    const result = await client.text2img({
      prompt: 'a beautiful sunset',
      width: 1024,
      height: 1024,
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

generateImage();

API Reference

Configuration

Create a new LiblibAI client with your API credentials:

const client = new LiblibAI({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
  baseURL: 'https://openapi.liblibai.cloud', // Optional, defaults to https://openapi.liblibai.cloud
});

Image Generation Methods

Text to Image

Generate an image from a text prompt:

const result = await client.text2img({
    "templateUuid": "e10adc3949ba59abbe56e057f20f883e",
    "generateParams": {
        "checkPointId": "0ea388c7eb854be3ba3c6f65aac6bfd3", // 底模 modelVersionUUID
        "prompt": "Asian portrait,A young woman wearing a green baseball cap,covering one eye with her hand", // 选填
        "negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),", //选填
        "sampler": 15, // 采样方法
        "steps": 20, // 采样步数
        "cfgScale": 7, // 提示词引导系数
        "width": 768, // 宽
        "height": 1024, // 高
        "imgCount": 1, // 图片数量    
        "randnSource": 0,  // 随机种子生成器 0 cpu,1 Gpu
        "seed": 2228967414, // 随机种子值,-1表示随机    
        "restoreFaces": 0,  // 面部修复,0关闭,1开启
        
        // Lora添加,最多5个
        "additionalNetwork": [
            {
                "modelId": "31360f2f031b4ff6b589412a52713fcf", //LoRA的模型版本versionuuid
                "weight": 0.3 // LoRA权重
            },
            {
                "modelId": "365e700254dd40bbb90d5e78c152ec7f", //LoRA的模型版本uuid
                "weight": 0.6 // LoRA权重
            }
        ],
    
        // 高分辨率修复
        "hiResFixInfo": {
            "hiresSteps": 20, // 高分辨率修复的重绘步数
            "hiresDenoisingStrength": 0.75, // 高分辨率修复的重绘幅度
            "upscaler": 10, // 放大算法模型枚举
            "resizedWidth": 1024,  // 放大后的宽度
            "resizedHeight": 1536  // 放大后的高度
        }
    }
});

Image to Image

Generate a new image based on an existing image and a text prompt:

const result = await client.img2img({
    "templateUuid": "9c7d531dc75f476aa833b3d452b8f7ad", // 预设参数模板ID
    "generateParams": {
        // 基础参数
        "checkPointId": "0ea388c7eb854be3ba3c6f65aac6bfd3", //底模
        "prompt": "1 girl wear sunglasses", //正向提示词
        "negativePrompt": //负向提示词
        "clipSkip": 2, // Clip跳过层
        "sampler": 15, //采样方法
        "steps": 20, // 采样步数
        "cfgScale": 7, // 提示词引导系数    
        "randnSource": 0, // 随机种子来源,0表示CPU,1表示GPU
        "seed": -1, // 随机种子值,-1表示随机
        "imgCount": 1, // 1到4
        "restoreFaces": 0,  // 面部修复,0关闭,1开启
        
        // 图像相关参数
        "sourceImage": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/7c1cc38e-522c-43fe-aca9-07d5420d743e.png",
        "resizeMode": 0, // 缩放模式, 0 拉伸,1 裁剪,2 填充 
        "resizedWidth": 1024, // 图像缩放后的宽度
        "resizedHeight": 1536, // 图像缩放后的高度
        "mode": 4, // 0图生图,4局部重绘
        "denoisingStrength": 0.75, // 重绘幅度
        
        // Lora添加,最多5个
        "additionalNetwork": [
            {
                "modelId": "31360f2f031b4ff6b589412a52713fcf", //LoRA的模型版本uuid
                "weight": 0.3 // LoRA权重
            },
            {
                "modelId": "365e700254dd40bbb90d5e78c152ec7f", //LoRA的模型版本uuid
                "weight": 0.6 // LoRA权重
            }
        ],
        
        // 局部重绘相关参数
        "inpaintParam": { 
            "maskImage": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/323fc358-618b-4c7d-b431-7d890209e5a5.png", // 蒙版地址
            "maskBlur": 4, // 蒙版模糊度
            "maskPadding": 32, //蒙版边缘预留像素,也称蒙版扩展量 
            "maskMode": 0, // 蒙版模式    
            "inpaintArea": 0, //重绘区域, 0重绘全图,1仅重绘蒙版区域
            "inpaintingFill": 1 //蒙版内容的填充模式
        },
    
        // controlNet,最多4组
        "controlNet": [
            {
                "unitOrder": 1, // 执行顺序
                "sourceImage": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/7c1cc38e-522c-43fe-aca9-07d5420d743e.png",
                "width": 1024, // 参考图宽度
                "height": 1536, // 参考图高度
                "preprocessor": 3, // 预处理器枚举值
                "annotationParameters": { // 预处理器参数, 不同预处理器不同,此处仅为示意
                    "depthLeres": { // 3 预处理器 对应的参数
                        "preprocessorResolution": 1024,
                        "removeNear": 0,
                        "removeBackground": 0
                    }
                },
                "model": "6349e9dae8814084bd9c1585d335c24c", // controlnet的模型
                "controlWeight": 1, // 控制权重
                "startingControlStep": 0, //开始控制步数
                "endingControlStep": 1, // 结束控制步数
                "pixelPerfect": 1, // 完美像素
                "controlMode": 0, // 控制模式 ,0 均衡,1 更注重提示词,2 更注重controlnet,
                "resizeMode": 1, // 缩放模式, 0 拉伸,1 裁剪,2 填充
                "maskImage": "" // 蒙版图
            }
        ]
    }
});

Ultra Models

For higher quality generations using the Ultra models:

// Text to Image Ultra
const result = await client.text2imgUltra({
    "templateUuid":"5d7e67009b344550bc1aa6ccbfa1d7f4",
    "generateParams":{
        "prompt":"1 girl,lotus leaf,masterpiece,best quality,finely detail,highres,8k,beautiful and aesthetic,no watermark,",
        "aspectRatio":"portrait",
        //或者配置imageSize设置具体宽高
        "imageSize": {
            "width": 768,
            "height": 1024
        },
        "imgCount":1,
        "steps": 30, // 采样步数,建议30
        
        //高级设置,可不填写
        "controlnet":{
            "controlType":"depth",
            "controlImage": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/7c1cc38e-522c-43fe-aca9-07d5420d743e.png",
        }        
    }
});

// Image to Image Ultra
const result = await client.img2imgUltra({
    "templateUuid":"5d7e67009b344550bc1aa6ccbfa1d7f4",
    "generateParams":{
        "prompt":"1 girl,lotus leaf,masterpiece,best quality,finely detail,highres,8k,beautiful and aesthetic,no watermark,",
        "aspectRatio":"portrait",
        //或者配置imageSize设置具体宽高
        "imageSize": {
            "width": 768,
            "height": 1024
        },
        "imgCount":1,
        "steps": 30, // 采样步数,建议30
        
        //高级设置,可不填写
        "controlnet":{
            "controlType":"depth",
            "controlImage": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/7c1cc38e-522c-43fe-aca9-07d5420d743e.png",
        }        
    }
});

ComfyUI Workflows

Run custom ComfyUI workflows:

const result = await client.runComfy({
    "templateUuid": "4df2efa0f18d46dc9758803e478eb51c",
    "generateParams": {
        "workflowUuid": "fa2e042e32fa4aabbbacc255b4ab2cca",
        "30":
        {
            "class_type": "LoadImage",
            "inputs":
            {
                "image": "https://liblibai-online.liblib.cloud/img/081e9f07d9bd4c2ba090efde163518f9/5fae2d9099c208487bc97867bece2bf3d904068e307c7bd30c646c9f3059af33.png"
            }
        },
        "31":
        {
            "class_type": "ImageScale",
            "inputs":
            {
                "width": 2048,
                "height": 2048
            }
        }
    }
});

File Upload

The SDK provides methods to upload files that can be used in generation tasks.

Upload a File

Upload a file to use in image generation tasks:

// In Node.js environment using Buffer
const fs = require('fs');
const path = require('path');

// Read a file into a Buffer
const imagePath = path.join(__dirname, 'my_image.jpg');
const fileBuffer = fs.readFileSync(imagePath);

// Upload the file with a custom filename
const uploadedUrl = await client.uploadFile(fileBuffer, 'my_uploaded_image.jpg');
console.log(`Uploaded file URL: ${uploadedUrl}`);

// Use the uploaded file in an img2img task
const result = await client.img2img({
  generateParams: {
    prompt: "Transform this into a beautiful oil painting",
    // Other parameters...
    sourceImage: uploadedUrl, // Use the uploaded image URL here
    ...
  }
});
// In browser environment using File/Blob
// Assuming you have a file input element in your HTML
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', async (event) => {
  const file = event.target.files[0];
  if (!file) return;
  
  try {
    // Upload the file
    const uploadedUrl = await client.uploadFile(file);
    console.log(`Uploaded file URL: ${uploadedUrl}`);
    
    // You can now use uploadedUrl in other API calls
  } catch (error) {
    console.error('Error uploading file:', error);
  }
});

Low-level API Methods

Submit a Request

Submit a generation request without waiting for the result:

const submitResult = await client.submitText2Img({
    "templateUuid": "e10adc3949ba59abbe56e057f20f883e", // 参数模板ID
    "generateParams": {
        // 基础参数
        "checkPointId": "0ea388c7eb854be3ba3c6f65aac6bfd3", // 底模 modelVersionUUID
        "vaeId": "",
        "prompt": "Asian portrait,A young woman wearing a green baseball cap,covering one eye with her hand", // 选填
        "negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),nsfw", //选填
        "clipSkip": 2,  // 1到12,正整数值
        "sampler": 15, // 采样方法
        "steps": 20, // 采样步数
        "cfgScale": 7, // 提示词引导系数
        "width": 768, // 宽
        "height": 1024, // 高
        "imgCount": 1, // 图片数量    
        "randnSource": 0,  // 随机种子生成器 0 cpu,1 Gpu
        "seed": -1, // 随机种子值,-1表示随机    
        "restoreFaces": 0,  // 面部修复,0关闭,1开启
        
        // Lora添加,最多5个
        "additionalNetwork": [],
    
        // 高分辨率修复
        "hiResFixInfo": {},   
       
        // controlNet,最多4组
        "controlNet": []
    }
});

const generateUuid = submitResult.generateUuid;

Check Generation Status Manually

Check the status of a generation:

let status
while (true) {
    status = await client.getStatus(generateUuid);
    if ([GenerateStatus.SUCCESS, GenerateStatus.FAILED, GenerateStatus.TIMEOUT].includes(status.generateStatus)) {
        break;
    }
    await new Promise(resolve => setTimeout(resolve, 3000));
}
console.log(status)

Wait for Results

Wait for a generation to complete:

const result = await client.waitResult(generateUuid);

For Comfy Task

const status = await client.getComfyStatus(generateUuid);
const result = await client.waitAppResult(generateUuid)

Error Handling

The SDK throws LiblibAIError for API-related errors:

try {
  const result = await client.text2img({
    prompt: 'a beautiful sunset',
  });
  console.log(result);
} catch (error) {
  if (error instanceof LiblibAIError) {
    console.error(`API Error (${error.statusCode}): ${error.message}`);
  } else {
    console.error('Unexpected error:', error);
  }
}

Generation Status Codes

The API uses the following status codes for generation requests:

enum GenerateStatus {
  PENDING = 1,
  PROCESSING = 2,
  GENERATED = 3,
  AUDITING = 4,
  SUCCESS = 5,
  FAILED = 6,
  TIMEOUT = 7
}

License

This SDK is distributed under the MIT License. See the LICENSE file for more information.

Support

For issues, questions, or feedback, please open an issue on our GitHub repository.

Package Sidebar

Install

npm i liblibai

Weekly Downloads

18

Version

0.0.11

License

MIT

Unpacked Size

77.1 kB

Total Files

21

Last publish

Collaborators

  • gravitywp