Skip to content

erictik/midjourney-api

Repository files navigation

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

  • Login DiscordF12 OR Ctrl + Shift + I (or Command + Option + I on Mac) to open the developer tools AND paste the following code into the console

    window.webpackChunkdiscord_app.push([
      [Math.random()],
      {},
      (req) => {
        for (const m of Object.keys(req.c)
          .map((x) => req.c[x].exports)
          .filter((x) => x)) {
          if (m.default && m.default.getToken !== undefined) {
            return copy(m.default.getToken());
          }
          if (m.getToken !== undefined) {
            return copy(m.getToken());
          }
        }
      },
    ]);
    console.log("%cWorked!", "font-size: 50px");
    console.log(`%cYou now have your token in the clipboard!`, "font-size: 16px");

    OR use network your Discord TOKEN

  • Join my discord server

    export SERVER_ID="1082500871478329374"
    export CHANNEL_ID="1094892992281718894"
    
  • OR Create a server and Invite Midjourney Bot to Your Server

    # How to get server and channel ids:
    # when you click on a channel in your server in the browser
    # expect to have the follow URL pattern
    # `https://discord.com/channels/$SERVER_ID/$CHANNEL_ID`
    export SERVER_ID="your-server-id"
    export CHANNEL_ID="your-channel-id"
  • wirte your token to .env file or set the environment variables

      #example variables, please set up yours
    
      export SERVER_ID="1082500871478329374"
      export CHANNEL_ID="1094892992281718894"
      export SALAI_TOKEN="your-discord-token"
  • Then, run the example with the following command:

    npx tsx example/imagine-ws.ts

    OR

    yarn example:imagine
    # or npm
    npm run example:imagine
  • more example

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