Photo to Anime Skill
Overview
Turn a photo into anime, manga, comic, cartoon, watercolor, clay, or 3D character art then review likeness and style consistency across the set rather than assuming they are preserved, from inside Claude Code, Codex, or OpenClaw. The work is produced on the hosted, paid Beatra service
(mcp.beatra.ai).
This catalog entry is a reviewed pointer, not the executable package. It
contains no client code and performs no Beatra operation by itself. The package
it points to bundles three standard-library Python scripts that make network
calls, store a credential, and can replace their own files. Read
Install and
Security & Safety Notes before activating it.
| Pinned identity | Value |
|---|
| Package | ai-photo-restyler 0.1.4 |
| Archive | https://cdn.beatra.ai/agent-packages/ai-photo-restyler/v0.1.4/ai-photo-restyler-skill-0.1.4.zip |
| Archive SHA-256 | ac7e4070f7e931a095f55c19ee09adb4ba70f4880fb66dbfe755823e3bfa2449 |
| Source tree | beatra-ai/photo-to-anime-skill@87bc4c4 (full SHA 87bc4c4e993e1ab49ded9e065087c1796cb7cbe4) |
| License | MIT No Attribution (MIT-0) |
The archive holds regular files only (no symlinks, no executable bits, no
binaries). Confirm that with the inspect commands below. Every file must be
byte-identical to the source tree at the pinned commit.
When to Use This Skill
- Use when the user explicitly wants Photo to Anime work produced on Beatra and accepts that it is paid.
- Use when they have agreed to send prompts and any reference images to a third party.
- Do not use for local-only image editing or when no paid render was approved.
Install (pinned, verified, approved twice)
Step 1: Download and verify into a review directory
Explain that this downloads an external package from cdn.beatra.ai, then ask
for approval. Only after approval:
umask 077
review_dir="$(mktemp -d)"
cd "$review_dir" || exit 1
curl --connect-timeout 10 --max-time 60 -fsSO "https://cdn.beatra.ai/agent-packages/ai-photo-restyler/v0.1.4/ai-photo-restyler-skill-0.1.4.zip"
printf '%s %s\n' \
'ac7e4070f7e931a095f55c19ee09adb4ba70f4880fb66dbfe755823e3bfa2449' \
'ai-photo-restyler-skill-0.1.4.zip' | shasum -a 256 -c -
Stop if the check does not print OK. The expected digest comes from this
catalog entry, not from a file on the same CDN.
Step 2: Inspect before activation
Preflight all ZIP member names/modes/sizes before extraction. Reject traversal/absolute or out-of-package paths, duplicate/case-colliding entries, symlinks/devices/executable/binary files, and excessive count/expanded size. Extract only afterward into the fresh private directory; post-extraction checks do not prevent an escape.
unzip -l ai-photo-restyler-skill-0.1.4.zip
# Only after complete member preflight passes:
unzip -q ai-photo-restyler-skill-0.1.4.zip
find ai-photo-restyler -type l -print # expect no output
find ai-photo-restyler -type f -perm -111 -print # expect no output
grep -n '"auto_update": True' ai-photo-restyler/scripts/mcp_client.py
Confirm byte identity before activation with the public source tree (a second,
independent host):
git clone --quiet --filter=blob:none --no-checkout https://github.com/beatra-ai/photo-to-anime-skill.git src
git -C src checkout --quiet 87bc4c4e993e1ab49ded9e065087c1796cb7cbe4 -- skills/ai-photo-restyler
(cd ai-photo-restyler && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > archive.sha
(cd src/skills/ai-photo-restyler && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > tree.sha
cmp archive.sha tree.sha && echo IDENTICAL
Report to the user what the review found: SKILL.md, manifest.json, the
bundled Markdown references, and scripts/authorize.py,
scripts/mcp_client.py, scripts/uninstall.py (Python 3.10+, standard
library only, no dependency installation, no lifecycle hooks). Summarize the
network, credential, local-state, telemetry, and self-update behavior listed
under Security & Safety Notes.
Step 3: Copy in and disable self-update before any other command
Ask for a second, separate approval, because this changes agent
configuration. Then copy the reviewed tree to the host's skills directory
(Claude Code shown; use the equivalent path for other hosts) and immediately
turn off silent self-update for that exact path:
dest="$HOME/.claude/skills/ai-photo-restyler"
test ! -e "$dest" && test ! -L "$dest" || { echo "destination exists; stop and ask the user"; exit 1; }
cp -R ai-photo-restyler "$dest"
python3 "$dest/scripts/mcp_client.py" update --auto off
The last command must print
Automatic Beatra package updates are disabled. It writes only
~/.beatra/updates/<id>/state.json and makes no network request. Run it
before authorize.py, verify, tools, upload, or call: in this
pinned version self-update is on by default. The setting is keyed to the
resolved install path, so repeat it after moving or re-copying the directory.
Step 4: Authorize as its own decision
Authorization opens a browser sign-in and stores a bearer token. Ask first.
python3 "$dest/scripts/authorize.py"
Start a new agent session if the host discovers skills only at startup.
How It Works
- Read the installed package's
SKILL.md and its references; they define the
routes, payload shapes, and review loop.
- Use free, non-billable discovery first (
beatra.models.list, task list) to
read current model cards and credit estimates.
- Show the user a cost card for exactly one paid call: tool, model, estimate,
and which files will be uploaded. Wait for explicit approval. Planning or
"just do it" is not approval.
- Upload only files the user supplied and approved for this task, then submit
once with a stable
client_request_id and poll the returned task.
- Report the delivered artifact and
billing.net_charged_credits, review the
result with the user, and ask again before any further paid stage.
Examples
Free connection check (non-billable)
python3 "$HOME/.claude/skills/ai-photo-restyler/scripts/mcp_client.py" verify
One approved paid call
After the user approved the cost card for this exact payload, submit once with
a stable request id using the tool name from the installed SKILL.md. If the
response is lost, retry only with the same client_request_id and identical
arguments; never submit a replacement while the task is running.
Update
This entry does not endorse the package's silent self-update. Keep
update --auto off in place and do not run update --auto on or a bare
update without explicit approval.
To move to a newer version, repeat Steps 1 to 3 for that version in a new
review directory, verify its digest against the matching tree in beatra-ai/photo-to-anime-skill
(a version not listed in this entry has not been reviewed here), show the
user the file-level changes against the installed copy, and replace the
directory only after approval. update --check reports the available version
from beatra.ai without changing files.
Uninstall
dest="$HOME/.claude/skills/ai-photo-restyler"
python3 "$dest/scripts/uninstall.py" --dry-run
python3 "$dest/scripts/uninstall.py"
Read the JSON decision. disconnected means this was the last Beatra skill on
the device: the token was revoked (when revoked is true) and the files
credentials.json, installation.json, host.json, skills.json, and
registrations.json under ~/.beatra were removed. keep_connection means
another Beatra skill still uses the shared token, which stays. Then, after
confirming the path with the user, delete $dest.
uninstall.py does not remove ~/.beatra/updates/. When the decision is
disconnected and no other Beatra skill is installed, remove that directory
too; otherwise leave it. A token that could not be revoked expires after 15
days idle and can be revoked at once in the Beatra Console under Agents.
Best Practices
- ✅ Keep one approval per paid call, per upload set, and per install step.
- ✅ Report net charged credits from the terminal task, not the estimate.
- ❌ Do not re-enable self-update or install an unreviewed version silently.
- ❌ Do not print, paste, or move the token out of
~/.beatra/credentials.json.
- ❌ Do not retry a paid call with a new request ID after an uncertain response.
Limitations
- Requires a Beatra account, network access, Python 3.10+, and prepaid credits.
- Models, prices, schemas, and availability are controlled by Beatra and its
upstream model providers and can change; the service is provided as is.
- Outputs are probabilistic, not guaranteed unique or non-infringing, and need
human review before publication.
- This catalog entry reviews only the pinned archive above. A newer version is
a different review.
Security & Safety Notes
risk: critical is deliberate.
- Network. Authorization uses
api.beatra.ai; every tool call and upload
goes to mcp.beatra.ai. With self-update left on, the client also fetches
https://beatra.ai/skills/ai-photo-restyler/install.json and archives from
cdn.beatra.ai.
- Self-update (on by default in this pinned version). Before
verify,
tools, upload, or call, the client checks for a newer release at most
once every 24 hours and, if one exists, replaces package-owned files without
per-update preview or approval. It pins host and path, verifies checksums
from Beatra's own discovery document and CDN, and rolls back on failure, but
those digests are not independently anchored. This entry therefore requires
update --auto off before first use, as in Step 3.
- Uploads and third parties. Prompts and uploaded media are sent to Beatra
and forwarded to the third-party model provider executing the task. Beatra
is hosted outside mainland China. See the
privacy policy.
- Billing. Paid tools consume prepaid credits. Credits for tasks that fail
for reasons attributable to Beatra or the upstream model are returned
automatically; otherwise purchases are non-refundable, and actual usage can
exceed the estimate and leave a negative balance. See the
terms.
- Credentials.
authorize.py runs an OAuth device flow, opens the browser,
and stores one bearer token in ~/.beatra/credentials.json (directory
0700, file 0600). The token never goes into argv, environment variables,
or output. It carries full Beatra scope, including wallet:spend, has a
sliding 15-day idle lifetime, and is shared by every Beatra skill on the
device.
- Local state.
~/.beatra/ also holds installation.json (random
installation reference), host.json (agent platform and hostname),
skills.json (installed Beatra skill paths), registrations.json, and
updates/<id>/state.json plus update backups when updates run.
- Telemetry. The device flow sends the hostname as the device name, the
package slug and version, and the detected agent platform (for example
claude-code, from environment variables). On first use the client makes a
non-billable beatra.installations.register call, and every tool call adds
source_package_slug and source_platform. There is no opt-out for these
fields.
- Retention. Account data is kept for the life of the account. Task
records, artifacts, and billing ledgers are retained after account closure
for audit and tax purposes.
- Content rights. Users keep rights in their inputs and receive Beatra's
rights in outputs; they must hold rights to uploaded media and must not
create deceptive impersonations.
Additional Resources