Right-Click Menus#
Eimi adds five commands to Discord's message context menu. They act on a message that already exists, so you can edit, restyle, animate, describe or hide a bee in any picture someone has already posted, without downloading and re-uploading it.
They are also the only way to reach a few things: the audio operations menu has no slash command at all, and the 🧬 Detailer button appears in tweak but not on the Edit button of a finished card.
How to reach them#
| Platform | How |
|---|---|
| Desktop | Right-click the message -> Apps -> pick the command |
| Mobile | Long-press the message -> Apps -> pick the command |
All five are message commands. Eimi registers no user context-menu commands, so right-clicking somebody's name or avatar will never show any of these.
They work in servers, in DMs and in group DMs, whether Eimi is added to the server (guild install) or added to your own account (user install). See Bot Behavior for what changes between those two.
If the menu is not there
Discord caches the Apps submenu. A menu that was just added, renamed or removed can take a while to appear, and a user install sometimes needs a client restart. Nothing on the bot's side fixes that.
The five menus#
| Menu | What it does | What it needs | Where the result goes |
|---|---|---|---|
| tweak | The universal "do something with this". An image opens the full edit menu; an audio or video file opens the audio operations menu | An image, or an audio/video file | Reply to the original message |
| restyle | Re-draws the image in one of the 25 style presets | An image | Reply to the original message |
| waldo | Hides a tiny camouflaged bee in the image for other people to find | An image at least 128 px on both sides | Reply to the original message |
| animate | Turns the image into a short video clip, using it as the first frame | An image. VIP only while the render backend is set to the API | A new message, not a reply |
| describe | Reads the image back to you as text: prose, booru tags or a re-usable prompt | An image | Ephemeral, to you |
Only tweak understands audio. The other four look for images and nothing else.
Access, cooldowns and limits#
Every menu runs the same access check before anything opens. Fail it and you get one of three messages, depending on where you are:
| Situation | Message |
|---|---|
| In a DM without access | You don't have access to use the bot in DMs. |
| In a server the owner manages themselves | You don't have access to use the bot in this server. plus Ask the server owner to add you with /manage add |
| Anywhere else | Access denied. |
The tweak entry point, animate and describe always use the short Access denied. form. restyle, waldo and the image half of tweak use all three.
| Gate | Applies to | Value |
|---|---|---|
| Per-user cooldown | describe | 3 seconds, then Please wait a moment before describing again. |
| Per-user cooldown | waldo | 5 seconds. VIP and admin are exempt |
| Button cooldown | the buttons on a finished result card, including 🎭 Restyle and Edit | 0.5 seconds per button type, then Please wait before clicking again. |
| Per-user queue limit | none of them | See the warning below |
| VIP gate | animate on the API backend, and the Gemini and OpenAI models inside tweak | Non-VIPs never see the VIP models in the dropdown |
The right-click paths skip your personal queue limit
/edit, /imagine and /render refuse to queue when you already have your maximum number of jobs waiting. tweak, restyle, animate and the audio operations do not run that check. The global and per-channel queue limits still apply, and so does the GPU, so this mostly means you can bury yourself in your own jobs. Do not read it as an invitation.
What counts as media in that message#
The finder is deliberately broad. It walks the message in this order and collects everything usable:
| Order | Source | Notes |
|---|---|---|
| 1 | Attachments | Ordinary uploaded files |
| 2 | Components V2 media | The galleries and thumbnails on Eimi's own result cards, which never show up as attachments |
| 3 | Stickers | Fetched as a PNG |
| 4 | Embeds | The embed's image, its thumbnail and its video, in that order |
Still formats (13): .png .webp .jpg .jpeg .bmp .tiff .tif .avif .jfif .ico .jp2 .heic .heif
Motion formats (17): .gif .apng .mp4 .mov .webm .mkv .avi .gifv .m4v .flv .wmv .mpeg .mpg .3gp .ts .ogv .m2ts
Motion sources contribute their first frame only, pulled out with ffmpeg (30-second cap on the extraction). Animated GIF and APNG are counted as motion on purpose, so they do not arrive as a multi-frame batch.
The file's declared type wins over its extension, so a .png that is really a JPEG still works.
HEIC and HEIF are conditional
iPhone photos decode only when the pillow-heif library is installed on the machine running the bot. They are accepted either way, so if HEIC support is missing you get a conversion failure rather than a clean "unsupported" message.
Audio is a separate list, and only tweak looks for it. It only checks real attachments, not embeds or components:
Audio (13): .mp3 .wav .flac .ogg .opus .aac .wma .m4a .aiff .aif .alac .ape .wv
Video with an audio track (12): .mp4 .mkv .webm .mov .avi .wmv .flv .m4v .ts .mts .3gp .ogv
A video counts as both
An .mp4 is on the motion list and the audio list. Right-click a video with tweak and you get the image-or-audio picker: pick 🖼 Image to edit its first frame, or 🎵 Audio to work on its soundtrack.
When a message has several images#
Each menu shows its own picker dropdown listing up to 25 sources. Entries are labelled Image {n}: {filename} (filename truncated to 50 characters) with a description built from the source type, the dimensions and the size, for example Attachment - 1024x1536 - 812KB. Dimensions and size are omitted when Discord does not report them, which is common for embeds, stickers and component media.
With exactly one image the picker is skipped and the menu goes straight to its options.
Audio is different: tweak takes the first audio attachment on the message and offers no picker. If a message carries two audio files, only the first one is reachable.
When there is nothing usable#
| Menu | Message |
|---|---|
| tweak, restyle, waldo, animate, describe | ❌ No image found in that message. |
| waldo, when the bee system is offline | ❌ Waldo system not available. |
| animate, when video generation is offline | ❌ Video generation isn't available right now. |
Nothing is queued and nothing is posted. The menu never opens.
Whose image, whose menu#
You can point any of these at somebody else's image. None of them are restricted to your own posts. The original message is never modified, and the new result is attributed to you, charged to your job count and stored in your history, not theirs.
The menu itself is yours alone. Someone else clicking your buttons gets a short refusal instead:
| Menu | Refusal |
|---|---|
| tweak, and the Edit button | This is not your edit menu. |
| restyle | This is not your restyle menu. |
| waldo | This isn't your waldo menu. |
| animate | This isn't your animate menu. |
| describe | ❌ Not your describe. |
The one deliberate exception is waldo's 🔍 Reveal button, which anyone with bot access can press -- that is the whole game.
Timeouts#
Menus are single-shot. Once one expires you right-click again.
| Menu | Timeout | What you see |
|---|---|---|
| tweak (image), restyle, animate, the image/audio picker | 300 seconds | ⏱️ Selection timed out. on the edit and restyle menus |
| waldo | 180 seconds | -- |
| describe picker | 5 minutes | -- |
| describe results | 15 minutes | -- |
| audio operations (inside tweak) | 10 minutes | -- |
The audio menu re-checks your access on every button press, because ten minutes is long enough for that to have changed.
Public or private#
Whether the result posts to the channel or only to you is decided by the original right-click, not by the buttons you press afterwards. That is deliberate: a click inside an ephemeral menu inherits the menu's own privacy and would skew the answer.
You get an ephemeral result when Eimi is user-installed rather than added to the server, when it cannot post in that channel or thread, when you lack the "Use External Apps" permission, or whenever working that out fails. DMs always count as public.
Two exceptions worth knowing: describe always replies privately, and the audio operations always post publicly regardless of how the menu was opened.
Fetching images from elsewhere#
Discord's image URLs are signed and expire. If a fetch fails on an attachment, Eimi re-fetches the source message from Discord to get a freshly-signed link and tries again.
Embedded images from other sites are fetched with browser-like headers, so hotlink-blocking hosts such as Midjourney and Civitai generally let the request through at original quality. If they still refuse, Eimi falls back to Discord's own media proxy copy, which may be lower quality but is better than failing.
If everything fails you get ❌ Failed to download image. or, for a video source, ❌ Failed to extract frame from video. Make sure ffmpeg is installed.
See also#
- /edit -- the slash-command version of tweak, with the full model reference
- Result card -- what the buttons on a finished job do
- Style Presets -- the 25 looks restyle can apply
- Bot Behavior -- access tiers and what makes a response ephemeral