tweak#
Right-click a message -> Apps -> tweak
tweak is the universal "do something with this" entry point. Point it at any message and it works out what is in there: an image opens the full edit menu, an audio or video file opens the audio operations menu, and a message holding both asks which one you meant.
It is the widest of the five right-click menus, and two things are reachable only through it: the audio operations (Cover, Repaint, Style Tags, Transcribe), which have no slash command anywhere, and the ๐งฌ Detailer button inside the edit menu, which the Edit button on a finished card does not offer.
It works in servers, DMs and group DMs, as a guild install or a user install.
What happens when you click it#
- Eimi checks your bot access. Without it you get
Access denied.and nothing opens. - It scans the message for audio attachments and for usable images.
- It routes you to one of four outcomes.
| The message contains | You get |
|---|---|
| An image only | The image edit menu |
| Audio only | The audio operations menu |
| Audio and an image | The media picker |
| Nothing usable | โ No image found in that message. |
Note that a video file lands in the third row, not the second: an .mp4 is both a motion image source (its first frame) and an audio source (its soundtrack), so tweaking a video always asks first.
The media picker#
A small panel headed ### Tweak, with the line this message has an image and audio -- pick one underneath and two buttons:
| Button | Where it takes you |
|---|---|
| ๐ผ Image | The image edit menu, against the images found in the message |
| ๐ต Audio | The audio operations menu, against the first audio attachment |
Blurple accent, 300-second timeout. Only the first audio attachment is ever offered -- there is no audio picker, so a message with two tracks exposes only the earlier one.
The image edit menu#
Headed ### Tweak Image, teal accent, 300-second timeout. On expiry it is replaced with โฑ๏ธ Selection timed out.
This is the same menu /edit and the Edit button use, with two differences:
| tweak | Edit button on a card | /edit |
|
|---|---|---|---|
| ๐งฌ Detailer button | Yes | No | No |
| Restyle ๐ญ in the model list | Yes | No | Yes, as model: restyle |
Your saved edit model from /settings is pre-selected, so the common case is three clicks: tweak, Edit Prompt, type, submit.
Layout, top to bottom#
| Row | When it appears | What it is |
|---|---|---|
| Model dropdown | Always | Choose editing model... |
| Image dropdown | Only with more than one image | Choose which image to edit..., up to 25 entries |
| Model options | After a model is picked | Quality, resolution, aspect ratio, batch and toggles, varying by model |
| Style sub-section | Only for Restyle | Preset dropdown, pagination, Source Influence, resolution toggle |
| Status line | After a model is picked | A small grey summary, fields joined by ยท |
| Submit row | After a model is picked | Up to four buttons |
The status line only prints what you have actually set. Model: is always there; Quality:, Style:, AR: (hidden on auto), Batch: (hidden at 1), Source:, Res: and Search: On appear as you touch them.
The model dropdown#
Fourteen entries exist. Eight are VIP-only and are simply not rendered for everyone else, so a regular user sees six.
| Model | Emoji | Description in the dropdown | VIP |
|---|---|---|---|
| Klein | โก or โจ | Flux2 Klein 4B Fast / 4B Quality / 9B Fast / 9B Quality, mirroring your saved setting |
-- |
| Qwen Edit | ๐จ | Qwen Edit, 8 steps |
-- |
| Krea 2 Edit | ๐ | Krea 2 Edit |
-- |
| Mage Flow Edit | ๐ช | Mage Flow Edit |
-- |
| Z-Image Inpaint | ๐๏ธ | SAM3 auto-mask + Z-Image inpaint |
-- |
| Restyle | ๐ญ | Restyle with style presets |
-- |
| Nano Banana | ๐ | Gemini 2.5 Flash (VIP) |
VIP |
| Nano Banana 2 | ๐ | Gemini 3.1 Flash (VIP) |
VIP |
| Nano Banana 2 Lite | ๐ | Gemini 3.1 Flash Lite - fast (VIP) |
VIP |
| Nano Banana Pro | ๐ | Gemini 3 Pro (VIP) |
VIP |
| GPT Image 1 | ๐ค | OpenAI GPT Image 1 (VIP) |
VIP |
| GPT Image 1.5 | ๐ค | OpenAI GPT Image 1.5 (VIP) |
VIP |
| GPT Image 2.0 | ๐ค | OpenAI GPT Image 2.0 (VIP) |
VIP |
| GPT Image 1 Mini | ๐ค | OpenAI GPT Image 1 Mini (VIP) |
VIP |
Switching model clears every option you had set -- quality, aspect ratio, batch, Source Influence, resolution, search and thinking toggles, and the style preset -- and re-applies that model's defaults. Pick the model first, then the options.
Full per-model option rows, quality settings and what each backend is good at live on the /edit page rather than being duplicated here.
Z-Image Inpaint does not work from tweak
Z-Image Inpaint ๐๏ธ is offered in this dropdown and its two-field modal opens normally, but the tweak path has no handler for it. Submitting comes back with โ Unknown model: z_image and nothing is queued. Use /edit with model: z_image, or the Edit button on a finished card, both of which do run it.
The submit row#
Left to right:
| Button | Colour | When it appears | What it does |
|---|---|---|---|
| โ๏ธ Edit Prompt | Blue | Always | Opens the prompt modal |
| โถ Submit | Green | Only when Restyle is picked with a real preset | Runs immediately with the generated style prompt, no typing |
| ๐งฌ Detailer | Green | Always, on the tweak path | Opens the Detailer options for the picked image instead of editing it |
| Cancel | Grey | Always | Deletes the menu |
The dedicated restyle menu puts Submit first instead, because there it is the usual path.
Both submit paths are guarded against double-clicks: a second fast click is silently swallowed. The guard is one-way, so if you open the modal and close it without submitting, the menu is spent and you have to right-click again.
The Detailer button#
๐งฌ Detailer is a side door rather than an edit. It downloads the picked image, hands it to the Detailer panel and lets you run face, eye, hand and person fixes, hi-res fix and background removal on it -- on any image, including one Eimi did not make.
If the message happens to be one of Eimi's own results, the original job's model, prompt and LoRAs are found and inherited so the detail pass matches. If it is somebody's holiday photo, it starts from scratch.
Failures here are blunt: Failed to download image., ComfyUI not available., Failed to upload image., Button handler not available.
Format handling#
Before the model sees anything, the picked image is normalised:
- Anything that is not PNG, JPEG, WEBP or GIF is converted to PNG.
- Any animated still, such as an animated WebP, is flattened to its first frame, so it cannot arrive as a multi-frame batch.
- Video and GIF sources contribute their first frame only.
- A failed conversion gives
โ Failed to convert {FORMAT} format.
There is no explicit size check on the source image here. Discord's own upload limits are the only thing stopping you, unlike waldo which refuses anything over 25 MB.
Where the result lands#
The finished image posts as a reply to the original message, publicly unless the original right-click was ephemeral. See Bot Behavior for what makes a response ephemeral.
No queue-limit check on this path
/edit refuses to queue when you already have your maximum number of jobs waiting (You have N job(s) in queue. Your limit is L.). tweak skips that check entirely. The global and per-channel limits still apply.
You can tweak someone else's image
Editing is open to everyone. The original message is untouched, and the new image is attributed to you and counted against your job total, not theirs.
The audio operations menu#
Right-clicking a message whose attachment is audio, or a video whose soundtrack you pick, opens ### Tweak Audio with the filename underneath. This menu is reachable only through tweak -- no slash command opens it, and it is not on any result card.
Blurple accent, 10-minute timeout, and it re-checks your bot access on every button press, because ten minutes is long enough for that to change.
| Button | Style | What it does | Result |
|---|---|---|---|
| Cover | Blue | Re-performs the whole track in a style you describe | A queued job, posted publicly |
| Repaint | Blue | Re-does one time range of the track | A queued job, posted publicly |
| Style Tags | Grey | Reads the track and tells you what it sounds like | Private text reply |
| Transcribe | Grey | Pulls the lyrics out | Private text reply |
All four run on the same ACE-Step 1.5 audio model family that /compose uses.
What audio Eimi accepts#
Audio attachments (.mp3 .wav .flac .ogg .opus .aac .wma .m4a .aiff .aif .alac .ape .wv) that are 10 MB or under are passed through untouched.
Anything else -- a video file, or an audio file over 10 MB -- goes through ffmpeg and comes out as 16-bit PCM WAV with the video track stripped. It tries three settings in order and stops at the first that fits under 10 MB:
| Attempt | Setting | Roughly how much audio fits |
|---|---|---|
| 1 | 44.1 kHz mono | about 2 minutes |
| 2 | 22 kHz mono | about 4 minutes |
| 3 | 16 kHz mono | about 5 minutes 30 |
If even 16 kHz mono will not fit, the track is truncated to whatever length does -- roughly the first 5 minutes 27 -- and the rest is discarded silently. There is no warning about this, so a long track that needed converting may come back shorter than you sent.
Conversion failures surface as Couldn't process that audio. A completely unreadable first attempt is reported as a corrupt file or one with no audio track.
BPM, key and time signature#
Cover and Repaint analyse the track before queueing, and carry the result into the job so the new audio stays in the same musical world as the source.
| Detected | How | What it looks like |
|---|---|---|
| BPM | Beat tracking over a sample of the track | A whole number, e.g. 120 |
| Key | Chroma analysis matched against the 24 major and minor key profiles | e.g. C minor |
| Time signature | Beat-accent grouping, resolved to one of three answers | 3, 4 or 6 |
The analysis decodes a 10-second slice from the middle of the track at 22 kHz mono, not the whole file. That keeps it fast, and it means an intro-heavy or unusually structured track can be read wrong. Time signature in particular falls back to 4 whenever the grouping is unclear, which is often.
Any value it fails to detect is simply left unset and the model picks its own.
Style Tags and Transcribe skip the analysis
They do not use BPM or key, so they do not pay for the analysis. That is why they come back noticeably faster than a Cover.
Cover#
Opens a modal titled Cover / Restyle:
| Field | Required | Max | Placeholder |
|---|---|---|---|
| New style (tags or description) | Yes | 1000 characters | e.g. lofi hip hop, mellow rhodes piano, rainy night |
| Lyrics (optional) | No | 4000 characters | -- |
Leave the lyrics field empty and the model writes its own where the arrangement calls for singing. Fill it in and it sings yours.
Cover strength is fixed at 0.5 and is not exposed in the menu. Neither is the step count (8), the seed (random every time) or the duration -- the output follows the length of the track you gave it.
Repaint#
Opens a modal titled Repaint a section:
| Field | Required | Max | Placeholder |
|---|---|---|---|
| What should the section become? | Yes | 1000 characters | e.g. add a soaring guitar solo |
| Start (seconds) | Yes | 8 characters | e.g. 30 |
| End (seconds, -1 = to the end) | Yes | 8 characters | e.g. 45 |
Times are plain seconds, decimals allowed. -1 as the end means "to the end of the track". Anything that is not a number gives Start/End need to be numbers (seconds). and nothing is queued.
Repaint has no lyrics field. The rest of the track outside your range is meant to survive; only the range you named is re-generated.
Cover and Repaint queue an ordinary compose job
Both hand off to the same machinery as /compose, and what comes back is an ordinary compose result card. It is always posted publicly to the channel, even when the tweak menu that opened it was private -- unlike every other right-click menu, the ephemeral choice is ignored here. The reference track is not shown on the card, the prompt enhancer is skipped, and the job shows up in history as a compose job.
Style Tags#
A one-shot read of the track. No modal, no queue -- it runs immediately and replies privately with:
**style tags:** ...
Output is truncated at 1800 characters. If the model cannot make sense of the track you get Couldn't read style tags from that track.
Transcribe#
A one-shot lyric transcription, language auto-detected. Replies privately with:
**transcribed lyrics:** ...
Anything over 1800 characters comes back as a lyrics.txt file attachment instead. Nothing recognisable gives Couldn't transcribe lyrics from that track.
The first run of either is slow
Style Tags and Transcribe load their own models, and the very first use after the bot starts downloads them. Eimi waits up to 6 minutes before giving up. On a warm bot they are quick; on a cold one, or if the download stalls, you get a failure message and nothing else. This is one GPU in somebody's house, not a service, so cold starts happen.
Errors you may see#
| Message | Cause |
|---|---|
Access denied. |
No bot access |
โ No image found in that message. |
Nothing usable on the message |
โ Failed to download image. |
The image URL could not be fetched, even after a re-sign and a proxy fallback |
โ Failed to extract frame from video. Make sure ffmpeg is installed. |
The first-frame extraction failed or timed out |
โ Failed to convert {FORMAT} format. |
The image decoded but would not convert |
โ ComfyUI not available. / โ Failed to upload image to ComfyUI. |
The backend is down or refused the upload |
โ Unknown model: z_image |
The Z-Image gap described above |
โ {Name} is VIP-only. |
A VIP model reached without VIP |
โ ๏ธ Please describe the style you want. |
Custom style submitted with an empty prompt |
Couldn't process that audio. |
Conversion or upload of the audio failed |
Audio actions unavailable. |
The audio half of the bot is not loaded |
See also#
- /edit -- the same edit menu as a slash command, with every model detailed
- restyle -- style presets only, in a simpler menu
- describe -- read the image back as text instead of editing it
- /compose -- generate music from a text prompt instead of an existing track
- Detailer -- what the ๐งฌ button opens
- Right-click menus -- the other four