Skip to main content
Glama

Before & After Video

before_after_reel

Before and after video: animate a before→after transformation (e.g. empty room → staged, or a renovation, or a daylight photo → its Day to Night version with videoIntent day_to_night) into a social-ready reveal reel from two photos. Both photos are required. Only have one? Make the other first with a photo tool — virtual_staging (empty room → furnished), remove_furniture (furnished → empty), day_to_night, restyle_room, makeover_exterior and the other edit tools — and pass its result as afterImageUrl (or beforeImageUrl). Costs credits from the user's Pixly balance.

Input Schema

NameRequiredDescriptionDefault
formatNoVideo shape. original (default) keeps the photos' own shape; 9:16, 16:9 or 1:1 crop both photos, centred, to that shape first.original
listingIdNoA property folder (from list_listings or create_listing) to put the result in. Results of a photo that is already in a folder go there by themselves.
afterR2PathNoR2 path of the end frame — the alternative to afterImageUrl.
revealStyleNoHow the transformation is revealedsmooth
videoIntentNostaging_reveal: an empty room becoming a furnished one (or a renovation). day_to_night: Before is a daylight photo and After its dusk version (a Pixly Day to Night result and its original) — the video turns day into the lit evening; revealStyle does not apply.staging_reveal
beforeR2PathNoR2 path of the start frame — the alternative to beforeImageUrl.
afterImageUrlNoEnd frame (e.g. the staged result) — https URL or data: URI
beforeImageUrlNoStart frame (e.g. the empty room photo) — https URL or data: URI
durationSecondsNo

Output Schema

NameRequiredDescriptionDefault
jobsNoSeveral jobs at once (get_job with jobIds, or a plan's steps): each one's jobId, status and results
noteNo
typeNo
errorNo
jobIdYesPass to get_job to poll
quoteNoPresent when status is "awaiting_confirmation": nothing ran and nothing was charged yet — the price and settings the user is asked to confirm
statusYespending | processing | completed | failed — anything not completed/failed is still running
createdAtNo
resultUrlsNoPresent when completed; valid 7 days
completedAtNo
resultPathsNoStorage path of each result — pass one as r2Path (or beforeR2Path, a photos[] item) to run another tool on this result
creditsChargedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / listingId
      Added value: +{
      +  "description": "A property folder (from list_listings or create_listing) to put the result in. Results of a photo that is already in a folder go there by themselves.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs
      Added value: +{
      +  "description": "Several jobs at once (get_job with jobIds, or a plan's steps): each one's jobId, status and results",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / format / default
      Previous value: -"9:16"New value: +"original"
    • addedInput schema / properties / format / description
      Added value: +"Video shape. original (default) keeps the photos' own shape; 9:16, 16:9 or 1:1 crop both photos, centred, to that shape first."
    • changedInput schema / properties / format / enum
      Previous value: -[
      -  "9:16",
      -  "16:9",
      -  "1:1"
      -]New value: +[
      +  "original",
      +  "9:16",
      +  "16:9",
      +  "1:1"
      +]
  3. Changed1 schema field changed
    • addedOutput schema / properties / quote
      Added value: +{
      +  "description": "Present when status is \"awaiting_confirmation\": nothing ran and nothing was charged yet — the price and settings the user is asked to confirm",
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / resultPaths
      Added value: +{
      +  "description": "Storage path of each result — pass one as r2Path (or beforeR2Path, a photos[] item) to run another tool on this result",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / videoIntent / description
      Added value: +"staging_reveal: an empty room becoming a furnished one (or a renovation). day_to_night: Before is a daylight photo and After its dusk version (a Pixly Day to Night result and its original) — the video turns day into the lit evening; revealStyle does not apply."
    • changedInput schema / properties / videoIntent / enum
      Previous value: -[
      -  "staging_reveal",
      -  "staging_reveal_reverse",
      -  "construction_timelapse"
      -]New value: +[
      +  "staging_reveal",
      +  "staging_reveal_reverse",
      +  "construction_timelapse",
      +  "day_to_night"
      +]
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "completedAt": {
      +      "type": "string"
      +    },
      +    "createdAt": {
      +      "type": "string"
      +    },
      +    "creditsCharged": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "jobId": {
      +      "description": "Pass to get_job to poll",
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "resultUrls": {
      +      "description": "Present when completed; valid 7 days",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "description": "pending | processing | completed | failed — anything not completed/failed is still running",
      +      "type": "string"
      +    },
      +    "type": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "jobId",
      +    "status"
      +  ],
      +  "type": "object"
      +}
  7. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false). The description adds genuinely useful context beyond them: both photos are required, credits are deducted from the Pixly balance, and that revealStyle is ignored when videoIntent=day_to_night. It does not mention persistence or job/async behaviour, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the first clause, then the requirement and the fallback workflow. The long tool-list sentence is dense but earns its place as actionable routing. Slightly heavy, but nothing is truly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers inputs, cost, and the one-photo workaround. The only mild gap is durationSeconds, which has no described meaning in either the schema or the description, and no mention of synchronous vs. job-based completion for a paid video render.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the baseline is 3. The description adds meaning above the schema by clarifying the before/after position convention for day_to_night (Before = daylight, After = its dusk version) and by linking beforeImageUrl/afterImageUrl to the output of specific photo tools, which is not stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (animate) and resource (a social-ready reveal reel from two photos), with concrete examples of the transformation (empty room → staged, renovation, daylight → Day to Night). This clearly distinguishes it from the sibling before_after_image (image vs. video) without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Goes beyond stating what it does: it declares both photos are required and, for the one-photo case, names the exact alternative tools (virtual_staging, remove_furniture, day_to_night, restyle_room, makeover_exterior) and where to pass their output (afterImageUrl or beforeImageUrl). This is explicit when/how-to-chain guidance an agent can act on directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources