Welcome Image Generator

Pick a template, tune it, copy the link. Every setting is a parameter in the URL.

Playground

template

Scale the background to the card width (840 px). With "false" the card grows to the background width.

Crop the background to the card height (280 px). With "false" the card grows to the background height.

The defaults are filled in.
Preview of your welcome card

    Your URL

    https://api.discorddevtools.xyz/welcome-image-generator/generate.png

    The URL is the whole tool

    Every setting is one piece of the link. Change a piece, and the matching part of the card changes. Point at a piece to see what it shapes.

    The example link, in full:

    https://api.discorddevtools.xyz/welcome-image-generator/generate.png?title=Welcome%21&username=lunar_fern&text=Enjoy+your+stay%21&image=https://cdn.discordapp.com/embed/avatars/3.png&borderColor=404eed&background=none&backgroundColor=2b2d31
    A welcome card for lunar_fern, the card the example link above builds

    Pick a template

    Each layout has its own settings. Choose one, then tune it in the playground.

    Quickstart

    Use the link anywhere an image URL fits. These snippets follow the card you build above.

    It is a plain GET request. Paste the link where an image URL fits, or open it in your browser.

    Spaces become +, colors are hex without #, and anything you leave out uses the template's default.

    https://api.discorddevtools.xyz/welcome-image-generator/generate.png

    Parameters

    Every setting is a query parameter. Leave one out and the template's default is used. Bad values fall back to the default too, so a link never breaks an embed.

    Text 9
    title v1
    string, up to 100 characters default Welcome!

    First line, usually a greeting. Placeholders: {username}, {displayName}, {server}, {memberCount}.

    Classic: First line, usually a greeting.

    username v1
    string, up to 100 characters default varies by template

    Account name. Shown as the name when displayName is empty, otherwise as the @handle. Empty shows "Unknown".

    Classic: Second line, the member name (shown large).

    displayName
    string, up to 100 characters default empty

    Name shown as the primary name. When it is set, the @username is shown smaller where there is room.

    Classic: Shown as the name instead of username when set (the discriminator is then hidden).

    server
    string, up to 100 characters default empty

    Server name, used by the {server} placeholder. Without it {server} reads "this server".

    Classic: Server name for the {server} placeholder in title and text. Not drawn by itself.

    memberCount
    number from 0 to 999999999 default 0

    Shown as "Member #1,234" where there is room, and available as {memberCount}. 0 hides it.

    Classic: Member count for the {memberCount} placeholder in title and text. Not drawn by itself.

    Minimal: Shown as "Member #1,234" at the end of the title line when it fits, and available as {memberCount}. 0 hides it.

    discriminator v1
    string, up to 4 characters default empty

    Legacy four digit discriminator, shown as #1234. Hidden when empty, 0 or anything else.

    Classic: Legacy four digit discriminator, drawn as #1234 after the name. Hidden when empty, "0" or anything else.

    Discord has phased out discriminators, so leave this out in new links. Links that still pass four digits keep working.

    text v1
    string, up to 200 characters default Enjoy your stay!

    Short message. Accepts the same placeholders as title.

    Classic: Third line, a short message.

    allCaps v1
    boolean default false

    Set to "true" to write all text in capital letters.

    font
    one of uni-sans-heavy, geist, geist-mono default varies by template in Centered, Card, Banner, Minimal, Split

    Typeface: uni-sans-heavy (Discord display), geist (clean sans) or geist-mono (monospace). Other scripts, symbols and emoji fall back to bundled Noto fonts.

    Colors 10
    titleColor v1
    color, hex without # default varies by template

    Title color, hex without #.

    Classic: Title colour, hex without #.

    usernameColor v1
    color, hex without # default varies by template

    Name color, hex without #.

    Classic: Name colour, hex without #.

    discriminatorColor v1
    color, hex without # default varies by template

    Color of the #discriminator, the @handle and the member count, hex without #.

    Classic: Discriminator colour, hex without #.

    textColor v1
    color, hex without # default varies by template

    Message color, hex without #.

    Classic: Message colour, hex without #.

    borderColor v1
    color, hex without # default varies by template in Classic, Centered, Card, Banner, Split

    Avatar border color, hex without #.

    Classic: Colour of the avatar border, hex without #.

    backgroundColor v1
    color, hex without # default varies by template

    Base color behind everything, hex without #.

    Classic: Colour behind the background image (visible with background=none), hex without #.

    Split: Base color of the text side, hex without #.

    accentColor
    color, hex without # default 404eed in Centered, Card, Banner, Minimal, Split

    Accent of the template (bar, panel or chip), hex without #.

    Minimal: Color of the avatar border, hex without #.

    Split: Color of the avatar panel, hex without #.

    backgroundGradient
    string default empty in Centered, Card, Banner, Minimal, Split

    Gradient behind the background image: two or three hex colors separated by commas, for example 404eed,5865f2 (use "none" for no gradient). Empty: the template default.

    gradientAngle
    number from 0 to 360 default varies by template in Centered, Card, Banner, Minimal, Split

    Gradient direction in degrees: 0 points up, 90 right, 180 down.

    overlayColor
    color, hex without # default 1e1f22 in Centered, Card, Banner, Minimal, Split

    Color of the overlay above the background (see overlayOpacity), hex without #.

    Images 4
    image v1
    http or https URL default empty

    Avatar image URL (PNG, JPEG, WebP or GIF, first frame). Empty or unreachable uses the default avatar.

    Classic: Avatar image URL (PNG, JPEG, WebP or GIF). Empty uses the default avatar.

    background v1
    http or https URL default empty

    Background image URL, or "none" for no image. Empty uses the template default. Unreachable images fall back to it.

    Classic: Background image URL, or "none" for a plain colour. Empty uses the default background.

    backgroundBlur
    number from 0 to 40 default varies by template in Centered, Card, Banner, Minimal, Split

    Blur radius of the background image in pixels, 0 to 40.

    Card: Blur radius of the background image in pixels, 0 to 40. The card blurs it by default.

    overlayOpacity
    number from 0 to 1 default varies by template in Centered, Card, Banner, Minimal, Split

    Opacity of the overlay color above the background, 0 to 1.

    Layout 4
    backgroundAdjustWidth v1
    boolean default true in Classic

    Scale the background to the card width (840 px). With "false" the card grows to the background width.

    backgroundAdjustHeight v1
    boolean default true in Classic

    Crop the background to the card height (280 px). With "false" the card grows to the background height.

    avatarShape
    one of circle, rounded, square default varies by template in Centered, Card, Banner, Minimal, Split

    Avatar shape: circle, rounded or square.

    textAlign
    one of left, center, right default center in Centered

    Alignment of the avatar and the text: left, center or right.

    one of left, right default left in Card

    Side of the text: left puts the avatar on the right, right puts it on the left.

    Advanced 1
    autoContrast
    boolean default true in Centered, Card, Banner, Minimal, Split

    Keeps text readable: lays a scrim behind it or switches its color when contrast would be too low. Set to "false" to turn it off.

    Limits and caching

    The numbers, so you can plan around them.

    Images you send

    Remote images (image, background)
    5 MB at most, 4 s to load
    Allowed sources
    http and https URLs
    Allowed types
    PNG, JPEG, WebP, GIF (first frame)
    If an image fails to load
    the default image, or no background

    Caching

    Rendered cards stay on the server for
    7 days, then they are deleted
    Browsers and CDNs
    Cache-Control: public, max-age=86400, stale-while-revalidate=604800
    Revalidation
    ETag, and If-None-Match gets a 304
    Formats
    png, webp, jpg

    Fair use

    Rate limits are sent as headers
    RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset
    Too many requests
    429 with Retry-After
    Generator busy
    503 with Retry-After
    Bad parameter values
    use the default, you still get an image

    The names, avatar links and images you send are used only to draw your card. The privacy policy says exactly what is kept and for how long.

    Coming from v1?

    Your old links keep working and still give the classic card. A v1 link looks like this:

    https://api.discorddevtools.xyz/welcome-image-generator/generate.png?title=Welcome!&username=lunar_fern&discriminator=0

    Discord has phased out discriminators, so the discriminator parameter is deprecated. Use the member's display name as username and leave it out, or pass 0 to hide it. Everything else works as before.