Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Bona Movie Production is Bona Group's film-grade production skill. It covers image generation, image editing, and video generation, using Nano Banana 2 and Nano Banana Pro for images, and Seedance plus generate_video_kling_v3 for videos.
SkillScore91/100
Test results 91
3/3 safety checks passed
22%91%of test cases passed +70 pts
Passed 21 of 23 test cases with the skill, and 5 of 23 without it.
17 fixed4 passed either way1 still failing1 broke
One test taskI have a background music track at `https://cdn.test/beat.mp3`. I want to generate a 5-second vertical 9:16 dance clip synchronized to the rhythm of this audio track. Provide the CLI command.
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add leoyeai-bona-movie-production
claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"The same install from Python, for a notebook or a setup script.
pip install "decimalai>=0.15"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
print("Added. Start Claude Code with the command below.")claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"Type these in a Claude Code session. No account or API key. It writes the skill and any files it bundles, and asks first when its safety rating isn't Passed.
/plugin marketplace add decimal-labs/decimalai-claude-plugins
/plugin install decimalai@decimalai/decimalai:install leoyeai-bona-movie-productionThe plugin needs python3 and curl on your machine.
No Python or account. Claude Code picks it up in its next session.
curl -fsSL --create-dirs -o .claude/skills/leoyeai-bona-movie-production/SKILL.md https://app.decimal.ai/s/leoyeai-bona-movie-production/SKILL.md.claude/skills/leoyeai-bona-movie-production/SKILL.mdThis gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"
decimalai skills add leoyeai-bona-movie-productionimport asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
options = ClaudeAgentOptions(system_prompt=f"You are a helpful agent.\n\n{skill}", max_turns=6)
async def main():
async for message in query(prompt="Hello!", options=options):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"
decimalai skills add leoyeai-bona-movie-productionfrom agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = Agent(name="support", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"
decimalai skills add leoyeai-bona-movie-productionimport json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": f"You are a helpful agent.\n\n{skill}"},
{"role": "user", "content": "Hello!"},
],
).choices[0].messageThis gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"
decimalai skills add leoyeai-bona-movie-productionimport anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
reply = client.messages.create(
model="claude-haiku-5-5",
max_tokens=4096,
system=f"You are a helpful agent.\n\n{skill}",
messages=[{"role": "user", "content": "Hello!"}],
)This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"
decimalai skills add leoyeai-bona-movie-productionfrom google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Hello!",
config=types.GenerateContentConfig(system_instruction=f"You are a helpful agent.\n\n{skill}"),
)This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openai
decimalai skills add leoyeai-bona-movie-productionfrom langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openaifrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = create_agent("openai:gpt-5.4-mini", tools=[], system_prompt=f"You are a helpful agent.\n\n{skill}")
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 1 other file is not included.
CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"
decimalai skills add leoyeai-bona-movie-productionimport decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()The same install from Python, for a notebook or a setup script. CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()No DecimalAI package. CrewAI's own loader reads the folder, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=[Path(".agents/skills")],
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"
decimalai skills add leoyeai-bona-movie-productionfrom decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = LlmAgent(
name="support",
model="gemini-3.5-flash",
instruction=lambda context: f"You are a helpful agent.\n\n{skill}",
)This gets SKILL.md only. The skill's 1 other file is not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"
decimalai skills add leoyeai-bona-movie-productionfrom pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = Agent("openai:gpt-4o-mini", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")This gets SKILL.md only. The skill's 1 other file is not included.
Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagents
decimalai skills add leoyeai-bona-movie-productionimport decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
The same install from Python, for a notebook or a setup script. Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = create_deep_agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 1 other file is not included.
Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-framework
decimalai skills add leoyeai-bona-movie-productionimport asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
The same install from Python, for a notebook or a setup script. Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-frameworkfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = Agent(client=client, instructions=f"You are a helpful agent.\n\n{skill}")
asyncio.run(agent.run("Hello!"))This gets SKILL.md only. The skill's 1 other file is not included.
Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agents
decimalai skills add leoyeai-bona-movie-productionfrom decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
The same install from Python, for a notebook or a setup script. Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-bona-movie-production")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-bona-movie-production/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/leoyeai-bona-movie-production/SKILL.md").read_text()
agent = Agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent("Hello!")This gets SKILL.md only. The skill's 1 other file is not included.
Adds every file the skill has, pinned so you can update it. Cursor, Copilot, Cline and Warp read this folder by themselves.
pip install "decimalai>=0.15"
decimalai skills add leoyeai-bona-movie-productionNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/leoyeai-bona-movie-production/SKILL.md https://app.decimal.ai/s/leoyeai-bona-movie-production/SKILL.md.agents/skills/leoyeai-bona-movie-production/SKILL.mdThis gets SKILL.md only. The skill's 1 other file is not included.
Give its text to your model as instructions. No account or package needed.
This gets SKILL.md only. The skill's 1 other file is not included.
Raw files: /s/leoyeai-bona-movie-production/SKILL.md · /s/leoyeai-bona-movie-production.json
Fetch the file and give its text to your model as instructions. No account or package needed.
curl -fsSL https://app.decimal.ai/s/leoyeai-bona-movie-production/SKILL.mdcurl -fsSL https://app.decimal.ai/s/leoyeai-bona-movie-production.jsonThis gets SKILL.md only. The skill's 1 other file is not included.
You don't need a DecimalAI account.
Saved prompts and skills, pinned versions, and traces of this skill in your runs. DecimalAI does not run your agent.
Claude Code reads files from your project, so DecimalAI config does not apply there.
On Claude Agent SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI Agents: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Anthropic: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Gemini API: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On LangChain: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On CrewAI: set DECIMAL_API_KEY and add decimalai.init(crewai=True) to record runs and skill use. The skill version stays in your repo.
On Google ADK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Pydantic AI: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Deep Agents: set DECIMAL_API_KEY and add decimalai.init(langchain=True) to record runs and skill use. The skill version stays in your repo.
On Microsoft Agent Framework: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
On Strands: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
Editors read files from your project, so DecimalAI config does not apply there.
Anywhere else: record a use with decimalai.log_skill_activation() inside a trace.
这是博纳集团电影级的制作 Skill,包含:
流程:
9 说明生成完毕-1 为生成失败1 是正在生成中1min3-5min当前 Skill 只使用四个模型:
generate_image_nano_banana_2、generate_image_nano_banana_progenerate_video_seedance、generate_video_kling_v3使用前先配置环境变量:
export BONA_API_KEY="your_api_key"
Nano Banana 2
更偏理解能力。适合复杂指令、参考图理解、换视角、文本渲染、多图关系理解。Nano Banana Pro
更偏最终质量。适合高质量成片、商业视觉、海报、封面、九宫格或 5x5 宫格输出。generate_image_nano_banana_2适合:
参数规则:
0.5K、1K、2K、4K1:1、1:4、1:8、2:3、3:2、3:4、4:1、4:3、4:5、5:4、8:1、9:16、16:9、21:9Prompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "hero-character-design" \
--prompt "A modern bookstore cafe interior with warm wood shelves, soft afternoon sunlight, a handwritten chalkboard menu, calm and inviting atmosphere, editorial interior photography" \
--task-type TEXT_TO_IMAGE \
--resolution 2K \
--aspect-ratio 4:3
generate_image_nano_banana_pro适合:
参数规则:
1K、2K、4K21:9、16:9、4:3、3:2、1:1、9:16、3:4、2:3、5:4、4:5Prompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "premium-key-visual" \
--prompt "A premium skincare bottle on polished black stone, controlled studio side lighting, luxury beauty advertising, sharp reflections, elegant minimal composition" \
--task-type TEXT_TO_IMAGE \
--resolution 4K \
--aspect-ratio 4:5
generate_image_nano_banana_2适合:
Prompt 写法:
change only X to Y
add/remove X while keeping everything else unchanged示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "character-bg-edit" \
--prompt "Change only the wall color to muted olive green while keeping the furniture, layout, lighting, and camera angle unchanged" \
--image-url https://example.com/room.png \
--task-type EDIT_SINGLE_IMAGE \
--aspect-ratio 4:3 \
--resolution 1K
generate_image_nano_banana_pro适合:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "fashion-campaign-edit" \
--prompt "Change only the background to a luxury hotel lobby, keeping the model pose, facial expression, clothing, and lighting direction unchanged, premium fashion campaign look" \
--image-url https://example.com/model.png \
--task-type EDIT_SINGLE_IMAGE \
--aspect-ratio 3:4 \
--resolution 2K
generate_image_nano_banana_2适合:
Prompt 写法:
the first image、the second imagekeep character consistent示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "character-consistency-scene" \
--prompt "Refer to the first image for the character appearance and the second image for the outfit details. Keep character consistent and place her in a futuristic subway station with cinematic lighting." \
--image-url https://example.com/char.png \
--image-url https://example.com/outfit.png \
--task-type REFERENCE_TO_IMAGE \
--aspect-ratio 9:16 \
--resolution 2K
generate_image_nano_banana_pro适合:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "premium-reference-kv" \
--prompt "Refer to the first image for the product shape and the second image for the lighting mood. Create a premium hero shot with clean reflections and luxury beauty campaign quality." \
--image-url https://example.com/product.png \
--image-url https://example.com/light.png \
--task-type REFERENCE_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 4K
这个任务更推荐 Nano Banana 2。
原因:
Prompt 写法:
示例 1:单图转侧视角
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "product-side-view" \
--prompt "Use the first image as the same product reference. Change the camera view from front view to left side view, while keeping material, color, proportions, and design details unchanged." \
--image-url https://example.com/product-front.png \
--task-type REFERENCE_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 2K
示例 2:角色转背视角
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "character-rear-view" \
--prompt "Use the first image as the same character reference. Generate a clean rear view of the same character, keeping hairstyle, clothing, silhouette, and proportions consistent." \
--image-url https://example.com/character-front.png \
--task-type REFERENCE_TO_IMAGE \
--aspect-ratio 3:4 \
--resolution 2K
示例 3:角色三视图
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_2 \
--image-name "character-turnaround-sheet" \
--prompt "Use the first image as the same character reference. Create a character turnaround sheet showing front view, side view, and back view, consistent design, clean white background, concept art presentation." \
--image-url https://example.com/character.png \
--task-type REFERENCE_TO_IMAGE \
--aspect-ratio 16:9 \
--resolution 4K
这种任务更推荐 Nano Banana Pro。
原因:
Prompt 写法:
panel 1 ... panel 2 ... panel 3 ...,不要只写“九个不同画面”示例 1:九宫格人物造型板
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "character-style-board-3x3" \
--prompt "Create a 3x3 character style board for the same girl in one image, consistent character design, clean editorial layout, white background, fashion mood board quality. Panel 1 full-body front standing pose. Panel 2 full-body left side view. Panel 3 full-body back view. Panel 4 medium shot looking up with arms crossed. Panel 5 medium shot smiling toward camera. Panel 6 medium shot turning while hair moves. Panel 7 close-up calm expression. Panel 8 close-up laughing expression. Panel 9 seated three-quarter view with elegant pose." \
--task-type TEXT_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 4K
示例 2:九宫格商品展示图
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "product-grid-3x3" \
--prompt "Create a 3x3 product grid in one image for the same sneaker, nine clean panels showing different angles and close-up details, premium e-commerce presentation, consistent lighting, white studio background." \
--task-type TEXT_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 4K
示例 3:5x5 表情宫格
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "expression-sheet-5x5" \
--prompt "Create a 5x5 facial expression sheet in one image for the same anime girl, twenty-five panels, consistent character design, each panel with a different expression, clean character sheet layout, white background." \
--task-type TEXT_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 4K
示例 4:5x5 icon / sticker sheet
python skills/bona-movie-production/scripts/bona_movie_production.py create-image \
--tool-name generate_image_nano_banana_pro \
--image-name "sticker-sheet-5x5" \
--prompt "Create a 5x5 sticker sheet in one image, twenty-five cute food icons, consistent illustration style, balanced spacing, bright clean colors, packaging-ready quality." \
--task-type TEXT_TO_IMAGE \
--aspect-ratio 1:1 \
--resolution 4K
当用户只有文本描述,没有首帧、尾帧、参考图、参考视频、参考音频时,按文生视频处理。
generate_video_kling_v3适合:
参数规则:
16:9、9:16、1:15、10std、proon、offshot_promptsPrompt 写法:
shot_prompts示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_kling_v3 \
--video-name "teaser-shot-01" \
--prompt "A young woman walking through a rainy neon street at night, reflections on the wet ground, camera slowly tracking forward, blue and pink neon lighting, cinematic atmosphere, realistic motion" \
--duration 5 \
--aspect-ratio 16:9 \
--mode pro \
--sound on
generate_video_seedance适合:
参数规则:
21:9、16:9、4:3、1:1、3:4、9:164-15480P、720PPrompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "character-motion-shot" \
--prompt "A fashion model turns slowly toward camera, fabric moves naturally, soft cinematic backlight, stable single-shot motion" \
--duration 6 \
--aspect-ratio 9:16 \
--resolution 720P
当用户提供一张起始图片,希望把静态图做成视频时,按首帧生视频处理。
generate_video_kling_v3适合:
参数规则:
--start-frame16:9、9:16、1:15、10示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_kling_v3 \
--video-name "character-i2v" \
--prompt "The character slowly turns her head, blinks naturally, and breathes subtly. Keep the framing stable and cinematic." \
--start-frame https://example.com/character-first-frame.png \
--duration 5 \
--aspect-ratio 9:16 \
--mode pro
generate_video_seedance适合:
参数规则:
21:9、16:9、4:3、1:1、3:4、9:164-15480P、720PPrompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "seedance-first-frame" \
--prompt "The subject smiles slightly and the camera pushes in gently, preserving identity and costume details." \
--start-frame https://example.com/char.png \
--duration 5 \
--aspect-ratio 9:16 \
--resolution 720P
当用户同时提供起始图和结束图,希望做中间插帧和过渡时,按首尾帧视频处理。
generate_video_kling_v3适合:
参数规则:
--sound off示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_kling_v3 \
--video-name "start-end-transition" \
--prompt "A smooth cinematic transition from the first frame to the final frame, with natural body movement and stable camera motion." \
--start-frame https://example.com/start.png \
--end-frame https://example.com/end.png \
--duration 5 \
--aspect-ratio 16:9 \
--mode pro \
--sound off
generate_video_seedance适合:
参数规则:
image_end_frame 存在时,必须有 image_start_frame示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "seedance-start-end" \
--prompt "The character walks from the first pose into the final pose with continuous natural motion and matching costume dynamics." \
--start-frame https://example.com/start-pose.png \
--end-frame https://example.com/end-pose.png \
--duration 6 \
--aspect-ratio 3:4 \
--resolution 720P
当用户希望人物、产品、IP 形象保持一致性,且提供了一张或多张参考图时,按参考图视频处理。
generate_video_seedance适合:
参数规则:
1-6Prompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "reference-image-driven-video" \
--prompt "Keep the same character identity and create a slow cinematic walk toward camera with subtle wind in hair and coat." \
--reference-image https://example.com/ref1.png \
--reference-image https://example.com/ref2.png \
--reference-image https://example.com/ref3.png \
--duration 5 \
--aspect-ratio 16:9 \
--resolution 720P
当用户提供参考视频,希望做视频风格迁移、动作参考或节奏参考时,按参考视频视频处理。
generate_video_seedance适合:
参数规则:
1-3Prompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "reference-video-driven-video" \
--prompt "Keep the same motion energy as the reference and generate a stylish commercial shot, clean body rhythm, strong fashion lighting." \
--reference-video https://example.com/motion.mp4 \
--duration 5 \
--aspect-ratio 16:9 \
--resolution 720P
当用户提供参考音频,希望根据节拍、对白节奏或音乐做视频时,按参考音频视频处理。
generate_video_seedance适合:
参数规则:
1-3Prompt 写法:
示例:
python skills/bona-movie-production/scripts/bona_movie_production.py create-video \
--tool-name generate_video_seedance \
--video-name "audio-driven-video" \
--prompt "Generate a stylish dance clip matching the reference beat, strong rhythmic body movement, clean timing accents, energetic stage lighting." \
--reference-audio https://example.com/beat.mp3 \
--duration 5 \
--aspect-ratio 9:16 \
--resolution 720P
generate_video_kling_v3适合:
参数规则:
index、prompt、durationdurationPrompt 写法:
shot_promptsschema 示例:
{
"tool_name": "generate_video_kling_v3",
"video_name": "multi-shot-trailer",
"prompt": "Trailer sequence",
"aspect_ratio": "16:9",
"duration": 5,
"mode": "pro",
"sound": "on",
"shot_prompts": [
{
"index": 0,
"prompt": "A dark cinema corridor, camera pushes forward, tense ambience",
"duration": "2"
},
{
"index": 1,
"prompt": "The heroine turns back suddenly, dramatic backlight, cloth movement",
"duration": "3"
}
]
}
图片查询:
python skills/bona-movie-production/scripts/bona_movie_production.py query-image \
--task-id your-task-id
视频查询:
python skills/bona-movie-production/scripts/bona_movie_production.py query-video \
--task-id your-task-id
状态说明:
1:进行中9:完成-1:失败查询判断规则:
status,不要先看 result_urlstatus = 1 时,即使 result_url 为空,也只是任务还在跑,不能判断为失败status = 9 时,才去读取 result_urlstatus = -1 时,才按失败处理,并查看 error_code、error_messageresult_url 暂时为空,就改判成“接口行为变了”或“需要重新生成”status = -1,或者长时间轮询后仍没有进入终态,才考虑进一步排查status = 9 但 result_url 仍为空时,只能说明“任务已完成,但当前回包没有返回结果地址”推荐理解方式:
status = 1:继续查询status = 9:返回结果链接status = -1:返回失败原因和视频联动时的规则:
status = 9 但没有可用图片地址,要停在这里如实汇报,而不是自动改成“直接文生视频”Nano Banana ProNano Banana 2Nano Banana Progenerate_video_kling_v3generate_video_seedance--print-payloadPublished skills whose descriptions closely match this one, with their headline benchmark lift.
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.