From 4f2acb3ef70996c2b322a9209c269bc421df6e58 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Fri, 16 Oct 2026 12:29:04 +0300 Subject: [PATCH 1/8] docs: explain compose output-second billing in the smoke test advice Billing tracked compute for every job type, which is no longer true for compose: it bills per second of output with a 20 second minimum, animated graphics at 3x and frames above 1080p as several 1080p frames. Agents now know a low resolution draft saves nothing and that validate_compose quotes the price first. --- skills/rendobar/SKILL.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 01d7bfe..8550000 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -114,11 +114,20 @@ right.** - `dryRun` on `compress.target` reads like a free estimate. It is not: it runs real probe encodes and bills close to the full job. Do not sprinkle it in to "check cost first". -- Never smoke test with a long or high resolution source. Billing tracks the - compute a job actually uses, so a 2 hour 4K render costs real money and - proves nothing the 5 second sample does not. Current rates are on the - [pricing page](https://rendobar.com/pricing/), and the charge for a specific - job appears on the job once billing settles, shortly after it completes. +- Never smoke test with a long or high resolution source. A 2 hour 4K render + costs real money and proves nothing the 5 second sample does not. How a job + bills depends on its type: + - Most types bill the compute the job actually uses. + - `compose` bills per second of the video it returns, with a 20 second + minimum per render. Animated graphics (kinetic text, 3D cards, HTML or + Lottie motion) bill at 3x, and frames above 1080p count as several 1080p + frames. A low resolution draft costs the same per second as a 1080p final, so + keep test renders short rather than small. The `validate_compose` MCP tool + quotes the price before you render. + + Current rates are on the [pricing page](https://rendobar.com/pricing/), and + the charge for a specific job appears on the job once billing settles, + shortly after it completes. - Check the balance before a large batch: `client.billing.state()`. ## Common mistakes From 87450d75ffe7171629ab05ae4c225a12804b0fa7 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Fri, 16 Oct 2026 13:09:48 +0300 Subject: [PATCH 2/8] docs: compose frames above 1080p bill at 2x --- skills/rendobar/SKILL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 8550000..9003652 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -120,8 +120,8 @@ right.** - Most types bill the compute the job actually uses. - `compose` bills per second of the video it returns, with a 20 second minimum per render. Animated graphics (kinetic text, 3D cards, HTML or - Lottie motion) bill at 3x, and frames above 1080p count as several 1080p - frames. A low resolution draft costs the same per second as a 1080p final, so + Lottie motion) bill at 3x, and frames larger than 1080p (1440p, 4K) bill + at 2x. The two stack, so animated 4K bills at 6x. A low resolution draft costs the same per second as a 1080p final, so keep test renders short rather than small. The `validate_compose` MCP tool quotes the price before you render. From 127e6b17cf1e34806067530c2eb250225c25fc8f Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Sat, 17 Oct 2026 02:22:36 +0300 Subject: [PATCH 3/8] docs(rendobar): one compose rate and the plan frame limits --- skills/rendobar/SKILL.md | 19 +++++++++++++------ skills/rendobar/references/errors.md | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 9003652..89c786b 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -118,12 +118,19 @@ right.** costs real money and proves nothing the 5 second sample does not. How a job bills depends on its type: - Most types bill the compute the job actually uses. - - `compose` bills per second of the video it returns, with a 20 second - minimum per render. Animated graphics (kinetic text, 3D cards, HTML or - Lottie motion) bill at 3x, and frames larger than 1080p (1440p, 4K) bill - at 2x. The two stack, so animated 4K bills at 6x. A low resolution draft costs the same per second as a 1080p final, so - keep test renders short rather than small. The `validate_compose` MCP tool - quotes the price before you render. + - `compose` bills $0.04 per minute of the video it returns, counted by the + second, with a 15 second minimum per render. The rate is the same on every + plan, at every frame size and with animated graphics, so a low resolution + draft costs the same per second as a 1080p final. Keep test renders short + rather than small. + - What a plan can render differs. Pay-as-you-go renders compose up to 1080p + at 30 fps. Pro adds 4K and 60 fps. Animated graphics (kinetic text, 3D + cards, HTML or Lottie motion) above 1080p or 30 fps need an enterprise + plan. A video above the plan fails at submit with `PLAN_LIMIT`, and the + message names the plan that renders it. Tell the user, do not retry. + - The `validate_compose` MCP tool (or `POST /compose/validate`) runs the + same plan check for free and quotes the price as + `{ perMinuteUsd, minSeconds }` before you render. Current rates are on the [pricing page](https://rendobar.com/pricing/), and the charge for a specific job appears on the job once billing settles, diff --git a/skills/rendobar/references/errors.md b/skills/rendobar/references/errors.md index 3ed52fc..e10001b 100644 --- a/skills/rendobar/references/errors.md +++ b/skills/rendobar/references/errors.md @@ -69,7 +69,7 @@ must handle. | `UNAUTHORIZED` | 401 | Two distinct causes, check both before reporting: the key may not be reaching the process env, or the key itself may be invalid for this API (revoked, mistyped, or issued for another environment such as staging). Confirm which one rather than guessing. | | `INSUFFICIENT_CREDITS` | 402 | The org balance cannot cover the job. Tell the user to top up at https://app.rendobar.com/billing. Do not retry until they do. | | `FORBIDDEN` | 403 | The key's org cannot access this resource. | -| `PLAN_LIMIT` | 403 | A plan limit was hit (file size, concurrency, and similar). Surface it to the user, do not silently retry. | +| `PLAN_LIMIT` | 403 | A plan limit was hit (file size, job timeout, GPU FFmpeg on the free plan, a compose frame or frame rate above the plan, and similar). Surface it to the user, do not silently retry. | | `NOT_FOUND` | 404 | The resource does not exist or belongs to another org. Check the id. | | `CONFLICT` | 409 | State conflict, for example cancelling a job that already finished. | | `RATE_LIMITED` | 429 | Too many requests. Retry with exponential backoff and jitter. | From 7a8981d9b263ebb58a53c1c575d603ae6e91e831 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Sun, 18 Oct 2026 09:52:37 +0300 Subject: [PATCH 4/8] docs(rendobar): add the Studio plan to the compose frame limits Pro now renders compose up to 1440p, and the new Studio plan adds 4K and 60 fps. Retention notes name Studio next to Pro. --- skills/rendobar/SKILL.md | 8 ++++---- skills/rendobar/references/jobs.md | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 89c786b..0c7cbad 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -124,9 +124,9 @@ right.** draft costs the same per second as a 1080p final. Keep test renders short rather than small. - What a plan can render differs. Pay-as-you-go renders compose up to 1080p - at 30 fps. Pro adds 4K and 60 fps. Animated graphics (kinetic text, 3D - cards, HTML or Lottie motion) above 1080p or 30 fps need an enterprise - plan. A video above the plan fails at submit with `PLAN_LIMIT`, and the + at 30 fps. Pro adds 1440p, and Studio adds 4K and 60 fps. Animated + graphics (kinetic text, 3D cards, HTML or Lottie motion) above 1080p or + 30 fps need an enterprise plan. A video above the plan fails at submit with `PLAN_LIMIT`, and the message names the plan that renders it. Tell the user, do not retry. - The `validate_compose` MCP tool (or `POST /compose/validate`) runs the same plan check for free and quotes the price as @@ -166,7 +166,7 @@ bugs in both directions. | Field | Means | Typical | |---|---|---| | `output.expiresAt` | When this signed download URL stops working | 1 hour | -| `retentionExpiresAt` | When the stored file is actually deleted | Plan driven, 7 days on free, 30 on pro | +| `retentionExpiresAt` | When the stored file is actually deleted | Plan driven, 7 days on free, 30 on pro and studio | So a URL going stale does not mean the output is gone: re-fetch the job for a fresh URL. And a file still being in retention does not mean an old URL works. diff --git a/skills/rendobar/references/jobs.md b/skills/rendobar/references/jobs.md index 2786cdf..e3c896d 100644 --- a/skills/rendobar/references/jobs.md +++ b/skills/rendobar/references/jobs.md @@ -103,8 +103,9 @@ A completed job carries `output` with four fields: `output.expiresAt` is the URL's life, not the file's. The file itself is deleted at `retentionExpiresAt` on the job, which is plan driven (7 days on -free, 30 on pro). Re-fetch the job for a fresh URL rather than caching one, and -copy anything that must outlive retention into your own storage. +free, 30 on pro and studio). Re-fetch the job for a fresh URL rather than +caching one, and copy anything that must outlive retention into your own +storage. ## Response envelope From 6f4d4405c4a0984c5089ced7b95dae6641ed85e7 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Tue, 20 Oct 2026 13:19:33 +0300 Subject: [PATCH 5/8] docs(rendobar): correct what counts as compose animated graphics Animated graphics are split text, blur and scale entrances, text exits and 3D turns. HTML is not an asset and Lottie renders at the plan limit. Point agents at the searchable compose features page. --- skills/rendobar/SKILL.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 0c7cbad..0428c4a 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -125,12 +125,15 @@ right.** rather than small. - What a plan can render differs. Pay-as-you-go renders compose up to 1080p at 30 fps. Pro adds 1440p, and Studio adds 4K and 60 fps. Animated - graphics (kinetic text, 3D cards, HTML or Lottie motion) above 1080p or - 30 fps need an enterprise plan. A video above the plan fails at submit with `PLAN_LIMIT`, and the + graphics (text split into letters, words or lines, a `blur` or `scale` + entrance, any text exit, and 3D turns) above 1080p or 30 fps need an + enterprise plan. Lottie animations are not animated graphics. A video above the plan fails at submit with `PLAN_LIMIT`, and the message names the plan that renders it. Tell the user, do not retry. - The `validate_compose` MCP tool (or `POST /compose/validate`) runs the same plan check for free and quotes the price as `{ perMinuteUsd, minSeconds }` before you render. + - Every compose feature is listed with its JSON field and a rendered preview + at https://rendobar.com/compose/features/, searchable by name. Current rates are on the [pricing page](https://rendobar.com/pricing/), and the charge for a specific job appears on the job once billing settles, From 290ff12ca152054519b41d89fec58ae9a7975a94 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Tue, 20 Oct 2026 13:20:02 +0300 Subject: [PATCH 6/8] chore(rendobar): bump the plugin to 1.3.0 for the compose pricing update --- .claude-plugin/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index c8ad2e1..b7c32d1 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "rendobar", "description": "Process and generate media over one API: FFmpeg jobs, target size compression, captions, composition, and image generation, editing, and upscaling", - "version": "1.2.0", + "version": "1.3.0", "author": { "name": "Rendobar", "url": "https://rendobar.com" From 70c8834264b88d86ca86cab184aa78f664186f1e Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Tue, 20 Oct 2026 13:47:09 +0300 Subject: [PATCH 7/8] docs(rendobar): Studio keeps outputs 90 days, skill version 1.3.0 Studio output retention is 90 days in the plan config, not 30. The SKILL.md version matches the plugin manifest, the marketplace description lists composition like plugin.json, and one over-long line is wrapped like the rest of the list. --- .claude-plugin/marketplace.json | 2 +- skills/rendobar/SKILL.md | 7 ++++--- skills/rendobar/references/jobs.md | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4c10308..bd8b257 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ "plugins": [ { "name": "rendobar", - "description": "Integrate Rendobar's media processing and AI generation API: FFmpeg jobs, target size compression, captions, image generation, webhooks, and MCP", + "description": "Integrate Rendobar's media processing and AI generation API: FFmpeg jobs, target size compression, captions, composition, image generation, webhooks, and MCP", "source": "./", "category": "developer-tools", "homepage": "https://rendobar.com", diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 0428c4a..1a0afd8 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -4,7 +4,7 @@ description: "Use this skill whenever a task involves media files or media gener license: MIT metadata: author: rendobar - version: "1.2.0" + version: "1.3.0" source: https://github.com/rendobar/agent-skills homepage: https://rendobar.com --- @@ -127,7 +127,8 @@ right.** at 30 fps. Pro adds 1440p, and Studio adds 4K and 60 fps. Animated graphics (text split into letters, words or lines, a `blur` or `scale` entrance, any text exit, and 3D turns) above 1080p or 30 fps need an - enterprise plan. Lottie animations are not animated graphics. A video above the plan fails at submit with `PLAN_LIMIT`, and the + enterprise plan. Lottie animations are not animated graphics. A video + above the plan fails at submit with `PLAN_LIMIT`, and the message names the plan that renders it. Tell the user, do not retry. - The `validate_compose` MCP tool (or `POST /compose/validate`) runs the same plan check for free and quotes the price as @@ -169,7 +170,7 @@ bugs in both directions. | Field | Means | Typical | |---|---|---| | `output.expiresAt` | When this signed download URL stops working | 1 hour | -| `retentionExpiresAt` | When the stored file is actually deleted | Plan driven, 7 days on free, 30 on pro and studio | +| `retentionExpiresAt` | When the stored file is actually deleted | Plan driven, 7 days on free, 30 on pro, 90 on studio | So a URL going stale does not mean the output is gone: re-fetch the job for a fresh URL. And a file still being in retention does not mean an old URL works. diff --git a/skills/rendobar/references/jobs.md b/skills/rendobar/references/jobs.md index e3c896d..962de08 100644 --- a/skills/rendobar/references/jobs.md +++ b/skills/rendobar/references/jobs.md @@ -103,7 +103,7 @@ A completed job carries `output` with four fields: `output.expiresAt` is the URL's life, not the file's. The file itself is deleted at `retentionExpiresAt` on the job, which is plan driven (7 days on -free, 30 on pro and studio). Re-fetch the job for a fresh URL rather than +free, 30 on pro, 90 on studio). Re-fetch the job for a fresh URL rather than caching one, and copy anything that must outlive retention into your own storage. From 88e936a0bb0fc1fb21938f772f8709ce04f431f9 Mon Sep 17 00:00:00 2001 From: Abdelrahman Essawy Date: Tue, 20 Oct 2026 15:05:18 +0300 Subject: [PATCH 8/8] docs(rendobar): read upgradeTo, add FEATURE_NOT_ENABLED The compose plan note says Free instead of pay-as-you-go, tells agents to read upgradeTo on a PLAN_LIMIT problem rather than the message, and adds that animated text and 3D turns work only on top-level tracks and in overlays. The errors reference gains FEATURE_NOT_ENABLED and upgradeTo on PLAN_LIMIT, and RUNNER_TIMEOUT no longer reads as a plan timeout. --- skills/rendobar/SKILL.md | 14 +++++++++----- skills/rendobar/references/errors.md | 8 +++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/skills/rendobar/SKILL.md b/skills/rendobar/SKILL.md index 1a0afd8..1e491d2 100644 --- a/skills/rendobar/SKILL.md +++ b/skills/rendobar/SKILL.md @@ -123,13 +123,17 @@ right.** plan, at every frame size and with animated graphics, so a low resolution draft costs the same per second as a 1080p final. Keep test renders short rather than small. - - What a plan can render differs. Pay-as-you-go renders compose up to 1080p - at 30 fps. Pro adds 1440p, and Studio adds 4K and 60 fps. Animated + - What a plan can render differs. Free renders compose up to 1080p at + 30 fps. Pro adds 1440p, and Studio adds 4K and 60 fps. Animated graphics (text split into letters, words or lines, a `blur` or `scale` entrance, any text exit, and 3D turns) above 1080p or 30 fps need an - enterprise plan. Lottie animations are not animated graphics. A video - above the plan fails at submit with `PLAN_LIMIT`, and the - message names the plan that renders it. Tell the user, do not retry. + enterprise plan. They work only on top-level tracks and in `overlays`, + never inside a scene or a composition. Lottie animations are not + animated graphics. A video above the plan fails at submit with + `PLAN_LIMIT`. Read `upgradeTo` on the problem in `error.details`: + `"pro"` or `"studio"` names the plan that renders it, and `null` means + only an enterprise plan does. Do not parse the message. Tell the user, + do not retry. - The `validate_compose` MCP tool (or `POST /compose/validate`) runs the same plan check for free and quotes the price as `{ perMinuteUsd, minSeconds }` before you render. diff --git a/skills/rendobar/references/errors.md b/skills/rendobar/references/errors.md index e10001b..ad7edd3 100644 --- a/skills/rendobar/references/errors.md +++ b/skills/rendobar/references/errors.md @@ -66,22 +66,24 @@ must handle. |---|---|---| | `VALIDATION_ERROR` | 400 | The request body or params failed schema validation. Fix the payload. Re-read the type's schema at `GET /jobs/types/{type}/schema`. Do not retry unchanged. | | `INVALID_JOB_TYPE` | 400 | The type does not exist. Re-read the live catalog at `GET /jobs/types`. Never guess type names. | +| `FEATURE_NOT_ENABLED` | 400 | A compose job uses animated text or 3D turns, which are still rolling out and not enabled for this account. Tell the user. Offer to render without them, or point them to support for access. Do not retry unchanged. | | `UNAUTHORIZED` | 401 | Two distinct causes, check both before reporting: the key may not be reaching the process env, or the key itself may be invalid for this API (revoked, mistyped, or issued for another environment such as staging). Confirm which one rather than guessing. | | `INSUFFICIENT_CREDITS` | 402 | The org balance cannot cover the job. Tell the user to top up at https://app.rendobar.com/billing. Do not retry until they do. | | `FORBIDDEN` | 403 | The key's org cannot access this resource. | -| `PLAN_LIMIT` | 403 | A plan limit was hit (file size, job timeout, GPU FFmpeg on the free plan, a compose frame or frame rate above the plan, and similar). Surface it to the user, do not silently retry. | +| `PLAN_LIMIT` | 403 | A plan limit was hit (file size, job timeout, GPU FFmpeg on the free plan, a compose frame or frame rate above the plan, and similar). A compose or GPU refusal lists problems in `details`, each with `upgradeTo`: `"pro"` or `"studio"` for the cheapest plan that runs it, `null` when only an enterprise plan does. Read `upgradeTo`, not the message. Surface it to the user, do not silently retry. | | `NOT_FOUND` | 404 | The resource does not exist or belongs to another org. Check the id. | | `CONFLICT` | 409 | State conflict, for example cancelling a job that already finished. | | `RATE_LIMITED` | 429 | Too many requests. Retry with exponential backoff and jitter. | | `RUNNER_ERROR` | 502 | The processing backend failed. Safe to retry the job (use an `idempotencyKey`). | -| `RUNNER_TIMEOUT` | 504 | The job exceeded its timeout. Retrying the same input usually times out again, so reconsider the input or params. | +| `RUNNER_TIMEOUT` | 504 | A runner accepted the job but never started it, or lost the run. Not charged. A job that ran past its plan timeout fails with `JOB_TIMEOUT` instead, and retrying the same input usually times out again. | | `INTERNAL_ERROR` | 500 | Unexpected server error. Retry with backoff, then surface. | ## Rules of thumb - Retryable with backoff: `RATE_LIMITED`, `RUNNER_ERROR`, `INTERNAL_ERROR`. - Fix-then-retry: `VALIDATION_ERROR`, `INVALID_JOB_TYPE`, `UNAUTHORIZED`. -- User action required: `INSUFFICIENT_CREDITS`, `PLAN_LIMIT`. +- User action required: `INSUFFICIENT_CREDITS`, `PLAN_LIMIT`, + `FEATURE_NOT_ENABLED`. - For a failed job, do not apply these rules of thumb at all. Read `error.retryable` on the job, which is authoritative for that specific failure.