Files
test-repo/docs/.vitepress/theme/components/appendix/image-gen-intro/ImageGenArchitecture.vue
T

300 lines
6.6 KiB
Vue
Raw Normal View History

2026-01-15 20:10:19 +08:00
<template>
<div class="image-gen-architecture">
<el-card shadow="never">
<div class="flow-container">
<!-- Step 1: Prompt -->
<div class="flow-item">
<el-card
shadow="hover"
class="node-card"
>
2026-01-15 20:10:19 +08:00
<template #header>
<div class="node-header">
<el-icon :size="20">
<EditPen />
</el-icon>
2026-01-15 20:10:19 +08:00
<span>提示词 (Prompt)</span>
</div>
</template>
<div class="node-content">
<el-tag
type="info"
effect="plain"
>
"一只可爱的猫"
</el-tag>
2026-01-15 20:10:19 +08:00
</div>
</el-card>
</div>
<div class="arrow-connector">
<el-icon :size="24">
<Right />
</el-icon>
2026-01-15 20:10:19 +08:00
</div>
<!-- Step 2: Text Encoder -->
<div class="flow-item">
<el-card
shadow="hover"
class="node-card"
>
2026-01-15 20:10:19 +08:00
<template #header>
<div class="node-header">
<el-icon :size="20">
<Microphone />
</el-icon>
2026-01-15 20:10:19 +08:00
<span>文本编码器</span>
</div>
</template>
<div class="node-content">
<div class="model-name">
CLIP / T5
</div>
<div class="data-shape">
Vector [768]
</div>
2026-01-15 20:10:19 +08:00
</div>
</el-card>
</div>
<div class="arrow-connector">
<el-icon :size="24">
<Right />
</el-icon>
2026-01-15 20:10:19 +08:00
</div>
<!-- Step 3: UNet/DiT -->
<div class="flow-item main-node">
<el-card
shadow="hover"
class="node-card highlight"
>
2026-01-15 20:10:19 +08:00
<template #header>
<div class="node-header">
<el-icon
:size="20"
color="#E6A23C"
>
<Cpu />
</el-icon>
2026-01-15 20:10:19 +08:00
<span>生成模型</span>
</div>
</template>
<div class="node-content">
<div class="model-name">
UNet / DiT
</div>
2026-01-15 20:10:19 +08:00
<div class="action-badge">
<el-tag
type="warning"
size="small"
effect="dark"
>
去噪 (Denoise)
</el-tag>
2026-01-15 20:10:19 +08:00
</div>
</div>
</el-card>
</div>
<div class="arrow-connector">
<el-icon :size="24">
<Right />
</el-icon>
2026-01-15 20:10:19 +08:00
</div>
<!-- Step 4: VAE Decoder -->
<div class="flow-item">
<el-card
shadow="hover"
class="node-card"
>
2026-01-15 20:10:19 +08:00
<template #header>
<div class="node-header">
<el-icon :size="20">
<View />
</el-icon>
2026-01-15 20:10:19 +08:00
<span>图像解码器</span>
</div>
</template>
<div class="node-content">
<div class="model-name">
VAE Decoder
</div>
2026-01-15 20:10:19 +08:00
<div class="final-output">
<el-icon><Picture /></el-icon> Image
</div>
</div>
</el-card>
</div>
</div>
<el-divider />
<el-row :gutter="20">
<el-col :span="8">
<div class="explanation-item">
<div class="exp-icon">
<el-icon color="#409EFF">
<Microphone />
</el-icon>
</div>
2026-01-15 20:10:19 +08:00
<div class="exp-text">
<h4>耳朵 (Text Encoder)</h4>
<p>负责"听懂"你的描述把它翻译成计算机能理解的数学向量</p>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="explanation-item">
<div class="exp-icon">
<el-icon color="#E6A23C">
<Cpu />
</el-icon>
</div>
2026-01-15 20:10:19 +08:00
<div class="exp-text">
<h4>大脑 (UNet/DiT)</h4>
<p>
核心创造者在潜空间(Latent Space)中通过预测噪声来构思画面
</p>
2026-01-15 20:10:19 +08:00
</div>
</div>
</el-col>
<el-col :span="8">
<div class="explanation-item">
<div class="exp-icon">
<el-icon color="#67C23A">
<View />
</el-icon>
</div>
2026-01-15 20:10:19 +08:00
<div class="exp-text">
<h4>眼睛 (VAE)</h4>
<p>负责"翻译"回图像把大脑构思的模糊特征还原成高清像素图片</p>
</div>
</div>
</el-col>
</el-row>
</el-card>
</div>
</template>
<script setup>
import {
EditPen,
Microphone,
Right,
Cpu,
View,
Picture
} from '@element-plus/icons-vue'
2026-01-15 20:10:19 +08:00
</script>
<style scoped>
.image-gen-architecture {
margin: 20px 0;
}
.flow-container {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 20px;
}
.flow-item {
flex: 1;
min-width: 140px;
}
.arrow-connector {
color: var(--el-text-color-placeholder);
display: flex;
align-items: center;
}
.node-card {
height: 100%;
text-align: center;
}
.node-header {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
font-weight: bold;
font-size: 0.9em;
}
.node-content {
display: flex;
flex-direction: column;
gap: 5px;
align-items: center;
font-size: 0.85em;
color: var(--el-text-color-regular);
}
.highlight {
border-color: var(--el-color-warning);
background-color: var(--el-color-warning-light-9);
}
.model-name {
font-weight: bold;
}
.data-shape {
font-family: monospace;
font-size: 0.8em;
color: var(--el-text-color-secondary);
}
.explanation-item {
display: flex;
gap: 10px;
padding: 10px;
background: var(--el-fill-color-light);
border-radius: 6px;
height: 100%;
}
.exp-icon {
font-size: 24px;
display: flex;
align-items: flex-start;
padding-top: 2px;
}
.exp-text h4 {
margin: 0 0 5px 0;
font-size: 0.95em;
color: var(--el-text-color-primary);
}
.exp-text p {
margin: 0;
font-size: 0.85em;
color: var(--el-text-color-secondary);
line-height: 1.4;
}
@media (max-width: 768px) {
.flow-container {
flex-direction: column;
}
2026-01-15 20:10:19 +08:00
.arrow-connector {
transform: rotate(90deg);
margin: 10px 0;
}
2026-01-15 20:10:19 +08:00
.explanation-item {
margin-bottom: 10px;
}
}
</style>