kling-sdk
Version:
Node.js SDK for Kling AI API
325 lines (256 loc) • 8.12 kB
Markdown
# Kling AI SDK
Node.js SDK for Kling AI API,支持可灵AI平台的各种API接口调用。
## 安装
```bash
npm install kling-sdk
```
## 使用方法
### 1. 初始化客户端
```javascript
const { KlingClient } = require('kling-sdk');
const client = new KlingClient({
accessKey: '您的Access Key',
secretKey: '您的Secret Key'
});
```
### 2. 查询账号资源包
```javascript
async function queryResourcePacks() {
try {
const now = Date.now();
const oneMonthAgo = now - 30 * 24 * 60 * 60 * 1000;
const result = await client.getResourcePacks({
start_time: oneMonthAgo, // 开始时间(毫秒时间戳)
end_time: now, // 结束时间(毫秒时间戳)
// resource_pack_name: '可选参数-资源包名称'
});
console.log('资源包列表:', result.data.resource_pack_subscribe_infos);
} catch (error) {
console.error('查询失败:', error);
}
}
```
### 3. 图像生成
```javascript
async function generateImage() {
try {
// 文本生成图像
const result = await client.createImageGeneration({
model_name: 'kling-v1-5',
prompt: '一只可爱的柴犬坐在花园里,阳光明媚',
negative_prompt: '模糊, 扭曲, 低质量',
n: 1, // 生成图片数量
aspect_ratio: '1:1' // 图片宽高比
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getImageGenerationTask(result.data.task_id);
if (taskDetail.data.task_status === 'succeed') {
console.log('生成的图片:', taskDetail.data.task_result.images);
}
} catch (error) {
console.error('生成失败:', error);
}
}
```
### 4. 虚拟试穿
```javascript
const fs = require('fs');
// 将本地图片转为Base64
function imageToBase64(imagePath) {
const image = fs.readFileSync(imagePath);
return Buffer.from(image).toString('base64');
}
async function virtualTryOn() {
try {
const result = await client.createVirtualTryOn({
model_name: 'kolors-virtual-try-on-v1',
human_image: imageToBase64('person.jpg'), // 或使用URL
cloth_image: imageToBase64('cloth.jpg'), // 或使用URL
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getVirtualTryOnTask(result.data.task_id);
if (taskDetail.data.task_status === 'succeed') {
console.log('试穿结果:', taskDetail.data.task_result.images);
}
} catch (error) {
console.error('试穿失败:', error);
}
}
```
### 5. 文生视频
```javascript
async function text2Video() {
try {
const result = await client.createText2Video({
model_name: 'kling-v1-6',
prompt: '一只可爱的柴犬在草地上奔跑,阳光灿烂',
negative_prompt: '模糊, 扭曲, 低质量',
mode: 'pro', // 高品质模式
aspect_ratio: '16:9',
duration: '5', // 5秒视频
camera_control: {
type: 'forward_up' // 镜头前进并上仰
}
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getText2VideoTask({ task_id: result.data.task_id });
if (taskDetail.data.task_status === 'succeed') {
console.log('生成的视频:', taskDetail.data.task_result.videos);
}
} catch (error) {
console.error('生成失败:', error);
}
}
```
### 6. 图生视频
```javascript
async function image2Video() {
try {
const result = await client.createImage2Video({
model_name: 'kling-v1-6',
image: imageToBase64('source.jpg'), // 或使用URL
prompt: '使图片中的人物动起来',
mode: 'pro',
duration: '5'
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getImage2VideoTask({ task_id: result.data.task_id });
if (taskDetail.data.task_status === 'succeed') {
console.log('生成的视频:', taskDetail.data.task_result.videos);
}
} catch (error) {
console.error('生成失败:', error);
}
}
```
### 7. 视频延长
```javascript
async function extendVideo() {
try {
// 需要一个已有的视频ID
const videoId = '已有视频ID';
const result = await client.createVideoExtend({
video_id: videoId,
prompt: '继续展示柴犬在草地上奔跑',
cfg_scale: 0.7
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getVideoExtendTask(result.data.task_id);
if (taskDetail.data.task_status === 'succeed') {
console.log('延长后的视频:', taskDetail.data.task_result.videos);
}
} catch (error) {
console.error('延长失败:', error);
}
}
```
### 8. 视频特效
```javascript
async function videoEffects() {
try {
// 单图特效
const result = await client.createVideoEffects({
effect_scene: 'fuzzyfuzzy', // 快来惹毛我特效
input: {
model_name: 'kling-v1-6',
image: imageToBase64('person.jpg'), // 或使用URL
duration: '5'
}
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getVideoEffectsTask({ task_id: result.data.task_id });
if (taskDetail.data.task_status === 'succeed') {
console.log('特效视频:', taskDetail.data.task_result.videos);
}
} catch (error) {
console.error('特效失败:', error);
}
}
```
### 9. 对口型
```javascript
async function lipSync() {
try {
// 需要一个已有的视频ID
const videoId = '已有视频ID';
const result = await client.createLipSync({
input: {
video_id: videoId,
mode: 'text2video',
text: '你好,这是一段测试文本',
voice_id: 'zh_female_qingxin',
voice_language: 'zh'
}
});
console.log('任务ID:', result.data.task_id);
// 查询任务状态
const taskDetail = await client.getLipSyncTask(result.data.task_id);
if (taskDetail.data.task_status === 'succeed') {
console.log('对口型视频:', taskDetail.data.task_result.videos);
}
} catch (error) {
console.error('对口型失败:', error);
}
}
```
## 开发和使用
1. 克隆代码库并安装依赖
```bash
git clone <repository-url>
cd kling-sdk
npm install
```
2. 构建SDK
```bash
npm run build
```
3. 运行示例
```bash
# 先修改examples目录下的示例文件中的密钥
npm run start:example
```
## 支持的API
SDK支持以下可灵AI平台的API:
1. **账号信息查询**: 查询账号下资源包列表及余量
2. **图像生成**: 支持文本生成图像和图像参考生成
3. **虚拟试穿**: 上传人物图片和服饰图片,实现虚拟试穿
4. **文生视频**: 通过文本描述生成视频
5. **图生视频**: 将静态图片转换为动态视频
6. **视频延长**: 对现有视频进行延长
7. **视频特效**: 包括单图特效和双人互动特效
8. **对口型**: 使视频中的人物说出指定文本或音频内容
## 常见问题
### 1. 鉴权失败
如果遇到以下错误:
```
查询失败: Error: API错误 (401, 1002): Auth failed
```
可能的原因:
- Access Key或Secret Key不正确
- JWT Token格式或签名算法不匹配
- Token已过期
解决方法:
- 检查密钥是否正确
- 确保JWT签名算法为HS256
- 检查系统时间是否准确
### 2. 请求速率限制
API有QPS限制(QPS<=1),如果请求过快会返回错误:
```
API错误 (429, 1302): Request too fast
```
解决方法:
- 减少API调用频率
- 实现请求队列,控制调用间隔
## 更多示例
请查看 `examples` 目录中的示例代码。
## 注意事项
- API调用需要身份验证,请确保您已获取正确的Access Key和Secret Key
- 请控制请求速率(QPS<=1),避免触发API限流策略
- 资源包余量统计可能有12小时的延迟
- 生成的图片和视频会在30天后被清理,请及时转存