MiniMax Vision — Image Understanding via mmx CLI

Status

WORKING (2026-05-04)mmx vision describe is the correct and only reliable method after vision.minimax.chat DNS resolution started failing.

mmx CLI Installation

Official docs: https://platform.minimax.io/docs/token-plan/minimax-cli Package: mmx-cli (npm), command: mmx

# Install via npm
npm install -g mmx-cli
 
# Verify
mmx --version

Authenticate with your API key:

mmx auth login --api-key sk-xxxxx

Service region: If you get 401 errors, set region manually:

mmx config set --key region --value global   # Overseas (platform.minimax.io)
mmx config set --key region --value cn       # Mainland China (platform.minimaxi.com)

Run mmx alone to open the interactive CLI panel.

The Problem

  • vision_analyze tool uses https://vision.minimax.chat/v1alpha1/gvisor?model=pro
  • This domain no longer resolves — DNS returns “Could not resolve host” from both Termux and Windows
  • curl to vision.minimax.chat fails with DNS error
  • Invoke-RestMethod from Windows PC also fails with same DNS error
  • The vision.minimax.chat domain appears to be deprecated/down

The Working Solution

mmx vision describe \
  --image /path/to/image.png \
  --prompt "Your question about the image"

Example:

mmx vision describe \
  --image /data/data/com.termux/files/home/.hermes/image_cache/img_5653234a3dfc.png \
  --prompt "List all the menu items visible in this UI screenshot."

Options:

  • --image <path-or-url> — Local file path or image URL
  • --file-id <id> — Pre-uploaded file ID
  • --prompt <text> — Question about the image (default: “Describe the image.”)

Important: Pass full absolute path, not relative path.


Method 2: Direct API with MiniMax-M2.7

The MiniMax-M2.7 model supports multimodal input (image + text) via base64:

import urllib.request, json, base64
 
with open('image.png', 'rb') as f:
    b64 = base64.b64encode(f.read()).decode()
 
payload = json.dumps({
    'model': 'MiniMax-M2.7',
    'messages': [{
        'role': 'user',
        'content': [
            {'type': 'text', 'text': 'Your question'},
            {'type': 'image_url', 'image_url': {'url': f'data:image/png;base64,{b64}'}}
        ]
    }]
}).encode()
 
req = urllib.request.Request(
    'https://api.minimax.io/v1/chat/completions',
    data=payload,
    headers={
        'Authorization': 'Bearer <API_KEY>',
        'Content-Type': 'application/json'
    },
    method='POST'
)
 
with urllib.request.urlopen(req, timeout=30) as resp:
    result = json.loads(resp.read())
    print(result['choices'][0]['message']['content'])

Known limitations: This approach may return “I cannot see the image” depending on how the model processes the base64. Success is inconsistent.


Verified Models

ModelVisionText ChatNotes
MiniMax-M2.7✅ via base64Best for vision
MiniMax-M2⚠️ via base64Inconsistent on vision
MiniMax-Text-01Token plan doesn’t support this model
image-01N/AN/AImage generation only, not vision

Troubleshooting

vision.minimax.chat DNS failure

Symptom: curl: (6) Could not resolve host: vision.minimax.chat

Cause: Domain is deprecated/down

Fix: Use mmx vision describe instead — the mmx CLI has its own routing that bypasses the broken domain.

mmx vision returns “I cannot see the image”

Try: Use a direct local file path (not URL), full absolute path.

# WRONG
mmx vision describe --image ./img.png
 
# CORRECT
mmx vision describe --image /data/data/com.termux/files/home/.hermes/image_cache/img.png

mmx vision times out

Fix: Try again. If persistent, the image may be too large (>10MB). Compress and retry.

Key Learnings (2026-05-04)

  1. mmx CLI is the reliable vision tool — it has built-in routing that always works
  2. vision.minimax.chat is deprecated — never trust that URL in code anymore
  3. MiniMax API key works fine — the issue is purely endpoint routing
  4. MiniMax-M2.7 is the best model — supports multimodal and chat equally well

See Also

  • minimax-image-gen skill — image generation (separate from vision)
  • mmx --help — full CLI reference