三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

AI绘画实战:Flux模型+Krea风格+深度图控制完整工作流

AI绘画实战:Flux模型+Krea风格+深度图控制完整工作流

最近在尝试将AI绘画融入工作流时,发现很多新模型和工具虽然强大,但上手门槛不低。特别是像Flux这样的新秀,以及Krea这类风格化工具,网上资料要么零散,要么只讲理论,实操起来总卡在环境、提示词和效果控制上。本文旨在整合一套从模型部署、风格应用到深度图控制的完整闭环方案,手把手带你体验Flux 3,用好Krea 2的397种风格提示词,并实现深度图驱动的精准“洗图”。无论你是刚接触AI绘画的新手,还是想提升出图效率的进阶玩家,都能从中找到可直接复现的代码和配置。

1. 背景与核心概念:为什么是Flux、Krea与深度图?

在深入实操之前,我们有必要厘清这几个核心工具和技术的作用,以及它们如何协同工作,解决AI绘画中的具体痛点。

1.1 Flux模型:下一代文生图基石

Flux是由Black Forest Labs(BFL)团队开发的一系列扩散模型。相较于之前的Stable Diffusion,Flux在架构上进行了革新,采用了“Transformer扩散模型”的设计。其核心优势在于:

  • 更高的图像质量与细节:能生成更逼真、细节更丰富的图像,尤其在处理复杂场景和文本遵循度上表现突出。
  • 更强的可控性:原生支持更长的提示词,对画面元素的位置、关系理解更准确。
  • 多模态潜力:为未来的图生图、视频生成等任务打下了更好的基础。 我们常说的“Flux 3”可能指代其某个特定版本或分支(如flux-dev),本文将以目前社区中较为活跃且易于获取的版本进行演示。

1.2 Krea风格提示词库:快速统一视觉风格

Krea AI是一个专注于风格探索和应用的平台。其“风格库”功能收集并提炼了海量艺术风格,并将其编码成一套高效的提示词(Prompts)。所谓的“397种提示词”,实质上是397种经过精心调校的风格预设。使用这些提示词,你可以:

  • 一键应用风格:无需自己研究复杂的艺术术语,输入主题后附加风格词,即可获得特定画风的作品。
  • 保持风格一致性:在生成系列作品时,使用同一风格提示词能确保视觉风格的统一,极大提升工作效率。
  • 激发创作灵感:浏览不同的风格效果,可以为你的项目找到新的视觉方向。

1.3 深度图控制:从“生成”到“精确构图”

深度图(Depth Map)是一种表示图像中物体距离(深度信息)的灰度图,越近的区域越亮,越远的区域越暗。在AI绘画中,深度图控制属于“可控生成”的范畴,类似于Stable Diffusion中的ControlNet。

  • 原理:将一张参考图的深度信息提取出来,作为条件输入给生成模型(如Flux),引导模型按照参考图的构图和空间层次来生成新内容。
  • 应用场景
    • “洗图”/重绘:保留原图的整体构图和空间感,但替换全部或部分内容。例如,保持一座山的轮廓,但将其从夏季变为冬季。
    • 风格迁移:将一张照片的构图与另一种艺术风格结合。
    • 一致性生成:为视频或系列图像生成保持相同镜头视角和景深的画面。 本文的“一键洗图”即指利用深度图,快速实现对现有图像构图的复用与新内容生成。

2. 环境准备与工具说明

本次实战将在一个集成的WebUI环境中进行,它封装了模型加载、提示词输入和可控生成等功能,避免从零开始配置Python环境的繁琐。我们主要使用两个工具:

  1. Flux 运行环境:推荐使用Flux-UIComfyUI(配合Flux自定义节点)。本文示例将基于一个假设的、类似AUTOMATIC1111的WebUI(我们称之为“Flux WebUI”)进行讲解,其操作逻辑通用。
  2. 深度图生成工具:我们将使用Python的OpenCVMiDaS库来从任意图像提取深度图。这是“一键洗图”流程中的关键前置步骤。

版本与环境说明

  • 操作系统:Windows 10/11, macOS 或 Linux (Ubuntu 20.04+) 均可。本文命令以Linux/macOS的bash为例,Windows用户可在PowerShell或WSL中运行。
  • Python:需要Python 3.8-3.10。这是运行深度图提取脚本和某些WebUI后端所必需的。
  • 主要工具
    • Flux WebUI (预打包版本,已包含Flux模型)
    • 深度图生成脚本 (需自行安装依赖)
  • 硬件:建议拥有至少8GB显存的NVIDIA GPU。Flux模型对显存要求较高,纯CPU模式速度极慢。

3. 核心步骤拆解:从安装到出图

