模特上身图提示词重构 + 图片创作页 UI 调整

后端(模特上身图提示词):
- build_model_tryon_prompt_refs 重写:穿戴/非穿戴分流(穿戴=真实穿身替换原衣,
  非穿戴=手持/佩戴/使用不动原衣)、每张按 index 变化动作/场景/镜头、负面词尾接、
  多图参考序号自适应(参考图1~N=商品,参考图N+1=模特)
- 新增 _product_reference_urls:商品参考图真实上传图优先、排除 AI 生成图、可多张(≤3),
  无真实图回落 cover
- worker run_standalone_image_task 模特分支改用多图取图 + 传 index/n_product

前端(图片创作/工作室):
- 生成数量改 1/2/4;图片比例新增「手动输入」(宽:高 两输入框)
- 临时隐藏「商品库」按钮
- 模特卡:去掉 // 真人模特,标题改图片底部白字遮罩层 + 单行省略
- 工作室壳负边距对齐 .content padding,修复上下被遮挡/裁切

其他:并入此前未提交的商品页改动、脚本 Agent/格式实测文档与 demo
This commit is contained in:
zyc
2026-06-27 09:31:44 +08:00
parent 4c8b2d1902
commit de4b20cc7b
24 changed files with 2350 additions and 127 deletions
+28 -7
View File
@@ -170,14 +170,20 @@
在 .content 内铺满可用高度(shell 由 App.tsx 渲染,这里只占正文)。
============================================================ */
.image-workbench {
/* 抵消 .content 的 48/28/72 padding,让工作室壳贴边铺满(同旧 .tool-shell 思路) */
margin: -48px -28px -72px;
/* 抵消 .content 的 24/28/60 padding,让工作室壳贴边铺满(同旧 .tool-shell 思路)
必须与 design-restraint.css .content 的 padding 严格一致:多减则顶部钻进 sticky
topbar(被遮)、底部溢出视口(被裁)。 */
margin: -24px -28px -60px;
height: calc(100vh - 64px);
display: flex;
flex-direction: column;
background: var(--background-base);
overflow: hidden;
}
/* <1100px 时 .content 改 28/24/48,负边距需同步,否则窄屏又会上下被遮/裁 */
@media (max-width: 1100px) {
.image-workbench { margin: -28px -24px -48px; }
}
/* ════════════════════════════════════════════════
通用:返回 pill(图片创作侧栏头 / 模特·平台侧栏头共用)
@@ -488,6 +494,18 @@
border-color: var(--heat-40);
font-weight: 600;
}
/* 手动输入比例:宽 : 高 两个数字框 */
.image-workbench .iw-ratio-manual {
display: flex; align-items: center; gap: 8px;
margin-top: 8px;
}
.image-workbench .iw-ratio-manual .input {
flex: 1; min-width: 0; height: 32px;
text-align: center;
}
.image-workbench .iw-ratio-manual .sep {
color: var(--black-alpha-48); font-size: 13px; flex-shrink: 0;
}
/* ── 模特选择 · 3:4 矩形卡多选(基线 .model-card)── */
.image-workbench .model-grid {
@@ -522,11 +540,14 @@
object-fit: cover; display: block;
background: var(--black-alpha-4);
}
.image-workbench .model-card .m-name { font-size: 13px; font-weight: 500; color: var(--accent-black); }
.image-workbench .model-card.selected .m-name { color: var(--heat); }
.image-workbench .model-card .m-tag {
font-family: var(--font-mono); font-size: 12px;
color: var(--black-alpha-48); letter-spacing: .02em;
/* 标题:遮罩层贴图片底部,白字单行省略,节省一行纵向空间 */
.image-workbench .model-card .m-name {
position: absolute; left: 0; right: 0; bottom: 0;
padding: 14px 8px 6px;
font-size: 13px; font-weight: 500; color: #fff;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
background: linear-gradient(to top, rgba(0, 0, 0, .62), rgba(0, 0, 0, 0));
pointer-events: none; z-index: 1;
}
.image-workbench .model-card .m-check {
position: absolute; top: 14px; right: 14px;