小K导航 API

AI 提示词反推 + 全视频解析服务 · 支持图片反推、视频文件反推、全平台视频直链解析。

图片反推 视频反推 全视频解析 平均响应 3 秒
登录后使用
计费说明
AI 反推接口
全视频解析 NEW
错误码
示例代码
在线调试

计费说明

本 API 平台采用「点数」作为计费单位,调用接口会消耗对应点数,点数通过充值获得。

计费规则

服务类型消耗点数说明
图片反推1 点 / 次上传图片,AI 生成可用于绘画的提示词,约 3-10 秒返回
视频反推2.8 点 / 秒上传视频文件(MP4/MOV/WEBM),AI 分析画面生成结构化提示词
全视频解析免费免费使用,需展示「小K导航赞助」水印
💡 关于"链接反推提示词":该功能已下线。如需对抖音/B站等平台的视频做提示词反推,请先将视频下载到本地,再通过 service=video 上传视频文件调用。
视频/链接反推计费公式
消耗点数=视频时长(秒)×2.8 点/秒
10 秒视频28 点
30 秒视频84 点
60 秒视频168 点
120 秒视频336 点
300 秒视频840 点
600 秒视频1680 点
💡 失败退款:调用失败(网络错误、上游服务异常)点数会自动退回,只对成功的调用扣费。

全视频解析的双模式

免费模式

免费使用

  • 不消耗点数
  • 返回 watermark 对象
  • 需在播放器叠加「小K导航赞助」水印
  • 通过品牌曝光换取免费流量
💡 当前接口状态:目前为免费模式,调用后需配合展示水印。

充值套餐

尝鲜版
10
1000 点
≈ 1000 次图片反推
≈ 357 秒视频反推
标准版
50
5000 点
🎁 赠送 500 点
合计 5500 点
≈ 1964 秒视频反推
专业版
100
10000 点
🎁 赠送 2000 点
合计 12000 点
≈ 4286 秒视频反推
企业版
500
50000 点
🎁 赠送 15000 点
合计 65000 点
≈ 23214 秒视频反推

立即充值

常见问题

Q:点数会过期吗?
A:不会。充值后的点数永久有效,用完为止。

Q:调用失败会扣点吗?
A:全视频解析失败不扣点;视频反推如果提交失败会自动退回。

Q:视频反推支持传链接吗?
A:不支持。请下载视频后通过上传文件方式调用。

Q:视频时长怎么计算?
A:调用方需在请求中传入 duration(视频时长,秒)。我们的官方演示页面会自动用浏览器读取。

Q:全视频解析支持哪些平台?
A:支持抖音、B站、小红书、快手、微博、西瓜视频、TikTok、YouTube 等主流平台。

Q:有并发限制吗?
A:单账号默认每分钟 60 次调用上限。如需更高并发,请联系客服升级。

AI 反推接口

提供图片和视频的 AI 提示词反推能力,返回结构化提示词,可直接用于即梦 / Seedance / 可灵 / 豆包 等 AI 视频生成工具。

🔑 鉴权方式:所有接口都需要在 HTTP Header 中携带 X-API-Key,或使用 Authorization: Bearer sk_xxx

图片反推

上传图片,生成可用于 AI 绘画的提示词。

接口地址:https://www.4dj.net/api/v1/prompt.php
请求方式:POST
Content-Type:application/json

请求参数

参数名必填类型示例值 / 说明
service必填string固定值:image
image必填string图片 base64 data URL(data:image/jpeg;base64,...)或 https 图片地址

响应示例

JSON
{
  "code": 0,
  "message": "success",
  "data": {
    "prompt": "一幅写实风格的人物肖像,柔和的光线从左侧射入...",
    "credits_cost": 1,
    "credits_balance": 999
  }
}

视频反推 仅上传文件

上传视频文件,AI 分析画面并生成结构化视频提示词。本接口仅支持上传文件,不支持传链接。

⚠️ 链接反推已下线:请下载视频到本地后,通过 multipart/form-data 上传文件(字段名 video)。
接口地址:https://www.4dj.net/api/v1/prompt.php
请求方式:POST
Content-Type:multipart/form-data
鉴权 HEADER:X-API-Key: sk_xxxxx

请求参数(Form Data)

参数名必填类型示例值 / 说明
service必填string固定值:video
video必填file视频文件,支持 MP4 / MOV / WEBM / M4V / AVI / MKV,最大 500MB
duration必填int视频时长(秒),例如 30 秒的视频传 30
💡 时长如何获取:用浏览器 <video> 元素加载本地文件,读取 video.duration 后取整即可。

返回参数

字段名类型说明
codeint状态码,0 表示成功
data.task_idstring任务 ID,用于轮询查询结果
data.statusstring任务状态,初始为 pending
data.durationint视频时长(秒)
data.filenamestring上传的原始文件名
data.poll_urlstring轮询地址
data.credits_costint本次消耗点数
data.credits_balanceint当前剩余点数
data.billingobject计费明细

响应示例