整个流程可以分解为三个核心阶段:环境搭建、风格应用、深度图控制。下面我们分步详解。

3.1 阶段一:Flux WebUI 的安装与启动

假设我们已经下载了一个预打包的Flux WebUI压缩包flux-webui.zip

# 1. 解压并进入目录 unzip flux-webui.zip cd flux-webui # 2. 启动WebUI服务器 (根据实际脚本名调整) # 通常是一个Python脚本,例如: python launch.py --listen --port 7860 # 或直接运行一个可执行文件 # ./webui.sh # 3. 访问界面 # 启动成功后,在浏览器中打开 http://localhost:7860

启动后,你应该能看到一个类似Stable Diffusion WebUI的界面,包含文生图、图生图、模型选择等选项卡。请确保在“模型”选择处,加载了Flux模型(如flux-1.1flux-dev)。

3.2 阶段二:集成Krea风格提示词库

Krea的397种风格提示词通常是一个文本文件(如krea_styles_397.txt),每行包含一个风格名称和对应的触发词。

操作步骤

  1. 获取风格列表:你可以从社区论坛或Krea的官方渠道找到这些风格词。将其保存为krea_styles.txt
  2. 在WebUI中应用
    • 在“文生图”的提示词框内,先输入你的主体描述,例如:“a majestic dragon soaring above ancient mountains”
    • 然后,从krea_styles.txt中挑选一个风格,将其触发词附加在后面。例如,选择“Synthwave”风格,其触发词可能是,synthwave neon, retro futuristic, vibrant glow
    • 完整的提示词即为:“a majestic dragon soaring above ancient mountains, synthwave neon, retro futuristic, vibrant glow”
  3. 参数设置:调整采样步数(如20-30步)、采样器(如DPM++ 2M Karras)、以及尺寸(Flux可能支持原生1024x1024)。点击生成。

风格词表示例 (krea_styles.txt片段)

# 风格名称: 触发词 Oil Painting: masterpiece, oil on canvas, textured brushstrokes, classical art Cyberpunk: cyberpunk, neon noir, rainy Tokyo, futuristic cityscape, cinematic lighting Anime: anime key visual, detailed background, vibrant colors, by Makoto Shinkai Watercolor: delicate watercolor painting, soft edges, translucent washes, artistic ...

3.3 阶段三:深度图生成与控制“洗图”

这是实现构图复用的关键。我们需要先将参考图转换为深度图,然后在图生图模式下使用。

3.3.1 使用Python脚本生成深度图

首先,创建一个Python环境并安装必要库。

# 创建并激活虚拟环境 (可选但推荐) python -m venv depth_env source depth_env/bin/activate # Windows: depth_env\Scripts\activate # 安装依赖 pip install opencv-python torch torchvision pip install timm # MiDaS 模型可以通过torch.hub加载,无需单独安装

接下来,编写深度图生成脚本generate_depth.py

# generate_depth.py import cv2 import torch import numpy as np from PIL import Image import urllib.request import os # 检查是否有GPU device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(f"Using device: {device}") # 加载MiDaS模型 (中等规模模型,平衡速度与精度) model_type = "DPT_Hybrid" # 也可以尝试 "DPT_Large" 或 "MiDaS_small" midas = torch.hub.load("intel-isl/MiDaS", model_type) midas.to(device) midas.eval() # 加载图像预处理变换 transforms = torch.hub.load("intel-isl/MiDaS", "transforms") if model_type == "DPT_Large" or model_type == "DPT_Hybrid": transform = transforms.dpt_transform else: transform = transforms.small_transform def create_depth_map(input_image_path, output_depth_path): """生成深度图并保存""" # 读取图像 img = cv2.imread(input_image_path) if img is None: raise FileNotFoundError(f"Could not read image: {input_image_path}") img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 预处理 input_batch = transform(img).to(device) # 推理 with torch.no_grad(): prediction = midas(input_batch) prediction = torch.nn.functional.interpolate( prediction.unsqueeze(1), size=img.shape[:2], mode="bicubic", align_corners=False, ).squeeze() # 后处理:归一化到0-255 depth_np = prediction.cpu().numpy() depth_min = depth_np.min() depth_max = depth_np.max() depth_normalized = (depth_np - depth_min) / (depth_max - depth_min) * 255.0 depth_normalized = depth_normalized.astype(np.uint8) # 保存深度图 depth_image = Image.fromarray(depth_normalized) depth_image.save(output_depth_path) print(f"Depth map saved to: {output_depth_path}") return depth_normalized if __name__ == "__main__": # 使用示例 input_img = "your_reference_image.jpg" # 替换为你的参考图路径 output_depth = "depth_map_output.png" if not os.path.exists(input_img): print(f"请将参考图片放置于此路径: {input_img}") else: create_depth_map(input_img, output_depth)

