Skip to main content

Hermes MiniMax Media

MiniMax (海螺 / minimax) image + video + music generation backends for Hermes Agent.

|| Surface | Model | Modes | ||---|---|---| || image_gen/minimax | image-01 | Text-to-Image, Image-to-Image (subject reference) | || video_gen/minimax | MiniMax-Hailuo-2.3 | T2V, I2V, 6/10s @ 768P/1080P | || video_gen/minimax | MiniMax-Hailuo-02 | T2V, I2V with start-end frames | || video_gen/minimax | S2V-01 | Subject-reference T2V (face consistency) | || music_gen/minimax | music-2.6 | Lyrics + prompt -> MP3 (sync); instrumental & cover modes |

CN endpoint (api.minimaxi.com) is used by default when MINIMAX_CN_API_KEY is set; global (api.minimax.io) is the automatic fallback when only MINIMAX_API_KEY is set.

Demo

Image (image-01)

Apple on plate Cat astronaut Cyberpunk city
Apple Cat astronaut Cyberpunk city
a tiny red apple on a white plate, studio lighting, photorealistic a cute cat astronaut floating in a colorful nebula, digital art, vibrant futuristic tokyo cityscape at night, neon lights, rain reflections, cyberpunk

Video (Hailuo-2.3, 6s @ 768P)

a calico cat napping in a sunbeam, soft cinematic lighting, gentle breathing motion

Demo GIF

MP4 source (608KB)

Music (music-2.6)

Both demos are real MiniMax Music API outputs (music-2.6, 256 kbps MP3 @ 44.1 kHz stereo), generated by the plugin's live smoke tests:

Instrumental (2:05) Vocals (1:41)
Cheerful acoustic guitar, warm strumming, sunny afternoon vibe Soulful Blues, Slow Tempo, Electric Guitar, Male Vocal, Rainy Night, Melancholy + custom lyrics
▶ Play MP3 (3.8 MB) ▶ Play MP3 (3.9 MB)

Lyrics used for the vocal demo:

[Verse]
Rain on the windowpane, soft and slow
Coffee steam rising, the room aglow
...

[Chorus]
Midnight rain, fallin down on me
Like tears I cannot cry for all to see
Just the rhythm of the rain
And the blues deep in my soul

... (full lyrics in tests/test_music_gen_minimax.py)

Installation

From PyPI

pip install hermes-minimax-media[setup]   # [setup] pulls PyYAML for the setup helper
hermes-minimax-setup                       # writes plugins.enabled + provider blocks
hermes gateway restart                     # pick up the new config

The package registers three entry points with the hermes_agent.plugins group (minimax-imggen, minimax-vidgen, minimax-musicgen). Hermes auto-discovers them on next gateway start; but the loader only enables plugins that are listed in plugins.enabled in ~/.hermes/config.yaml, so the hermes-minimax-setup one-shot is required to wire the names up. It's idempotent — re-running on an already-configured file is a no-op.

Why a CLI helper instead of pip doing it directly? setup.py runs in an isolated build environment and can't reach ~/.hermes/. We also didn't want pip install to silently mutate user config.

If you'd rather do it manually:

hermes plugins enable minimax-imggen minimax-vidgen minimax-musicgen

From source

git clone https://github.com/lora-sys/hermes-minimax-media.git
cd hermes-minimax-media
pip install -e ".[setup]"
hermes-minimax-setup

Manual install (no pip)

mkdir -p ~/.hermes/plugins/{image_gen,video_gen,music_gen}
cp -r src/hermes_minimax_media/plugins/image_gen/minimax \
      ~/.hermes/plugins/image_gen/minimax
cp -r src/hermes_minimax_media/plugins/video_gen/minimax \
      ~/.hermes/plugins/video_gen/minimax
cp -r src/hermes_minimax_media/plugins/music_gen/minimax \
      ~/.hermes/plugins/music_gen/minimax

hermes plugins enable image_gen/minimax video_gen/minimax music_gen/minimax

Note the path-derived keys (image_gen/minimax, etc.) for the manual install — those match the bundled layout that the directory scanner walks. The pip-installed entry-point plugins use the bare entry-point name (minimax-imggen, etc.). They're not interchangeable; pick the row that matches your install method. hermes plugins enable will tell you which keys are valid for your environment.

Configuration

1. Set your MiniMax API key

Add to ~/.hermes/.env:

