SkillTotal

Is Pixel2Motion safe?

No malicious indicators - review capabilities before installing
Notable — review in context (capabilities are not malware):
  • 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

agent_skill · https://github.com/nolangz/pixel2motion
LOW
0
/ 100 risk score
Snapshot · scanned Aug 5, 2026 · repo@3824573 · engine 0.38.1 / ruleset 42

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.

Capabilities — what this component can do (not a risk score):
filesystem readfilesystem writenetwork egressshell execution

Behavioral traits

How this component maps to the CSA agentic threat model. Descriptive — it never affects the risk score.

Execution authority
Tool Access Control / Direct Tool Access
Filesystem reach
Tool Execution Context
Network egress
Interaction & Communication / Direct Communication

Findings (5)

HIGHNode.js shell/command executionST-SHELL-NODE

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.

HIGHPython shell/command executionST-SHELL-PY

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.

MEDIUMPython filesystem readST-FS-PY-READ

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.

MEDIUMPython filesystem write/deleteST-FS-PY-WRITE

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.

MEDIUMNode.js network egressST-NET-NODE

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 component

How we determine this: deterministic static analysis (regex + AST), evidence-anchored, no code execution. Methodology →