Node.js client for the unofficial MidJourney api.
English / 中文文档
To run the included example, you must have Node.js installed. Then, run the following commands in the root directory of this project:
-
clone the repository
git clone https://github.com/erictik/midjourney-client.git cd midjourney-client -
install dependencies
yarn # or npm npm install -
set the environment variables
-
Login Discord
F12ORCtrl + Shift + I(orCommand + Option + Ion Mac) to open the developer tools AND paste the following code into the consolewindow.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");
-
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
.envfile 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
-
Install
npm i midjourney # or yarn add midjourney -
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 }
-
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);
-
/imaginevariationupscalererollblendzoomoutvary -
/info -
/fastand/relax -
/prefer remix -
variation (remix mode) -
/describe -
/shorten -
/settingsreset - verify human
- proxy
- niji bot
- custom zoom
- autoload command payload
- midjourney-ui next.js + vercel
- midjourney-discord-bot
- phrame
- guapitu
Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities.
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.