Midjourney 前置指令详解:-blend、-info、-subscribe

Midjourney 指令演示
Midjourney 操作界面

前言

在本文中,我们将深入探讨 Midjourney 的几大前置指令:/blend、/info 和 /subscribe。这些指令不仅能够提升你的 AI 绘画创作体验,还能帮助你更好地管理账户信息。通过本文的详细解析,你将掌握这些指令的使用技巧,从而更高效地利用 Midjourney 的强大功能。

Midjourney 前置指令 /blend

/blend 指令 允许你快速上传 2 到 5 张图片,并根据这些图片的概念与美学特征进行混合。这一功能类似于一个“图片搅拌机”,将多张图片的特征融合在一起,生成一张全新的图像。

混合模式的基本使用

  1. 上传图片:在 /blend 模式下,你可以直接从本地上传 2 到 5 张图片。与 /imagine 模式不同,/blend 支持本地图片的上传,无需提供在线地址。

  2. 生成效果:生成的图片会融合上传图片的主要特征。例如,上传一张短发女孩的照片和一张带有数字的 T 恤照片,生成的图片将同时包含这两张图片的元素。尽管 AI 算法有时无法完全还原细节,但最终的图片仍然具有创意性和独特性。

  3. 添加更多图片:你可以通过点击界面中的空白区域,添加更多的图片槽位,最多支持 5 张图片的混合。

  4. 分辨率设置:为了避免生成图片时出现白边,你可以通过“dimensions”选项设置生成图片的尺寸和比例。目前支持三种预设比例:肖像(Portrait)、正方形(Square)和风景(Landscape)。

/blend 使用注意事项

  • 仅支持图片混合:/blend 只能混合图片,无法添加文本提示词。
  • 图片尺寸一致:上传图片的尺寸最好与生成结果一致,否则容易出现白边。
  • 最多 5 张图片:如果需要混合超过 5 张图片,建议使用 /imagine 命令。
  • 自定义设置:/setting 和其他自定义后缀在 /blend 中依然有效,但无法主动设置。

账户管理相关的前置指令

在 Midjourney 的使用过程中,账户管理同样重要。通过 /info 和 /subscribe 指令,你可以快速获取账户状态、订阅详情等关键信息,确保创作体验的顺利进行。

Midjourney 前置指令 /info

/info 指令 用于获取与账户相关的重要信息,包括用户 ID、订阅状态、生成图像的模式以及快速生成时间的剩余情况。通过 /info,你可以更好地管理和规划图像生成任务。

Midjourney 前置指令 /subscribe

/subscribe 指令 是 Midjourney 的付费功能,用于管理账户的订阅状态。通过点击该指令,你可以选择并购买相应的会员服务,解锁更多功能和特权。

小结

本文详细介绍了 Midjourney 的几大前置指令,包括 /blend、/info 和 /subscribe。通过掌握这些指令的使用方法,你将能够更高效地进行 AI 绘画创作,并更好地管理账户信息。随着 AI 技术的不断进步,AI 绘画将为艺术创作带来更多可能性,推动艺术与技术的深度融合。

👉 野卡 | 一分钟注册,轻松订阅海外线上服务

python

示例代码:Midjourney 图像生成模型

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, utils
from PIL import Image
import numpy as np
import cv2
import os
import random

class PaintingDataset(Dataset):
def init(self, root_dir, transform=None):
self.root_dir = root_dir
self.transform = transform
self.image_files = os.listdir(root_dir)

def __len__(self):
    return len(self.image_files)

def __getitem__(self, idx):
    img_name = os.path.join(self.root_dir, self.image_files[idx])
    image = Image.open(img_name).convert('RGB')
    if self.transform:
        image = self.transform(image)
    return image

class ResidualBlock(nn.Module):
def init(self, in_channels):
super(ResidualBlock, self).init()
self.conv_block = nn.Sequential(
nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1),
nn.InstanceNorm2d(in_channels),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1),
nn.InstanceNorm2d(in_channels)
)

def forward(self, x):
    return x + self.conv_block(x)

class Generator(nn.Module):
def init(self):
super(Generator, self).init()
self.downsampling = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=7, stride=1, padding=3),
nn.InstanceNorm2d(64),
nn.ReLU(inplace=True),
nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),
nn.InstanceNorm2d(128),
nn.ReLU(inplace=True),
nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),
nn.InstanceNorm2d(256),
nn.ReLU(inplace=True)
)
self.residuals = nn.Sequential(*[ResidualBlock(256) for _ in range(9)])
self.upsampling = nn.Sequential(
nn.ConvTranspose2d(256, 128, kernel_size=3, stride=2, padding=1, output_padding=1),
nn.InstanceNorm2d(128),
nn.ReLU(inplace=True),
nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1, output_padding=1),
nn.InstanceNorm2d(64),
nn.ReLU(inplace=True),
nn.Conv2d(64, 3, kernel_size=7, stride=1, padding=3),
nn.Tanh()
)

def forward(self, x):
    x = self.downsampling(x)
    x = self.residuals(x)
    x = self.upsampling(x)
    return x

class Discriminator(nn.Module):
def init(self):
super(Discriminator, self).init()
self.model = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=4, stride=2, padding=1),
nn.LeakyReLU(0.2, inplace=True),
nn.Conv2d(64, 128, kernel_size=4, stride=2, padding=1),
nn.InstanceNorm2d(128),
nn.LeakyReLU(0.2, inplace=True),
nn.Conv2d(128, 256, kernel_size=4, stride=2, padding=1),
nn.InstanceNorm2d(256),
nn.LeakyReLU(0.2, inplace=True),
nn.Conv2d(256, 512, kernel_size=4, stride=2, padding=1),
nn.InstanceNorm2d(512),
nn.LeakyReLU(0.2, inplace=True),
nn.Conv2d(512, 1, kernel_size=4, stride=1, padding=1)
)

def forward(self, x):
    return self.model(x)

def initialize_weights(model):
for m in model.modules():
if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):
nn.init.normal_(m.weight.data, 0.0, 0.02)
elif isinstance(m, nn.InstanceNorm2d):
nn.init.normal_(m.weight.data, 1.0, 0.02)
nn.init.constant_(m.bias.data, 0)

device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
generator = Generator().to(device)
discriminator = Discriminator().to(device)
initialize_weights(generator)
initialize_weights(discriminator)

transform = transforms.Compose([
transforms.Resize(256),
transforms.ToTensor(),
transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])

dataset = PaintingDataset(root_dir=’path_to_paintings’, transform=transform)
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)

criterion = nn.MSELoss()
optimizerG = optim.Adam(generator.parameters(), lr

上一篇 2025年7月10日
下一篇 2025年7月10日

热门推荐