Discord Embed Builder
free, no account and nothing to install.
build an embed next to a preview that looks like Discord, then copy the JSON or send it straight to a webhook. the role colour helper scores any colour on Discord’s dark, light and midnight themes.
Live preview
Vorla WebhookAPP
Your embed appears here. Start typing on the left.
0 / 6,000 total characters
Embed JSON
add some content and the JSON shows up here.
i leave empty keys out. this is exactly the {"embeds":[…]} payload a bot or webhook expects.
Send via webhook
i only use this for this one request. it’s never stored or logged, and it goes nowhere except straight to Discord from your browser.
Discord applies these per message, not per webhook, so one webhook can post as a few different looking bots. leave both blank to use whatever the webhook was made with.
0 / 2,000
it sends straight from your browser to Discord. some ad blockers and privacy extensions block requests to discord.com, so if it fails straight away, allow this page or copy the JSON instead.
Saved embeds
save the whole form as a template you can load again. webhook URLs are never saved.
- nothing saved yet. build an embed, give it a label, then save it.
Discord embed limits
the meters on this page track all of these live, the combined 6,000 total too.
| Part | Limit |
|---|---|
| Title | 256 characters |
| Description | 4,096 characters |
| Fields | 25 fields, name 256 and value 1,024 each |
| Author name | 256 characters |
| Footer text | 2,048 characters |
| Everything combined | 6,000 characters per message, across all embeds |
| Message content | 2,000 characters, separate from the 6,000 |
Twelve popular role colours, scored
just a handy list, not Discord’s own picker palette. every score is the worse of that theme’s chat pane and member list.
| Colour | Dark | Light | Midnight | Worst |
|---|---|---|---|---|
| #E74C3C | 3.31 | 3.44 | 5.09 | 3.31:1 |
| #E67E22 | 4.44 | 2.57 | 6.82 | 2.57:1 |
| #F1C40F | 7.61 | 1.50 | 11.70 | 1.50:1 |
| #2ECC71 | 6.01 | 1.89 | 9.25 | 1.89:1 |
| #1ABC9C | 5.25 | 2.17 | 8.07 | 2.17:1 |
| #3498DB | 4.01 | 2.84 | 6.16 | 2.84:1 |
| #9B59B6 | 2.71 | 4.20 | 4.16 | 2.71:1 |
| #E91E63 | 2.91 | 3.92 | 4.47 | 2.91:1 |
| #FF5722 | 4.00 | 2.85 | 6.14 | 2.85:1 |
| #607D8B | 2.89 | 3.94 | 4.45 | 2.89:1 |
| #FFFFFF | 12.64 | 1.00 | 19.44 | 1.00:1 |
| #99AAB5 | 5.28 | 2.16 | 8.12 | 2.16:1 |
Build a role hierarchy
name the roles you plan to make, then copy the whole list. each row shows its worst score across the three themes, so you can spot a role that reads badly before anyone joins.
- Dark 3.31 · Light 3.44 · Midnight 5.09 worst 3.31:1
- Dark 4.44 · Light 2.57 · Midnight 6.82 worst 2.57:1
- Dark 4.01 · Light 2.84 · Midnight 6.16 worst 2.84:1
- Dark 5.28 · Light 2.16 · Midnight 8.12 worst 2.16:1
Role palette, scored on Discord dark, light and midnight Built with vorla.dev/discord/embed-builder/ Owner #E74C3C worst 3.31:1 (AA large only) Admin #E67E22 worst 2.57:1 (Fail) Moderator #3498DB worst 2.84:1 (Fail) Member #99AAB5 worst 2.16:1 (Fail)
How it works
How to use the builder
- Build it. every part is optional. fill in what you want and the preview updates as you type. description and field values render Discord markdown.
- Watch the meters. Discord flat out rejects embeds over its limits, so if a meter goes past its limit, sending fails until you cut it down.
- Ship it. copy the JSON for your bot code, or paste a webhook URL and send it straight into a channel.
Where do I get a webhook URL? in Discord: Server Settings, Integrations, Webhooks, New Webhook, pick a channel, then Copy Webhook URL. you need the Manage Webhooks permission. treat the URL like a password, anyone who has it can post in that channel.
embeds are the cards bots and webhooks post, with a coloured side bar, fields, images and a footer. writing the JSON by hand means guessing what it’ll look like and running into limits. this builder shows you exactly what Discord will show while you type, down to the inline field grid and the 80px thumbnail. it all runs in your browser. the webhook send is one direct POST from your browser to Discord with Content-Type: application/json, no server in the middle, and the webhook URL is never stored.
How Discord picks which colour a name gets
a member’s name takes the colour of their highest role that has one. roles left on the default colour get skipped, so an Admin role at the top of the list with no colour set falls through to whatever coloured role is below it. position decides this, not permissions, so drag the role up or down in Server Settings, Roles to change which colour wins.
Discord stores the colour as a 24-bit integer, not a string, which is why the API, audit logs and most bots show #E74C3C as 15158332. the one value that acts weird is #000000. it turns into 0, and Discord reads 0 as no colour at all, so a role set to pure black counts as uncoloured and gets skipped like any other default role.
Why no role colour passes AA on both themes
dark theme puts the name on #313338 in chat and #2b2d31 in the member list. light theme uses #ffffff and #f2f3f5. those backgrounds are so far apart that one colour can’t get 4.5:1 against both. score the chat panes alone and the maths caps the worse of the two ratios at 3.56:1. count each theme’s member list too (that’s what the scores in the table above do) and the cap drops to 3.37:1, at a relative luminance of about 0.230. anything lighter gains on dark and loses on light at the same rate.
of the twelve popular role colours above, only #E74C3C gets close to that best case, at 3.31:1 on dark and 3.44:1 on light. #F1C40F scores 7.61:1 on dark and 1.50:1 on light, so it’s bright and clear for most of your server and close to invisible for anyone on light theme. the realistic target is 4.5:1 on the theme your members actually use, and above 3:1 on the other. Balance both themes does exactly that. it moves the lightness until the two scores are as even as they can get, and leaves hue and saturation alone so the colour still looks like the one you picked.
Gradient and holographic role styles
Enhanced Role Styles is a Server Boost perk on its own: 3 boosts put on that perk, with no Boost Level needed. a gradient role takes two stops and blends them across the name. Holographic is one fixed preset you can’t recolour.
the thing to check is the fallback. wherever the style doesn’t show, the name falls back to a flat colour, so a gradient where both stops fail contrast fails there too. the gradient mode above scores both stops and shows the worse one, because that’s the number that tells you what your members will actually read.
Questions
Is my webhook URL stored anywhere?
No. The URL only lives in the input box on your screen and gets used for the one POST request your browser makes straight to Discord. It’s never saved, logged or sent to any other server, and reloading the page wipes it.
Why did sending my embed fail?
Usually one of these: the webhook was deleted or the URL is wrong (Discord answers 401 or 404), something went over a limit (400, so look for a meter over its limit), you’re rate limited (429, so wait a moment), or a browser extension or ad blocker stopped the request to discord.com before it left your machine.
Can I send more than one embed at once?
This builder makes one embed, but a webhook message takes up to 10. Copy the JSON and duplicate the object inside the embeds array. The 6,000-character total then counts across all of them together.
Which parts of an embed support markdown?
The description and field values take full markdown, masked [text](url) links included. Titles and field names show basic formatting like bold and italic. Author names and footer text are always plain text.
Why doesn’t my image show in the preview?
It has to be a direct https:// link to an image file, and some hosts block their images on other sites. attachment://file.png links stay in the JSON but only work from bot code that uploads the file with it.
How do I change a role’s colour in Discord?
Server Settings, Roles, pick the role, then set the colour under Display. On mobile it’s the same path from the server name menu. Discord stores the value as a 24-bit integer, which is why bots and audit logs show #E74C3C as 15158332 and not as a hex code.
Why does my role colour vanish in Discord’s light theme?
Light theme puts the same name on #FFFFFF instead of dark theme’s #313338. A colour pale enough to glow on dark theme has almost no contrast on white, and a colour dark enough to read on white looks muddy on dark. Check the light column here before you save.
How do I get gradient or holographic role colours?
Enhanced Role Styles is a Server Boost perk on its own: someone with Manage Server puts 3 boosts on that perk. It isn’t tied to a Boost Level, so 3 boosts is all it needs. Gradient and Holographic then show up next to the solid colour picker in the role Display tab.
What are the best Discord role colours?
The ones that stay readable on whichever theme your members actually use and stay above 3:1 on the other. Of the twelve popular role colours on this page, #E74C3C is the most balanced at 3.31:1 on dark and 3.44:1 on light. #F1C40F and #FFFFFF are great on dark and pretty much invisible on light.
Can a role colour pass AA contrast on both dark and light theme?
No. Score the chat panes alone and the maths caps the worse of the two ratios at 3.56:1. Count the member list backgrounds too and the cap is 3.37:1, at a relative luminance of about 0.230. 4.5:1 on both can’t happen, so aim for 4.5:1 on your main theme and above 3:1 on the other.
Does a role’s colour affect anything besides the name?
It colours the name in the member list, above messages, in mentions and in the role pill in Server Settings. It has no effect on permissions, on who can see the role or on channel access. Setting a role to #000000 does nothing at all, because Discord reads 0 as no colour and falls through to the next coloured role.