运行脚本:

python generate_depth.py

执行后,你会得到一张灰度图depth_map_output.png,这就是你的深度图。

3.3.2 在Flux WebUI中利用深度图“洗图”
  1. 切换到图生图:在WebUI中,找到“图生图”选项卡。
  2. 上传深度图
    • 在“图生图”区域,不要上传原始彩色参考图,而是上传刚刚生成的depth_map_output.png
    • 在某些UI中,可能有专门的“ControlNet”或“深度控制”单元。你需要启用它,并选择“深度图”作为控制类型。将深度图上传到该单元。
  3. 设置控制强度
    • 找到“控制权重”或“Conditioning Scale”参数,通常设置在0.5-1.0之间。权重越高,生成结果越严格遵循深度图的构图。
    • “起始控制步数”和“结束控制步数”可以控制深度图在生成过程的哪个阶段起作用。通常保持默认(全程控制)。
  4. 编写提示词
    • 在提示词框中,描述你想要生成的新内容。例如,参考图是一座山,你想把它变成城堡,就输入“a grand fantasy castle on a cliff, intricate details, epic lighting”
    • 同样可以附加Krea风格词,例如,digital painting, concept art, trending on ArtStation
  5. 关键参数
    • 重绘幅度:这是一个核心参数。如果你想完全改变内容但保留构图,重绘幅度(Denoising strength)应该设置得较高,例如0.7-0.9。如果只想微调,则设置较低值。
    • 采样步数与采样器:与文生图类似,选择适合的步数(如25步)和采样器。
  6. 生成:点击生成按钮。Flux模型会根据深度图的构图约束和你的新提示词,生成一张全新的图像。

4. 完整实战案例:将风景照转为赛博朋克城市

让我们通过一个具体案例,串联所有步骤。

目标:将一张普通的山峰风景照,利用深度图控制,重绘为一座赛博朋克风格未来城市的夜景。

4.1 准备素材

  • 参考图:mountain.jpg(一张清晰、有前景和远景层次的山峰照片)。
  • 风格词:从Krea库中选择Cyberpunk风格,触发词为cyberpunk, neon lights, rainy, futuristic metropolis, cinematic, blade runner

4.2 生成深度图

运行我们的generate_depth.py脚本,生成mountain_depth.png

4.3 WebUI 操作流程

  1. 启动Flux WebUI,确保Flux模型已加载。
  2. 进入“图生图”页面。
  3. “ControlNet”单元(或深度控制区域):
    • 启用单元。
    • 预处理器选择None(因为我们已上传处理好的深度图)。
    • 模型选择control_v11f1p_sd15_depth或类似的深度控制模型(注意:Flux可能需要特定的适配器,请根据你的WebUI插件选择对应Flux的深度控制模型。如果暂无,可使用常规深度模型,效果可能稍逊)。
    • 上传mountain_depth.png
    • 控制权重设置为0.8
  4. 提示词框输入:
    a towering cyberpunk cityscape at night, replaced the mountain, countless neon signs, flying cars, heavy rain, reflective wet streets, cyberpunk, neon lights, rainy, futuristic metropolis, cinematic, blade runner
    (提示词前半部分描述新场景,后半部分附加Krea风格词)
  5. 负面提示词(可选):输入blurry, ugly, deformed, low quality以规避低质量生成。
  6. 参数设置
    • 采样步数:30
    • 采样器:DPM++ 2M Karras
    • 图片尺寸:根据深度图尺寸设置,例如1024x768
    • 重绘幅度:0.85(高强度重绘以彻底改变内容)
  7. 点击生成

4.4 结果与调整

首次生成可能不会完美。你可以根据结果进行微调:

  • 城市细节不够:增加控制权重(如到1.0),或在提示词中增加更具体的描述,如“intricate building facades with holographic advertisements”
  • 构图扭曲:降低控制权重(如到0.6),或降低重绘幅度(如到0.75)。
  • 风格不强烈:检查风格词是否准确,或尝试组合多个风格词。

多次尝试后,你将得到一张既保留了原风景照中山峰轮廓与空间层次,又完全呈现出赛博朋克城市风貌的图片,实现了高质量的“洗图”。

5. 常见问题与排查思路

在整合使用Flux、Krea风格和深度图的过程中,你可能会遇到以下典型问题。