JSON
{
  "code": 0,
  "message": "success",
  "data": {
    "task_id": "abcd1234-xxxx-xxxx-xxxx-xxxxxxxx",
    "status": "pending",
    "duration": 30,
    "filename": "my_video.mp4",
    "poll_url": "https://www.4dj.net/api/v1/prompt/status.php?task_id=abcd1234",
    "credits_cost": 84,
    "credits_balance": 916,
    "billing": {
      "unit_price": "2.8 点/秒",
      "duration": "30 秒",
      "total": "84 点"
    }
  }
}

查询任务状态

查询视频反推任务的处理状态和结果。

接口地址:https://www.4dj.net/api/v1/prompt/status.php
请求方式:GET

请求参数

参数名必填类型说明
task_id必填string提交任务时返回的 task_id

响应示例

JSON
{
  "code": 0,
  "message": "success",
  "data": {
    "status": "completed",
    "prompt": "一个女性角色,穿着黑色连衣裙..."
  }
}

全视频解析

粘贴抖音、B站、小红书、快手、微博、西瓜视频、TikTok、YouTube 等平台的分享链接,一键获取无水印视频直链。

🎁 免费模式:本接口当前免费使用,返回的数据中包含水印配置,请配合展示「小K导航赞助」水印。
ℹ️ 说明:本接口与上方"视频反推"不同。本接口返回的是视频直链(用于播放/下载),不做 AI 分析。

接口详情

接口地址:https://www.4dj.net/api/v1/video/parse.php
请求方式:POST
Content-Type:application/json

请求参数

参数名必填类型示例值 / 说明
url必填string视频分享链接或直链,例如 https://v.douyin.com/xxxxx/

返回参数

字段名类型说明
codeint状态码,0 表示成功
data.video_urlstring无水印视频直链
data.titlestring视频标题
data.cover_urlstring视频封面图
data.authorstring作者昵称
data.platformstring平台标识
data.is_freebool是否免费模式
data.watermarkobject\|null免费模式返回水印配置
data.credits_costint本次消耗点数
data.credits_balanceint当前剩余点数

响应示例

当前:免费模式

JSON
{
  "code": 0,
  "message": "success",
  "data": {
    "video_url": "https://v11-colds.douyinvod.com/xxx.mp4",
    "title": "视频标题",
    "cover_url": "https://p3-pc-sign.douyinpic.com/xxx.jpg",
    "author": "作者昵称",
    "platform": "douyin",
    "is_free": true,
    "watermark": {
      "text": "小K导航赞助",
      "link": "https://www.4dj.net",
      "logo": "https://www.4dj.net/assets/images/logo.png",
      "position": "top-left",
      "bg": "rgba(74,108,247,0.9)"
    },
    "credits_cost": 0,
    "credits_balance": 0,
    "notice": "本接口免费使用,条件是在播放器上展示「小K导航赞助」水印..."
  }
}

在线演示

点击下方按钮使用示例链接进行解析,演示效果:

点击上方按钮,使用示例链接解析

水印说明(免费模式)

免费模式下,接口返回的数据中包含 watermark 对象。接入方应当使用我们提供的水印组件在播放器上叠加水印。

水印组件接入(仅需 3 行代码)

HTML
<!-- 1. 引入水印组件 -->
<script src="https://www.4dj.net/assets/js/video-watermark.js"></script>

<!-- 2. 视频播放器 -->
<video id="player" controls playsinline></video>

<script>
fetch('https://www.4dj.net/api/v1/video/parse.php', {
    method: 'POST',
    headers: {
        'X-API-Key': 'sk_你的KEY',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ url: 'https://v.douyin.com/xxxxx/' })
})
.then(function(res) { return res.json(); })
.then(function(json) {
    if (json.code !== 0) { alert(json.message); return; }
    var player = document.getElementById('player');
    player.src = json.data.video_url;
    if (json.data.watermark && window.VideoWatermark) {
        VideoWatermark.attachFromResponse(player, json);
    }
});
</script>

水印配置项

字段类型说明
textstring水印文字,默认「小K导航赞助」
linkstring点击水印跳转地址
logostringLogo 图片 URL
positionstring位置:top-left(默认) / top-right / bottom-left / bottom-right
bgstring背景色

错误码参照

所有接口统一使用以下状态码。

codeHTTP说明处理建议
0200成功处理返回数据
400400参数错误检查请求体字段
401401API Key 无效检查 API Key 或重新生成
402402点数不足用户中心 充值
405405请求方法错误仅支持 POST
429429请求过于频繁降低请求频率
500500服务端错误稍后重试
502502上游服务异常稍后重试,点数自动退回

示例代码

以下为各语言的完整调用示例,复制后替换 YOUR_API_KEY 即可使用。

cURL

Shell
# 图片反推
curl -X POST "https://www.4dj.net/api/v1/prompt.php" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"service":"image","image":"data:image/jpeg;base64,..."}'

# 视频反推(上传文件,必须传 duration)
curl -X POST "https://www.4dj.net/api/v1/prompt.php" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "service=video" \
  -F "duration=30" \
  -F "video=@/path/to/your_video.mp4"

# 全视频解析
curl -X POST "https://www.4dj.net/api/v1/video/parse.php" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://v.douyin.com/xxxxx/"}'

# 查询任务状态
curl "https://www.4dj.net/api/v1/prompt/status.php?task_id=abcd1234" \
  -H "X-API-Key: YOUR_API_KEY"

Python

Python
import base64
import requests
import time
import subprocess

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://www.4dj.net/api/v1"
HEADERS = {"X-API-Key": API_KEY}


def get_video_duration(video_path):
    result = subprocess.run(
        ['ffprobe', '-v', 'error', '-show_entries', 'format=duration',
         '-of', 'default=noprint_wrappers=1:nokey=1', video_path],
        capture_output=True, text=True, timeout=10
    )
    return int(float(result.stdout.strip()))


def reverse_image(image_path):
    with open(image_path, "rb") as f:
        img_b64 = base64.b64encode(f.read()).decode()
    image_data = f"data:image/jpeg;base64,{img_b64}"
    resp = requests.post(
        f"{BASE_URL}/prompt.php",
        headers={**HEADERS, "Content-Type": "application/json"},
        json={"service": "image", "image": image_data},
        timeout=60,
    )
    data = resp.json()
    if data["code"] == 0:
        print("提示词:", data["data"]["prompt"])
        print("剩余点数:", data["data"]["credits_balance"])
    else:
        print("错误:", data["message"])


def reverse_video(video_path):
    duration = get_video_duration(video_path)
    if duration <= 0:
        print("无法获取视频时长")
        return
    print(f"视频时长:{duration} 秒,预计消耗 {round(duration * 2.8)} 点")
    with open(video_path, "rb") as f:
        files = {"video": (video_path.split("/")[-1], f, "video/mp4")}
        data = {"service": "video", "duration": duration}
        resp = requests.post(
            f"{BASE_URL}/prompt.php",
            headers=HEADERS, data=data, files=files, timeout=120,
        )
    result = resp.json()
    if result["code"] != 0:
        print("提交失败:", result["message"])
        return
    task_id = result["data"]["task_id"]
    print(f"任务已提交,task_id={task_id}")
    print(f"消耗点数:{result['data']['credits_cost']}")
    for i in range(60):
        time.sleep(5)
        r = requests.get(
            f"{BASE_URL}/prompt/status.php",
            headers=HEADERS, params={"task_id": task_id}, timeout=15,
        )
        res = r.json()
        status = res["data"]["status"]
        print(f"[{i+1}] 状态:{status}")
        if status == "completed":
            print("\n提示词:")
            print(res["data"]["prompt"])
            return
        elif status == "failed":
            print("任务失败:", res["data"].get("message"))
            return


def parse_video(url):
    resp = requests.post(
        f"{BASE_URL}/video/parse.php",
        headers={**HEADERS, "Content-Type": "application/json"},
        json={"url": url}, timeout=30,
    )
    data = resp.json()
    if data["code"] != 0:
        print("解析失败:", data["message"])
        return
    d = data["data"]
    print("视频直链:", d["video_url"])
    print("标题:", d["title"])


if __name__ == "__main__":
    # reverse_image("test.jpg")
    reverse_video("my_video.mp4")
    # parse_video("https://v.douyin.com/xxxxx/")

JavaScript

JavaScript
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://www.4dj.net/api/v1';

async function reverseVideo(file) {
    const duration = await new Promise((resolve, reject) => {
        const video = document.createElement('video');
        video.preload = 'metadata';
        video.onloadedmetadata = () => {
            resolve(Math.ceil(video.duration));
            URL.revokeObjectURL(video.src);
        };
        video.onerror = () => reject(new Error('无法读取视频时长'));
        video.src = URL.createObjectURL(file);
    });

    console.log(`视频时长:${duration} 秒,预计消耗 ${Math.round(duration * 2.8)} 点`);

    const formData = new FormData();
    formData.append('service', 'video');
    formData.append('video', file);
    formData.append('duration', duration);

    const submitResp = await fetch(`${BASE_URL}/prompt.php`, {
        method: 'POST',
        headers: { 'X-API-Key': API_KEY },
        body: formData,
    });

    const submitData = await submitResp.json();
    if (submitData.code !== 0) {
        alert('提交失败:' + submitData.message);
        return;
    }

    const taskId = submitData.data.task_id;
    console.log('task_id=' + taskId);
    console.log('消耗点数:' + submitData.data.credits_cost);

    for (let i = 0; i < 60; i++) {
        await new Promise(r => setTimeout(r, 5000));
        const pollResp = await fetch(
            `${BASE_URL}/prompt/status.php?task_id=${taskId}`,
            { headers: { 'X-API-Key': API_KEY } }
        );
        const pollData = await pollResp.json();
        console.log(`[${i + 1}] 状态:${pollData.data.status}`);
        if (pollData.data.status === 'completed') {
            console.log('提示词:', pollData.data.prompt);
            return;
        }
        if (pollData.data.status === 'failed') {
            console.error('任务失败:', pollData.data.message);
            return;
        }
    }
}

在线调试

在下方填入您的 API Key 和请求参数,可以直接在浏览器里测试接口。

准备好了吗?

立即获取 API Key,开始你的 AI 之旅

登录 / 注册