Is Pixel2Motion safe?
- Python shell/command execution
- Node.js shell/command execution
- Python filesystem read
repo is an AI agent_skill analyzed by SkillTotal's deterministic static scanner. The scan found no malicious indicators, though 5 risky constructs are reported for review. It can: filesystem read, filesystem write, network egress and shell execution — capabilities are what the code can do, not a verdict on intent. Risk score 0/100 (low).
repo
Automated static-analysis result. It can contain false positives and false negatives, and is not a claim about the intent of Pixel2Motion's authors. Report a false positive.
Behavioral traits
How this component maps to the CSA agentic threat model. Descriptive — it never affects the risk score.
Findings (5)
The component can run operating-system commands or spawn processes.
import { spawn } from "node:child_process";const child = spawn(command, args, { stdio: options.stdio ?? "pipe", ...options });const chrome = spawn(CHROME, [
const child = spawn("ffprobe", args, { stdio: ["ignore", "pipe", "pipe"] });Why it matters: Powerful and often legitimate — confirm the commands aren't built from untrusted input.
Fix: Confirm the command and its arguments are fully controlled and not derived from untrusted input; prefer execFile with an argument array.
The component can run operating-system commands or spawn processes.
subprocess.run(
[
chrome, "--headless=new", "--disable-gpu", "--hide-scrollbars",
f"--screenshot={shot}", f"--window-size={width},{height}",
"--default-background-color=FFFFFFFF", …Why it matters: Powerful and often legitimate — confirm the commands aren't built from untrusted input.
Fix: Confirm the command and its arguments are fully controlled and not derived from untrusted input; avoid shell=True.
The component reads files from disk.
motion_css = args.css.read_text(encoding="utf-8")
motion_css = args.css.read_text(encoding="utf-8")
args.svg.read_text(encoding="utf-8"),
seeds = json.loads(args.seeds.read_text())
Why it matters: Usually legitimate, but worth confirming it can't be steered into reading sensitive files.
Fix: Confirm which files are read and that paths cannot be influenced by untrusted input to reach sensitive locations.
The component writes or deletes files on disk.
args.out.write_text(
html_for(node_to_data(root), motion_css, args.title, args.background, args.duration_hint),
encoding="utf-8",
)args.out.write_text(
html_for(
node_to_data(root),
args.svg.read_text(encoding="utf-8"),
motion_css,
args.title,
args.background,
args.duration_hint,
), …args.report.write_text(json.dumps(report, indent=2), encoding="utf-8")
(args.out_dir / "ribbon_path.txt").write_text(ribbon_d)
(args.out_dir / "centerline_path.txt").write_text(cl_d)
(args.out_dir / "fit_report.json").write_text(json.dumps(report, indent=1))
(args.out_dir / "preview.svg").write_text(
f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {W} {H}" width="{W}" height="{H}">\n'
f' <path id="ribbon-centerline" d="{cl_d}" fill="none" pathLength="1"/>\n'
f' <path id="ri …args.report.write_text(json.dumps(report, indent=1))
svg_path.write_text(svg_text, encoding="utf-8")
html_path.write_text(html_document(svg_text), encoding="utf-8")
metrics_path.write_text(json.dumps(metrics, ensure_ascii=False, indent=2), encoding="utf-8")
wrapper.write_text(
"<!doctype html><html><head><style>html,body{margin:0;padding:0}</style></head>"
f'<body><img src="{svg.resolve().as_uri()}" width="{width}" height="{height}"></body></html>',
encoding …args.report.write_text(json.dumps(metrics, indent=2), encoding="utf-8")
args.report.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
args.out_svg.write_text(build_visual_svg(root, path_d, segments, report), encoding="utf-8")
args.out.write_text(html_for(node_to_data(root), args.title), encoding="utf-8")
Why it matters: Usually legitimate, but worth confirming the paths can't be controlled by untrusted input.
Fix: Confirm which files are written/deleted and that paths cannot be influenced by untrusted input.
The component makes outbound network requests.
const response = await fetch(url);
const target = await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" }).then(r => r.json());Why it matters: Usually legitimate, but confirm the destinations are expected and no sensitive data leaves.
Fix: Confirm the destination hosts are expected and that no sensitive data is sent off-host.
Check your own component
Run the same evidence-backed scan on any MCP server, agent skill, or package.
Scan your own componentHow we determine this: deterministic static analysis (regex + AST), evidence-anchored, no code execution. Methodology →