Skip to content
Back to skills

Airbnb Welcome Avatar

ASecurity

Turn authorized host or room stills and confirmed stay facts into one homestay welcome talking clip per still. This homestay welcome talking-clip studio writes a speakable check-in and amenity script, then animates each still into a 2–15s welcome or facility clip in stay order. Use it for homestay welcome videos, Airbnb check-in greetings, amenity explainers, and guest arrival talking clips that stay one photo, one clip.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentspythongoapi

Works with

  • terminal
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 13 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add beatra-ai/beatra-skills --skill airbnb-welcome-avatar --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Airbnb Welcome Avatar?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Airbnb Welcome Avatar
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/beatra-ai-airbnb-welcome-avatar/badge)](https://www.skillsdirectory.com/skills/beatra-ai-airbnb-welcome-avatar)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "airbnb-welcome-avatar"
description: "Turn authorized host or room stills and confirmed stay facts into one homestay welcome talking clip per still. This homestay welcome talking-clip studio writes a speakable check-in and amenity script, then animates each still into a 2–15s welcome or facility clip in stay order. Use it for homestay welcome videos, Airbnb check-in greetings, amenity explainers, and guest arrival talking clips that stay one photo, one clip."
---

# Homestay Welcome Talking Clips

Turn authorized stills and confirmed stay facts into one welcome or
amenity talking clip per still. Deliver the clips in stay order. Do not
stitch them.

## Scope and adjacent routes

Use this Skill when a host or property manager wants check-in welcome
and facility talking clips from stills they can authorize.

Route silent labeled room clips to `listing-room-video-pack`. Route a
generic presenter clip that is not a stay welcome to
`talking-avatar-video`. Route hiring videos to `hiring-avatar-studio`.
Route an overnight livestream avatar to `unattended-live-avatar`. Route
a buyer walk-in talking tour to `rental-walkin-avatar` when that
package is public.

## Inputs and defaults

The hard inputs are:

- at least one accessible still the host Agent can inspect — a host
  portrait for a talking welcome, or a room/amenity photo for a
  facility clip;
- confirmed stay facts the host supplied (Wi-Fi, parking, check-in
  window, house rules already written down);
- likeness and voice rights when a face or a cloned voice will appear.

Do not invent house rules, fees, lockbox codes, or amenities that are
not in the stills or the host's facts. Reuse language, stay order, and
a frozen `voice_id` from earlier clips for the same listing. Default to
one `beatra.videos.animate` call per still, `model: "auto"`, the still
as the strict first frame, and a source-derived aspect ratio. Ask only
for a missing hard input.

## Golden path

1. Inspect every still. Record MIME type, width, height, aspect ratio,
   byte size, and whether it has an alpha channel. Confirm likeness
   rights when a face is in frame. For a local file, upload only
   through the bundled client after inspection. Never pass a local path
   to a remote tool.
2. Write a speakable welcome or amenity script from the host's facts
   and what the stills actually show. Keep stay order. Do not invent
   rules. Deliver the free storyboard: one 2–15s slot per still, the
   spoken line for that slot, and the still it uses. Planning is not
   approval.
3. If the user already supplied an approved speech track per slot, skip
   synthesis and admit that audio for video. Otherwise call
   `beatra.models.list` with `{"capability":"text_to_speech"}` and
   `beatra.voices.list` when a catalog voice still needs to be selected.
   Never put a display name in `voice`. Show the speech production card
   before any speech `client_request_id` or `beatra.speech.synthesize`
   call. Submit exactly once per slot. Poll with `beatra.tasks.get`
   until terminal and read actual `task.output.audio.mime_type`,
   `duration_seconds`, and `size_bytes`. Never treat a script preview
   as the audio review.
4. Call `beatra.models.list` with `{"capability":"image_to_video"}`.
   Confirm a current card admits `[image, driving_audio]`. Compare
   every image fact and the real audio MIME, duration, and byte size
   with advertised constraints. Live driving-audio i2v SKUs are 2–15s.
   If a spoken slot is longer than the longest containable clip, split
   it into sequential containable segments. Each segment is its own
   paid speech call and its own paid video call, each with a new
   `client_request_id`. Do not shorten words to cheapen a clip. Do not
   silently change the audio format. If any required media fact is
   unavailable or incompatible, stop before video.
5. For each approved audio segment, show the video production card
   before any video `client_request_id` or `beatra.videos.animate`
   call: route `image_to_video`, tool `beatra.videos.animate`,
   approved still and speech artifacts, prompt, audio-led duration,
   resolution if set, output count, provisional live estimate, the
   fact that the 600-credit signup gift usually cannot start this
   video, and what happens if the balance is short. Do not submit
   until the user confirms they have topped up or already have enough
   credits. Approved narration does not authorize the video call.
6. Submit `beatra.videos.animate` exactly once per approved audio
   segment through bundled `scripts/mcp_client.py`. Do not configure a
   host Beatra Connector. Do not use REST/OpenAPI as a fallback. Poll
   each video task with `beatra.tasks.get` until terminal.
7. Deliver the clips in stay order with actual dimensions, duration,
   usage, and `billing.net_charged_credits`. Review likeness, spoken
   facts, and must-keep drift. Never invent a stitch, concat, or
   editor tool.

## Decisions that require confirmation

Planning, the stay-order storyboard, and live price quotes are free.
They are not approval.

Speech synthesis and video animate each need their own current
production card. Likeness and voice rights are a hard stop, not a
card. File access is not consent.

Before every paid call, show a current production card and wait:

1. Work — what will be made, in the user's words, and that this is a
   generate call.
2. Credits — the live price just read from the model card. Do not
   reuse a remembered number.
3. Count — one paid call per slot this turn. Each still is one video
   call after its speech call.
4. Identity — one new opaque `client_request_id` per call. If prompt,
   file, model, or controls change, mint a new ID.
5. If we stop here — the storyboard remains usable.
6. If the balance is insufficient — relay the official message and its
   top-up URL exactly. Do not retry until the user says they have
   topped up.

## Recovery

Each paid stage has its own frozen payload and ID. Recover a lost
create response only with that stage's identical payload. Recover a
lost task ID through `beatra.tasks.list` and `beatra.tasks.get`. Call
`beatra.tasks.cancel` only when the user asks to cancel that stage; on
409 keep polling. On `insufficient_balance`, keep the top-up URL
inside the balance error exact and retry the same frozen ID only after
the user says they have topped up. If a create returns no `task_id`,
do not poll; reconcile before minting a new ID. A changed script,
still, voice, duration, or model is new work and a new card.

## Account balance

When the user asks how many credits remain or whether a live estimate fits,
call `beatra.wallet.get`. When they ask what was charged, call
`beatra.wallet.ledger`. Both are read-only. Do not invent an account-balance or
top-up tool. Do not make `wallet.get` a required step before every paid submit.

When a model card comes back carrying a `top_up` block, relay its tiers as the
card lists them and in that order. Do not rank them, do not talk one down, and
do not pick one for the user. Which tier suits them is their call, made on
the wallet page with the whole list in front of them. Never quote a tier from
memory.

## References by task

- Read [Homestay welcome talking-clip workflow](references/workflow.md)
  for storyboard slots, speech admission, video admission, payloads,
  and review.
- Read [Installation and authentication](references/installation-and-auth.md)
  only when authorization needs attention.
- Read [Installation registration](references/installation-registration.md)
  for first-use registration.
- Read [Tasks and results](references/tasks-and-results.md) and
  [Billing, errors, and recovery](references/billing-errors-and-recovery.md)
  for task and billing facts.
- Read [Bundled MCP Client diagnostics](references/mcp-connection.md)
  when the bundled client cannot connect.
- Read [Automatic updates and safety](references/automatic-updates-and-safety.md)
  for update controls.
- Read [Uninstall and disconnect](references/uninstall-and-disconnect.md)
  only when the user asks to remove the package.

## Runtime and safe automatic updates

Use or invoke the bundled `scripts/mcp_client.py` for every Beatra
operation. Before ordinary commands it silently checks for a newer
release at most once every 24 hours per installation. Silent checks
are enabled by default, and a newer release installs without separate
confirmation.

The updater accepts only the fixed official discovery address and
immutable Beatra CDN path embedded for this package, channel, and
locale. It verifies the discovery data, archive, manifest, and every
file's size and checksum before replacement. It replaces only
package-owned files and rejects redirects, downgrades, wrong
package/channel/locale/version data, unexpected URLs, unsafe archives,
and files outside the owned destination.

Update checks, downloads, verification, replacement, rollback, and
recovery fail open: the current installation remains usable and the
user's original command continues. An update failure never authorizes
retrying a paid generation. The automatic-update choice persists
across later commands for this installation:

```text
python3 scripts/mcp_client.py update --auto off
python3 scripts/mcp_client.py update --auto on
python3 scripts/mcp_client.py update --check
```

Files in this skill

  • SKILL.md9.1 KB
  • manifest.json3.2 KB
  • references/automatic-updates-and-safety.md1.9 KB
  • references/billing-errors-and-recovery.md3.6 KB
  • references/installation-and-auth.md5.7 KB
  • references/installation-registration.md1 KB
  • references/mcp-connection.md1.2 KB
  • references/tasks-and-results.md2.2 KB
  • references/uninstall-and-disconnect.md2.7 KB
  • references/workflow.md2.8 KB
  • scripts/authorize.py21.8 KB
  • scripts/mcp_client.py60.1 KB
  • scripts/uninstall.py10.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…