Klingai Batch ProcessingSAFE
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Overview
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
4f83675ca38aOBSERVED · 2026-10-09Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: klingai-batch-processing description: 'Process multiple video generation requests efficiently with Kling AI. Use when generating batches of videos or building content pipelines. Trigger with phrases like ''klingai batch'', ''kling ai bulk'', ''multiple videos klingai'', ''klingai parallel generation''. ' allowed-tools: Read, Write, Edit, Bash(npm:*), Grep version: 1.18.0 license: MIT author: Jeremy Longshore <[email protected]> tags: - saas - kling-ai - batch - pipelines compatibility: Designed for Claude Code --- # Kling AI Batch Processing ## Overview Generate multiple videos efficiently using controlled parallelism, rate-limit-aware submission, progress tracking, and result collection. All requests go through `https://api.klingai.com/v1`. ## Batch Submission with Rate Limiting ```python import jwt, time, os, requests BASE = "https://api.klingai.com/v1" def get_headers(): ak, sk = os.environ["KLING_ACCESS_KEY"], os.environ["KLING_SECRET_KEY"] token = jwt.encode( {"iss": ak, "exp": int(time.time()) + 1800, "nbf": int(time.time()) - 5}, sk, algorithm="HS256", headers={"alg": "HS256", "typ": "JWT"} ) return {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} def submit_batch(prompts, model="kling-v2-master", duration="5", mode="standard", max_concurrent=3, delay=2.0): """Submit batch with controlled concurrency and pacing.""" tasks = [] active = [] for i, prompt in enumerate(prompts): # Wait if at concurrency limit while len(active) >= max_concurrent: active = [t for t in active if not check_complete(t["task_id"])] if len(active) >= max_concurrent: time.sleep(5) response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={ "model_name": model, "prompt": prompt, "duration": duration, "mode": mode, }) data = response.json()["data"] task = {"task_id": data["task_id"], "prompt": prompt, "index": i} tasks.append(task) active.append(task) print(f"[{i+1}/{len(prompts)}] Submitted: {data['task_id']}") time.sleep(delay) # pace requests return tasks def check_complete(task_id): r = requests.get(f"{BASE}/videos/text2video/{task_id}", headers=get_headers()).json() return r["data"]["task_status"] in ("succeed", "failed") ``` ## Collect Results ```python def collect_results(tasks, timeout=600): """Wait for all tasks and collect results.""" results = {} start = time.monotonic() while len(results) < len(tasks) and time.monotonic() - start < timeout: for task in tasks: if task["task_id"] in results: continue r = requests.get( f"{BASE}/videos/text2video/{task['task_id']}", headers=get_headers() ).json() status = r["data"]["task_status"] if status == "succeed": results[task["task_id"]] = { "status": "succeed", "url": r["data"]["task_result"]["videos"][0]["url"], "prompt": task["prompt"], } elif status == "failed": results[task["task_id"]] = { "status": "failed", "error": r["data"].get("task_status_msg", "Unknown"), "prompt": task["prompt"], } if len(results) < len(tasks): time.sleep(15) return results ``` ## Async Batch with asyncio ```python import asyncio import aiohttp async def async_batch(prompts, max_concurrent=3): """Async batch processing with semaphore-controlled concurrency.""" semaphore = asyncio.Semaphore(max_concurrent) results = {} async def generate_one(prompt, index): async with semaphore: async with aiohttp.ClientSession() as session: # Submit async with session.post( f"{BASE}/videos/text2video", headers=get_headers(), json={"model_name": "kling-v2-master", "prompt": prompt, "duration": "5", "mode": "standard"}, ) as resp: data = (await resp.json())["data"] task_id = data["task_id"] # Poll while True: await asyncio.sleep(10) async with session.get( f"{BASE}/videos/text2video/{task_id}", headers=get_headers(), ) as resp: data = (await resp.json())["data"] if data["task_status"] == "succeed": results[index] = data["task_result"]["videos"][0]["url"] return elif data["task_status"] == "failed": results[index] = f"FAILED: {data.get('task_status_msg')}" return await asyncio.gather(*[generate_one(p, i) for i, p in enumerate(prompts)]) return results ``` ## Batch with Callbacks (No Polling) ```python def submit_batch_with_callbacks(prompts, callback_url): """Submit batch with webhook callbacks -- no polling needed.""" tasks = [] for prompt in prompts: r = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={ "model_name": "kling-v2-master", "prompt": prompt, "duration": "5", "mode": "standard", "callback_url": callback_url, }).json() tasks.append(r["data"]["task_id"]) time.sleep(2) # rate limit pacing return tasks ``` ## Cost Estimation Before Batch ```python def estimate_batch_cost(count, duration=5, mode="standard", audio=False): credits_map = {(5, "standard"): 10, (5
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (0)
No findings outside the package's declared scope.
Gates applied: no_behavioural_pass.
4f83675ca38afull audit observations/trust-audit/skill/jeremylongshore__klingai-batch-processing.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-09 | 4f83675ca38a | SAFE | B | 89 | first audit |
Questions
What does the Klingai Batch Processing skill do?
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Is Klingai Batch Processing safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Klingai Batch Processing access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does Klingai Batch Processing work with?
Its documentation mentions claude-code. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (4f83675ca38a), read on 2026-10-09. The repository is watched, and a new audit runs when it changes — this is the first audit.