# CN endpoint (api.minimaxi.com) — used by default
MINIMAX_CN_API_KEY=eyJ...

# Optional: global endpoint (api.minimax.io) — fallback
MINIMAX_API_KEY=eyJ...

Get a key at https://api.minimaxi.com/user-center/basic-information/interface-key (or https://www.minimax.io for the global endpoint).

2. Enable the plugins in ~/.hermes/config.yaml

The hermes-minimax-setup one-shot (from the install step above) writes this block for you. If you'd rather hand-edit, the equivalent is:

plugins:
  enabled:
    - minimax-imggen       # pip entry-point name (NOT image_gen/minimax — that's the manual-install key)
    - minimax-vidgen
    - minimax-musicgen
    # ... other plugins

image_gen:
  provider: minimax
  minimax:
    model: image-01

video_gen:
  provider: minimax
  minimax:
    model: MiniMax-Hailuo-2.3   # or Hailuo-02, S2V-01

music_gen:
  # NOTE: music_gen currently lacks a top-level provider surface in upstream
  # Hermes — the music_generate tool is registered directly by the plugin's
  # register() callback. We still set the per-provider model here so when the
  # surface lands it's pre-configured.
  minimax:
    model: music-2.6   # or music-cover, music-cover-free

Why minimax-imggen instead of image_gen/minimax? The pip-installed entry point declares its key as minimax-imggen (the entry-point name). The manual ~/.hermes/plugins/image_gen/minimax/ layout declares its key as image_gen/minimax (path-derived). The two layouts are not interchangeable — pick whichever matches your install method. hermes plugins list shows the right key for whatever is installed.

3. Restart Hermes

hermes gateway restart

Verify the setup

hermes plugins list --json | python3 -c "import sys, json; print([p['name'] for p in json.load(sys.stdin) if 'minimax' in p['name']])"
# Expect: ['minimax-imggen', 'minimax-musicgen', 'minimax-vidgen']
hermes-minimax-setup --check
# Expect: OK  /home/lora/.hermes/config.yaml

Usage

Once configured, ask Hermes naturally — the model picks the right tool:

Text-to-image:

画一只戴墨镜的猫

Image-to-image (subject reference):

把这张自拍转成吉卜力风格 (pass an image_url)

Text-to-video:

做一个 6 秒的延时摄影:城市黄昏的车流

Image-to-video (animate a still):

让这张海浪照片动起来 (Hailuo-2.3, pass image_url)

Subject-reference video (face-consistent character):

让视频里这个角色挥手 (S2V-01, pass image_url of a face)

Text-to-music (lyrics + style):

写一首蓝调,主题是雨夜 (the agent will fill in lyrics with lyrics_optimizer=true, then call music_generate)

Instrumental music (no vocals):

做一个 60 秒的欢快尤克里里纯音乐 (is_instrumental=true)

Custom lyrics + style:

用我写的歌词 [Verse]\n... 做一首电子流行歌

Models

Image

|| Model | Modes | Aspect ratios | Notes | ||---|---|---|---| || image-01 | T2I, I2I | 16:9, 9:16, 1:1 | Built-in prompt optimizer on; seed supported |

Video

|| Model | Duration | Resolution | T2V | I2V | Subject ref | Start-end frames | ||---|---|---|---|---|---|---| || MiniMax-Hailuo-2.3 | 6 / 10 s | 768P, 1080P | ✅ | ✅ | ❌ | ❌ | || MiniMax-Hailuo-02 | 6 / 10 s | 768P, 1080P | ✅ | ✅ | ❌ | ✅ | || S2V-01 | 6 s | 1080P | ❌ | ❌ | ✅ (face) | ❌ |

Note: 720P is not a valid MiniMax resolution. The plugin auto-coerces 720P -> 768P to avoid API errors. Don't rely on 720P working.

Music

|| Model | Modes | Output | Notes | ||---|---|---|---| || music-2.6 | T2M (lyrics + prompt), instrumental | MP3 / WAV / PCM | Default. Supports lyrics_optimizer=true to auto-write lyrics from prompt. | || music-cover | Cover song (needs cover_feature_id) | MP3 / WAV / PCM | Two-step workflow via the Music Cover Preprocess API. | || music-cover-free | Cover song (free tier) | MP3 / WAV / PCM | Same as music-cover, free quota. |

The music_generate tool runs synchronously (unlike video): one POST to /v1/music_generation, no task polling. Typical latency is 30-90s. Output audio is cached at ~/.hermes/audio_cache/minimax_music-2.6_<ts>.mp3.

