erictik / midjourney-api

MidJourney client. Unofficial Node.js client
Apache License 2.0
1.69k stars 283 forks source link
midjourney midjourney-client

midjourney-client

Node.js client for the unofficial MidJourney api.

English / 中文文档

Discord server npm version

What's new

Example

To run the included example, you must have Node.js installed. Then, run the following commands in the root directory of this project:

  1. clone the repository

    git clone https://github.com/erictik/midjourney-client.git
    cd midjourney-client
  2. install dependencies

    yarn
    # or npm
    npm install
  3. set the environment variables

Usage

  1. Install

    npm i midjourney
    # or
    yarn add midjourney
  2. config param

    export interface MJConfigParam {
     SalaiToken: string; //DISCORD_TOKEN
     ChannelId?: string; //DISCORD_CHANNEL_ID
     ServerId?: string; //DISCORD_SERVER_ID
     BotId?: typeof MJBot | typeof NijiBot; //DISCORD_BOT_ID MJBot OR NijiBot
     Debug?: boolean; // print log
     ApiInterval?: number; //ApiInterval request api interval
     Limit?: number; //Limit of get message list
     MaxWait?: number;
     Remix?: boolean; //Remix:true use remix mode
     Ws?: boolean; //Ws:true use websocket get discord message (ephemeral message)
     HuggingFaceToken?: string; //HuggingFaceToken for verify human
     SessionId?: string;
     DiscordBaseUrl?: string;
     ImageProxy?: string;
     WsBaseUrl?: string;
     fetch?: FetchFn; //Node.js<18 need node.fetch Or proxy
     WebSocket?: WebSocketCl; //isomorphic-ws Or proxy
    }
  3. Use Imagine 、Variation and Upscale

    import { Midjourney } from "midjourney";
    const client = new Midjourney({
     ServerId: <string>process.env.SERVER_ID,
     ChannelId: <string>process.env.CHANNEL_ID,
     SalaiToken: <string>process.env.SALAI_TOKEN,
     Debug: true,
     Ws: true, //enable ws is required for remix mode (and custom zoom)
    });
    await client.init();
    const prompt =
     "Christmas dinner with spaghetti with family in a cozy house, we see interior details , simple blue&white illustration";
    //imagine
    const Imagine = await client.Imagine(
     prompt,
     (uri: string, progress: string) => {
       console.log("loading", uri, "progress", progress);
     }
    );
    console.log(Imagine);
    if (!Imagine) {
     console.log("no message");
     return;
    }
    //U1 U2 U3 U4 V1 V2 V3 V4  "Vary (Strong)" ...
    //⬅️,⬆️,⬇️,➡️
    const V1CustomID = Imagine.options?.find((o) => o.label === "V1")?.custom;
    if (!V1CustomID) {
     console.log("no V1");
     return;
    }
    // Varition V1
    const Varition = await client.Custom({
     msgId: <string>Imagine.id,
     flags: Imagine.flags,
     customId: V1CustomID,
     content: prompt, //remix mode require content
     loading: (uri: string, progress: string) => {
       console.log("loading", uri, "progress", progress);
     },
    });
    console.log(Varition);
    const U1CustomID = Imagine.options?.find((o) => o.label === "U1")?.custom;
    if (!U1CustomID) {
     console.log("no U1");
     return;
    }
    // Upscale U1
    const Upscale = await client.Custom({
     msgId: <string>Imagine.id,
     flags: Imagine.flags,
     customId: U1CustomID,
     loading: (uri: string, progress: string) => {
       console.log("loading", uri, "progress", progress);
     },
    });
    if (!Upscale) {
     console.log("no Upscale");
     return;
    }
    console.log(Upscale);
    const zoomout = Upscale?.options?.find((o) => o.label === "Custom Zoom");
    if (!zoomout) {
     console.log("no zoomout");
     return;
    }
    // Custom Zoom
    const CustomZoomout = await client.Custom({
     msgId: <string>Upscale.id,
     flags: Upscale.flags,
     content: `${prompt} --zoom 2`, // Custom Zoom  require content
     customId: zoomout.custom,
     loading: (uri: string, progress: string) => {
       console.log("loading", uri, "progress", progress);
     },
    });
    console.log(CustomZoomout);

route-map


Projects


Support

If you find it valuable and would like to show your support, any donations would be greatly appreciated. Your contribution helps me maintain and improve the program.

  

Buy Me a Coffee

Star History

Star History Chart