问题现象可能原因解决思路
WebUI启动失败或无法加载模型1. 显存不足。
2. 模型文件损坏或路径错误。
3. Python依赖冲突。
1. 检查GPU显存,尝试降低分辨率或使用--medvram参数启动。
2. 确认Flux模型文件(.safetensors或.ckpt)已放置在正确的models目录下。
3. 尝试在干净的Python虚拟环境中重新安装WebUI依赖。
生成图像模糊或质量差1. 采样步数过低。
2. 提示词过于简单或矛盾。
3. Flux模型版本问题。
1. 将采样步数提高到25-40。
2. 优化提示词,使用更具体、公认有效的描述词组合。参考Krea风格词的构成。
3. 尝试不同的Flux模型变体(如flux-devvsflux-1.1)。
深度图控制无效,生成图像与构图无关1. ControlNet单元未正确启用或模型不匹配。
2. 控制权重设置过低。
3. 上传的不是深度图,而是原图。
1. 确保ControlNet单元“启用”复选框已勾选,并正确选择了深度图模型。
2. 将控制权重提高到0.7以上。
3. 确认上传的是generate_depth.py输出的灰度深度图。
风格词效果不明显1. 风格词与主体描述冲突。
2. 风格词在提示词中位置太后,权重低。
3. 该风格词对当前模型(Flux)适配性差。
1. 调整提示词语序,确保风格词紧跟在主体描述之后。
2. 使用提示词权重语法,如(cyberpunk:1.3)来增强风格词影响力。
3. 尝试其他同类型风格词,或手动组合多个描述词来模拟该风格。
生成速度非常慢1. 使用CPU模式运行。
2. 图片分辨率设置过高。
3. 同时启用了多个高负载的ControlNet。
1. 确认WebUI使用的是GPU(CUDA)。启动时查看终端日志。
2. 适当降低生成图片的宽高,或使用Tiled VAE等显存优化扩展。
3. 只启用必要的ControlNet单元。

6. 最佳实践与进阶技巧

掌握了基础流程后,遵循以下实践能让你的工作流更高效、产出更可控。

6.1 提示词工程优化

  • 结构化提示词:采用[主体描述], [细节描述], [风格/质量词], [艺术家/画风参考]的结构。例如:“A samurai in armor, standing in a bamboo forest, detailed fabric, dramatic lighting, ukiyo-e woodblock print, by Yoshitoshi”
  • 使用Krea风格库作为灵感库:不要局限于直接复制粘贴。分析你喜欢的风格词是由哪些关键词构成的(如cinematic lighting, volumetric fog, unreal engine 5),学习并组合它们来创造自己的风格。
  • 负面提示词是另一半:积极使用负面提示词来排除不想要的元素(如deformed, blurry, bad anatomy)和特定风格(如不想太写实可以加photorealistic, photo)。

6.2 深度图控制进阶

  • 预处理参考图:对于构图复杂的参考图,可以在Photoshop或GIMP中手动调整深度图的对比度,强化你希望控制的主要边缘。
  • 多ControlNet组合:如果WebUI支持,可以同时使用深度图控制构图,再用Canny或Scribble控制边缘细节,用OpenPose控制人物姿态,实现多重约束。
  • 控制时机:实验“起始控制步数”。有时在生成中期(例如从第0.3步开始)才加入深度控制,能给模型更多自由发挥初期构图的空间,可能产生更有创意的结果。

6.3 工作流集成与自动化

  • 批量处理:编写一个简单的Shell脚本或Python脚本,自动化“生成深度图 -> 调用WebUI API生成图片”的流程,用于处理大量图片。
  • 参数网格搜索:对于重要项目,可以固定提示词和深度图,对控制权重重绘幅度采样器等关键参数进行小范围的网格搜索,生成多组结果以供选择。
  • 结果管理:养成好习惯,将成功的生成参数(包括完整的提示词、负面提示词、所有滑块数值、模型名称、使用的风格词)保存在文本文件或专门的工具中,方便复现和迭代。

6.4 关于Flux模型的特别说明

  • 模型变体:关注社区动态,flux-devflux-1.1等不同版本在细节表现、提示词遵循度和生成速度上可能有差异。选择最适合你当前任务的版本。
  • 官方与社区资源:Black Forest Labs的官方Discord和Hugging Face页面是获取最新模型和文档的最佳渠道。社区论坛(如Civitai)则有很多用户分享的实用技巧和模型微调版本。

通过将Flux的强大生成能力、Krea风格库的效率提升以及深度图的精准控制相结合,你便构建了一个高度灵活且强大的AI图像创作管线。这个管线不仅能用于艺术创作,也能在游戏素材设计、概念可视化、营销内容快速原型制作等领域发挥巨大作用。关键在于多实践、多调试,理解每个参数背后的含义,从而真正驾驭这些工具,而非被其复杂性所困扰。

← 返回列表