
Security News
AGENTS.md Gains Traction as an Open Format for AI Coding Agents
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
midjourney
Advanced tools
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 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");
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
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);
/imagine
variation
upscale
reroll
blend
zoomout
vary
/info
/fast
and /relax
/prefer remix
variation (remix mode)
/describe
/shorten
/settings
reset
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.
FAQs
Node.js client for the unofficial MidJourney API.
The npm package midjourney receives a total of 1,196 weekly downloads. As such, midjourney popularity was classified as popular.
We found that midjourney demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.