Endpoint resolution

Env state Endpoint used
MINIMAX_CN_API_KEY set https://api.minimaxi.com (CN, default)
Only MINIMAX_API_KEY set https://api.minimax.io (global)
MINIMAX_CN_BASE_URL / MINIMAX_BASE_URL set Override host only; paths are always /v1/...

Troubleshooting

MiniMax image API error 401

Wrong key or the wrong region. Verify the key is valid at the relevant user center (CN: https://api.minimaxi.com ; global: https://www.minimax.io). The plugin auto-picks the right endpoint based on which env var is set, but if both are set, CN wins.

MiniMax submit returned no task_id: ... does not support resolution 720P

720P was a wrong assumption from older docs. The plugin normalizes it to 768P. If you see this error from a hand-rolled request, switch to 768P.

Video generation times out (>5 min)

The plugin polls every 10s for up to 5 minutes. Hailuo-2.3 typically returns in 30-90s for a 6s/768P clip; 10s/1080P can stretch to 3-4 minutes. If you hit the 5-min cap repeatedly, switch to a shorter duration or lower resolution.

MiniMax submit error 429: ... balance not enough

Out of credits. Top up at https://api.minimaxi.com/user-center/payment (or the global user center).

Plugin not loading

Run hermes-minimax-setup --check — it'll tell you exactly what's missing from plugins.enabled (the loader silently leaves a not-enabled plugin out).

Verify the path matches what config.yaml says:

ls ~/.hermes/plugins/image_gen/minimax/    # manual install
ls ~/.hermes/plugins/video_gen/minimax/    # manual install

Each directory should contain both __init__.py and plugin.yaml.

For pip installs, the entry-point discovery path is what counts:

python3 -c "import importlib.metadata; eps = importlib.metadata.entry_points(); \
            names = eps.select(group='hermes_agent.plugins') if hasattr(eps,'select') else eps.get('hermes_agent.plugins',[]); \
            print([e.name for e in names if 'minimax' in e.name])"
# Expect: ['minimax-imggen', 'minimax-musicgen', 'minimax-vidgen']

If those names show up but the plugin still doesn't load, run hermes-minimax-setup to write them into plugins.enabled.

If you installed via pip install hermes-minimax-media, the entry points minimax-imggen / minimax-vidgen / minimax-musicgen are auto-registered on install; you only need the hermes-minimax-setup step (or its manual equivalent hermes plugins enable <name>) to make Hermes' opt-in loader pick them up.

Historical note: the loader's entry-point branch sets key=ep.name and kind="standalone", so writing plugins.enabled: [image_gen/minimax] (the path-derived key from the manual-install layout) does NOT match an entry-point-installed plugin. Use the entry-point name (minimax-imggen) instead. hermes plugins list will print the exact key to use.

Development

# Clone
git clone https://github.com/lora-sys/hermes-minimax-media
cd hermes-minimax-media

# Editable install
pip install -e .

# Run tests (no API key needed)
pytest tests/ -v

# Run live smoke (requires MINIMAX_CN_API_KEY)
MINIMAX_CN_API_KEY=... pytest tests/ -v -m requires_live

# Lint
ruff check src/ tests/

# Build
python -m build

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hermes_minimax_media-0.3.0.tar.gz (38.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hermes_minimax_media-0.3.0-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file hermes_minimax_media-0.3.0.tar.gz.

File metadata

  • Download URL: hermes_minimax_media-0.3.0.tar.gz
  • Upload date:
  • Size: 38.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for hermes_minimax_media-0.3.0.tar.gz
Algorithm Hash digest
SHA256 f98a3434d4137373298c3a22b6cc65fc898141de0616abfd4e4e8d3eda1eaf04
MD5 402a2812febf05437868c4cecee0c374
BLAKE2b-256 76d53cc766f08d80af2c1d2ec82429f83ef42ce6089626d22487326159387bb3

See more details on using hashes here.

File details

Details for the file hermes_minimax_media-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hermes_minimax_media-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 14c4f64cda434c1468f2ce94cdc0b5942dafb22f576445c33f9aa5cb6276ab45
MD5 144cbcef0d15bd060d2afc683b38a952
BLAKE2b-256 fd966fc50f3aa143cc65d03ceb19d2f2fbf844fa134c136df2427fea172996e3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page