Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Grok Imagine Image Pro

Generates and edits high-quality PNG images via xAI Grok/Flux API using prompts, styles, aspect ratios, and batch processing with base64 output.

MIT-0 · Free to use, modify, and redistribute. No attribution required.
3 · 763 · 1 current installs · 1 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The skill's name/description match the runtime instructions: it calls an xAI images endpoint, requires XAI_API_KEY, and uses curl/python3 to send requests and save PNGs. Required binaries and the single env var are proportional to the stated purpose.
Instruction Scope
Instructions are focused on generation and editing and show concrete curl+python examples that create ~/.openclaw/media and /tmp payloads. This is expected for image editing, but be aware the guidance includes base64-encoding local files and sending them to an external API—while needed for edits, that behavior could be used to exfiltrate arbitrary local files if misused. The SKILL.md does not attempt to read other system configs or require unrelated environment variables.
Install Mechanism
There is no install spec (instruction-only), so nothing is downloaded or written beyond the agent executing the provided commands. This is the lowest-risk install model.
Credentials
Only XAI_API_KEY is required, which is appropriate for calling the xAI API. No unrelated credentials or config paths are requested.
Persistence & Privilege
The skill is not marked always:true, has no install-time persistence, and does not modify other skills or system-wide settings. It writes output files to ~/.openclaw/media and /tmp as described (normal for media artifacts).
Scan Findings in Context
[no_findings] expected: The regex scanner found no code files to analyze; this is expected because the skill is instruction-only (SKILL.md) and contains shell/python examples rather than packaged code.
Assessment
This skill appears to do what it says: it calls xAI's image generation endpoint and saves PNGs. Before installing or using it, make sure you trust the XAI API key you provide (rotate it if unsure) and avoid pointing the skill at sensitive local files—the examples show base64-encoding and uploading arbitrary files, which is necessary for image edits but could leak secrets if misused. Confirm the API domain (api.x.ai) is correct for your account, and be aware files are saved under ~/.openclaw/media and /tmp. If you need stricter controls, do not grant the skill your primary account API key or only use a key with limited permissions / billing limits.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.2
Download zip
latestvk976dc0aatbg8chnrbejm45h7581519n

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

Binscurl, python3
EnvXAI_API_KEY

SKILL.md

Grok Imagine Image Pro

API Key: $XAI_API_KEY (already configured) Save dir: ~/.openclaw/media/ (resolves to /data/.openclaw/media/ — allowed for Telegram sending)

Available Models

  • grok-imagine-image — standard quality, faster
  • grok-imagine-image-pro — higher quality (default for generation)

1. Image Generation

curl -s https://api.x.ai/v1/images/generations \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "grok-imagine-image-pro",
    "prompt": "<PROMPT>",
    "n": 1,
    "response_format": "b64_json"
  }' | python3 -c "
import json, sys, base64, os, time
os.makedirs(os.path.expanduser('~/.openclaw/media'), exist_ok=True)
r = json.load(sys.stdin)
ts = int(time.time())
for i, img in enumerate(r['data']):
    img_data = base64.b64decode(img['b64_json'])
    fpath = os.path.expanduser(f'~/.openclaw/media/generated_{ts}_{i}.png')
    with open(fpath, 'wb') as f:
        f.write(img_data)
    print(fpath)
"

Aspect Ratios

Add "aspect_ratio": "<ratio>" to the JSON body. Supported values:

RatioUse case
1:1Social media, thumbnails
16:9 / 9:16Widescreen, mobile stories
4:3 / 3:4Presentations, portraits
3:2 / 2:3Photography
2:1 / 1:2Banners, headers
autoModel picks best ratio (default)

Batch Generation

Set "n": <count> (1-10) to generate multiple images in one request.

2. Image Editing / Style Transfer

Edit an existing image by providing a source image plus an edit prompt. Uses the same /v1/images/generations endpoint with an added image_url field.

Do NOT use /v1/images/edits with multipart — xAI requires JSON.

IMPORTANT: For local files, use Python to build the payload JSON file, then curl with @file. Inline base64 in curl args causes "Argument list too long" for images >~100KB.

NOTE: This is NOT true image editing — the API generates a new image inspired by the source. It cannot make pixel-precise edits (e.g. changing only a car's color while keeping everything else identical).

Edit from local file (recommended approach):

python3 -c "
import json, base64
with open('<SOURCE_PATH>', 'rb') as f:
    b64 = base64.b64encode(f.read()).decode()
payload = {
    'model': 'grok-imagine-image',
    'prompt': '<EDIT_PROMPT>',
    'image_url': f'data:image/png;base64,{b64}',
    'n': 1,
    'response_format': 'b64_json'
}
with open('/tmp/img_edit_payload.json', 'w') as f:
    json.dump(payload, f)
print('Payload ready')
" && \
curl -s https://api.x.ai/v1/images/generations \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/img_edit_payload.json | python3 -c "
import json, sys, base64, os, time
os.makedirs(os.path.expanduser('~/.openclaw/media'), exist_ok=True)
r = json.load(sys.stdin)
img_data = base64.b64decode(r['data'][0]['b64_json'])
fpath = os.path.expanduser(f'~/.openclaw/media/edited_{int(time.time())}.png')
with open(fpath, 'wb') as f:
    f.write(img_data)
print(fpath)
"

Edit from URL:

curl -s https://api.x.ai/v1/images/generations \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "grok-imagine-image",
    "prompt": "<EDIT_PROMPT>",
    "image_url": "<PUBLIC_IMAGE_URL>",
    "n": 1,
    "response_format": "b64_json"
  }' | python3 -c "
import json, sys, base64, os, time
os.makedirs(os.path.expanduser('~/.openclaw/media'), exist_ok=True)
r = json.load(sys.stdin)
img_data = base64.b64decode(r['data'][0]['b64_json'])
fpath = os.path.expanduser(f'~/.openclaw/media/edited_{int(time.time())}.png')
with open(fpath, 'wb') as f:
    f.write(img_data)
print(fpath)
"

Style Transfer Examples

Use editing with a style prompt, e.g.:

  • "Render this as an oil painting in impressionist style"
  • "Make this a pencil sketch with detailed shading"
  • "Convert to pop art with bold colors"
  • "Watercolor painting with soft edges"

3. Sending to Telegram

message tool: action=send, channel=telegram, target=<id>,
  message="<caption>", filePath=~/.openclaw/media/<file>.png
  • Always include message field (required even for media-only sends)
  • Allowed media paths: /tmp/, ~/.openclaw/media/, ~/.openclaw/agents/

Notes

  • Do NOT pass size parameter — returns 400
  • Aspect ratio: pass aspect_ratio in JSON body (not size)
  • Editing: use image_url field in the generations endpoint (NOT the edits endpoint with multipart)
  • Always use "response_format": "b64_json" — URL format returns temporary URLs that often 403
  • For large images: build payload with Python → save to /tmp/ → curl with @file syntax
  • Max 10 images per request
  • Images are subject to content moderation
  • Editing is style-transfer/reimagination, NOT pixel-precise inpainting

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…