auto-save 2026-05-18 20:19 (~2)
This commit is contained in:
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"entries": [
|
||||
{
|
||||
"files_changed": 1,
|
||||
"hash": "7067a2b",
|
||||
"message": "auto-save 2026-05-16 14:51 (~1)",
|
||||
"ts": "2026-05-16T14:51:52+08:00",
|
||||
"type": "commit"
|
||||
},
|
||||
{
|
||||
"files_changed": 1,
|
||||
"hash": "2a259cc",
|
||||
@@ -3217,6 +3210,13 @@
|
||||
"type": "session-heartbeat",
|
||||
"message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 2 项未提交变更 · 最近提交:feat: enforce english prompt language strategy",
|
||||
"files_changed": 2
|
||||
},
|
||||
{
|
||||
"ts": "2026-05-18T20:13:59+08:00",
|
||||
"type": "commit",
|
||||
"message": "auto-save 2026-05-18 20:13 (~3)",
|
||||
"hash": "69bb692",
|
||||
"files_changed": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -401,7 +401,7 @@ function statusTone(job: Job | null) {
|
||||
if (!job) return { label: "等待素材", className: "border-white/10 text-white/50 bg-white/[0.03]" }
|
||||
if (job.status === "failed") return { label: "失败", className: "border-rose-400/30 text-rose-200 bg-rose-500/10" }
|
||||
if (["created", "downloading", "splitting", "transcribing"].includes(job.status)) {
|
||||
return { label: "处理中", className: "border-cyan-300/30 text-cyan-100 bg-cyan-400/10" }
|
||||
return { label: "处理中", className: "border-[#d6b36a]/34 text-[#f5d98e] bg-[#d6b36a]/10" }
|
||||
}
|
||||
return { label: "可编辑", className: "border-emerald-300/30 text-emerald-100 bg-emerald-400/10" }
|
||||
}
|
||||
@@ -2520,7 +2520,7 @@ function SourceKeyframePicker({
|
||||
onClick={onExtract}
|
||||
disabled={!job.video_url || extracting || job.status === "splitting"}
|
||||
title="自动按动作峰值抽 12 张参考帧,更偏向手势、表情变化、节奏点和镜头变化"
|
||||
className="inline-flex h-7 items-center justify-center gap-1 rounded-md bg-white px-2 text-[10.5px] font-semibold text-black transition hover:bg-white/90 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-primary-action inline-flex h-7 items-center justify-center gap-1 px-2 text-[10.5px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{extracting || job.status === "splitting" ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Scissors className="h-3.5 w-3.5" />}
|
||||
自动 12 张
|
||||
@@ -2911,7 +2911,7 @@ function SourceReferenceBuildPanel({
|
||||
type="button"
|
||||
onClick={() => void loadSubjectTemplateLibrary()}
|
||||
disabled={templateLibraryBusy}
|
||||
className="inline-flex h-7 items-center gap-1 rounded border border-white/10 bg-white/[0.045] px-2 text-[10px] font-semibold text-white/58 transition hover:border-cyan-300/35 hover:text-cyan-100 disabled:cursor-wait disabled:opacity-50"
|
||||
className="skg-secondary-action inline-flex h-7 items-center gap-1 px-2 text-[10px] font-semibold transition disabled:cursor-wait disabled:opacity-50"
|
||||
>
|
||||
{templateLibraryBusy ? <Loader2 className="h-3 w-3 animate-spin" /> : <RefreshCw className="h-3 w-3" />}
|
||||
数据库 {subjectTemplateLibrary.length} 套
|
||||
@@ -2929,8 +2929,8 @@ function SourceReferenceBuildPanel({
|
||||
onClick={() => setSubjectMode(item.value)}
|
||||
className={`flex min-h-[48px] items-start gap-2 rounded-md border px-2.5 py-2 text-left transition ${
|
||||
subjectMode === item.value
|
||||
? "border-cyan-200/65 bg-cyan-300/12 text-cyan-50"
|
||||
: "border-white/10 bg-black/24 text-white/50 hover:border-cyan-200/30 hover:text-white/78"
|
||||
? "border-[#d6b36a]/65 bg-[#d6b36a]/12 text-[#f5d98e]"
|
||||
: "border-white/10 bg-black/24 text-white/50 hover:border-[#d6b36a]/35 hover:text-white/78"
|
||||
}`}
|
||||
>
|
||||
<span className="mt-0.5 shrink-0">{subjectMode === item.value ? <Check className="h-3.5 w-3.5" /> : <Circle className="h-3.5 w-3.5" />}</span>
|
||||
@@ -2959,10 +2959,10 @@ function SourceReferenceBuildPanel({
|
||||
setSubjectStyle(template.subject_style || "transparent_human")
|
||||
}}
|
||||
className={`group relative rounded-md border p-1.5 text-left transition ${
|
||||
active ? "border-cyan-200/75 bg-cyan-300/12 text-cyan-50" : "border-white/10 bg-black/24 text-white/58 hover:border-cyan-200/35 hover:text-white/82"
|
||||
active ? "border-[#d6b36a]/75 bg-[#d6b36a]/12 text-[#f5d98e]" : "border-white/10 bg-black/24 text-white/58 hover:border-[#d6b36a]/35 hover:text-white/82"
|
||||
}`}
|
||||
>
|
||||
{active ? <span className="absolute right-2 top-2 z-10 rounded-full bg-cyan-200 p-0.5 text-black"><Check className="h-3 w-3" /></span> : null}
|
||||
{active ? <span className="absolute right-2 top-2 z-10 rounded-full bg-[#d6b36a] p-0.5 text-black"><Check className="h-3 w-3" /></span> : null}
|
||||
<span className="block aspect-[4/5] overflow-hidden rounded border border-white/10 bg-white">
|
||||
{preview ? <img src={subjectTemplateImageUrl(preview.filename)} alt={template.name} className="h-full w-full object-cover" /> : null}
|
||||
</span>
|
||||
@@ -2985,10 +2985,10 @@ function SourceReferenceBuildPanel({
|
||||
setSubjectStyle("transparent_human")
|
||||
}}
|
||||
className={`group relative rounded-md border p-1.5 text-left transition ${
|
||||
active ? "border-cyan-200/75 bg-cyan-300/12 text-cyan-50" : "border-white/10 bg-black/24 text-white/58 hover:border-cyan-200/35 hover:text-white/82"
|
||||
active ? "border-[#d6b36a]/75 bg-[#d6b36a]/12 text-[#f5d98e]" : "border-white/10 bg-black/24 text-white/58 hover:border-[#d6b36a]/35 hover:text-white/82"
|
||||
}`}
|
||||
>
|
||||
{active ? <span className="absolute right-2 top-2 z-10 rounded-full bg-cyan-200 p-0.5 text-black"><Check className="h-3 w-3" /></span> : null}
|
||||
{active ? <span className="absolute right-2 top-2 z-10 rounded-full bg-[#d6b36a] p-0.5 text-black"><Check className="h-3 w-3" /></span> : null}
|
||||
<span className="block aspect-[4/5] overflow-hidden rounded border border-white/10 bg-white">
|
||||
{preview ? <img src={characterLibraryImageUrl(preview.filename)} alt={character.name} className="h-full w-full object-cover" /> : null}
|
||||
</span>
|
||||
@@ -3000,7 +3000,7 @@ function SourceReferenceBuildPanel({
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div className="rounded-md border border-cyan-200/18 bg-cyan-300/[0.06] px-2.5 py-2 text-[10px] leading-snug text-cyan-50/62">
|
||||
<div className="rounded-md border border-[#d6b36a]/18 bg-[#d6b36a]/[0.06] px-2.5 py-2 text-[10px] leading-snug text-white/62">
|
||||
当前跳过模板库:本次只用源视频关键帧的文字化主体特征生成创新主体。模板卡已收起,避免占用生成结果区域。
|
||||
</div>
|
||||
)}
|
||||
@@ -3038,7 +3038,7 @@ function SourceReferenceBuildPanel({
|
||||
onClick={() => void saveGeneratedSubjectTemplate()}
|
||||
disabled={!visibleActorAssets.length || !templateDraftName.trim() || templateSaveBusy}
|
||||
title={!visibleActorAssets.length ? "先生成主体视图" : !templateDraftName.trim() ? "先填写模板名称" : "保存到主体模板库"}
|
||||
className="inline-flex h-8 items-center justify-center gap-1 rounded-md border border-white/10 bg-white/[0.055] px-3 text-[10.5px] font-semibold text-white/62 transition hover:border-cyan-300/35 hover:text-cyan-100 disabled:cursor-not-allowed disabled:opacity-35"
|
||||
className="skg-secondary-action inline-flex h-8 items-center justify-center gap-1 px-3 text-[10.5px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-35"
|
||||
>
|
||||
{templateSaveBusy ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Plus className="h-3.5 w-3.5" />}
|
||||
保存到主体库
|
||||
@@ -3234,7 +3234,7 @@ function SourceReferenceBuildPanel({
|
||||
type="button"
|
||||
onClick={() => void generateSimilarActor()}
|
||||
disabled={!frames.length || subjectBusy || templateRequired || !selectedSubjectViews.length}
|
||||
className="inline-flex h-9 min-w-[170px] items-center justify-center gap-1 rounded-md bg-white px-3 text-[11px] font-semibold text-black transition hover:bg-white/90 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-primary-action inline-flex h-9 min-w-[170px] items-center justify-center gap-1 px-3 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{subjectBusy ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Sparkles className="h-3.5 w-3.5" />}
|
||||
{subjectBusyFor ? `生成中 · ${subjectBusyFor.jobLabel}` : generationCtaLabel}
|
||||
@@ -3779,7 +3779,7 @@ function AudioStoryboardPlanPanel({
|
||||
type="button"
|
||||
onClick={() => void reanalyzeProductViews()}
|
||||
disabled={!productItems.length || productAnalyzing || !!productAngleBusy}
|
||||
className="inline-flex h-9 items-center justify-center gap-1 rounded-md border border-white/10 bg-white/[0.055] px-2.5 text-[11px] font-semibold text-white/72 transition hover:border-white/25 hover:bg-white/[0.1] disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-secondary-action inline-flex h-9 items-center justify-center gap-1 px-2.5 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{productAnalyzing ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Wand2 className="h-3.5 w-3.5" />}
|
||||
重新识别并补图
|
||||
@@ -3788,7 +3788,7 @@ function AudioStoryboardPlanPanel({
|
||||
type="button"
|
||||
onClick={() => productFileRef.current?.click()}
|
||||
disabled={!job || productUploading || productAnalyzing || !!productAngleBusy}
|
||||
className="inline-flex h-9 items-center justify-center gap-1 rounded-md border border-white/10 bg-white/[0.055] px-2.5 text-[11px] font-semibold text-white/72 transition hover:border-white/25 hover:bg-white/[0.1] disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-secondary-action inline-flex h-9 items-center justify-center gap-1 px-2.5 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{productUploading ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Upload className="h-3.5 w-3.5" />}
|
||||
上传产品图
|
||||
@@ -3844,7 +3844,7 @@ function AudioStoryboardPlanPanel({
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowChineseMirror((value) => !value)}
|
||||
className="inline-flex h-9 items-center justify-center rounded-md border border-white/10 bg-white/[0.045] px-2.5 text-[11px] font-semibold text-white/60 transition hover:border-white/25 hover:text-white"
|
||||
className="skg-secondary-action inline-flex h-9 items-center justify-center px-2.5 text-[11px] font-semibold transition"
|
||||
>
|
||||
{showChineseMirror ? "收起中文" : "显示中文"}
|
||||
</button>
|
||||
@@ -3852,7 +3852,7 @@ function AudioStoryboardPlanPanel({
|
||||
type="button"
|
||||
onClick={() => void rewriteAllRows()}
|
||||
disabled={scriptRewriteBusy !== null || !rows.length}
|
||||
className="inline-flex h-9 items-center justify-center gap-1 rounded-md bg-white px-2.5 text-[11px] font-semibold text-black transition hover:bg-white/90 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-primary-action inline-flex h-9 items-center justify-center gap-1 px-2.5 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{scriptRewriteBusy === "all" ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Wand2 className="h-3.5 w-3.5" />}
|
||||
整片改写
|
||||
@@ -3864,7 +3864,7 @@ function AudioStoryboardPlanPanel({
|
||||
setCopyZhOverrides({})
|
||||
}}
|
||||
disabled={scriptRewriteBusy !== null || !Object.keys(copyOverrides).length}
|
||||
className="inline-flex h-9 items-center justify-center rounded-md border border-white/10 bg-white/[0.045] px-2.5 text-[11px] font-semibold text-white/60 transition hover:border-white/25 hover:text-white disabled:cursor-not-allowed disabled:opacity-35"
|
||||
className="skg-secondary-action inline-flex h-9 items-center justify-center px-2.5 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-35"
|
||||
>
|
||||
还原初稿
|
||||
</button>
|
||||
@@ -3872,7 +3872,7 @@ function AudioStoryboardPlanPanel({
|
||||
type="button"
|
||||
onClick={() => void saveAllStoryboardDrafts()}
|
||||
disabled={batchStoryboardSaveBusy || !rows.length || !orderedFrames.length}
|
||||
className="inline-flex h-9 items-center justify-center gap-1 rounded-md bg-white px-2.5 text-[11px] font-semibold text-black transition hover:bg-white/90 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-primary-action inline-flex h-9 items-center justify-center gap-1 px-2.5 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{batchStoryboardSaveBusy ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Check className="h-3.5 w-3.5" />}
|
||||
保存全部规划
|
||||
@@ -3975,10 +3975,10 @@ function AudioStoryboardPlanPanel({
|
||||
value={plannedRow.subjectDescription}
|
||||
onChange={(event) => patchRowPlan(row.index, { subjectDescription: event.target.value })}
|
||||
placeholder="人物描述:主体身份、姿态、情绪、需要用哪些视角"
|
||||
className="min-h-[42px] w-full resize-y rounded border border-violet-300/12 bg-violet-300/[0.04] px-2 py-1.5 text-[10.5px] leading-snug text-violet-50/78 outline-none placeholder:text-white/25 focus:border-violet-300/50"
|
||||
className="min-h-[42px] w-full resize-y rounded border border-[#d6b36a]/14 bg-[#d6b36a]/[0.045] px-2 py-1.5 text-[10.5px] leading-snug text-white/78 outline-none placeholder:text-white/25 focus:border-[#d6b36a]/50"
|
||||
/>
|
||||
{showChineseMirror && plannedRow.subjectDescriptionZh ? (
|
||||
<p className="-mt-1 line-clamp-2 text-[10px] leading-snug text-violet-100/34" title={plannedRow.subjectDescriptionZh}>中:{plannedRow.subjectDescriptionZh}</p>
|
||||
<p className="-mt-1 line-clamp-2 text-[10px] leading-snug text-white/34" title={plannedRow.subjectDescriptionZh}>中:{plannedRow.subjectDescriptionZh}</p>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
@@ -4089,7 +4089,7 @@ function AudioStoryboardPlanPanel({
|
||||
type="button"
|
||||
onClick={() => void saveSingleRowStoryboardDraft(plannedRow, referenceFrame)}
|
||||
disabled={!referenceFrame || savingStoryboard}
|
||||
className="mt-1.5 inline-flex h-8 w-full items-center justify-center gap-1 rounded-md bg-white px-2 text-[11px] font-semibold text-black transition hover:bg-white/90 disabled:cursor-not-allowed disabled:opacity-40"
|
||||
className="skg-primary-action mt-1.5 inline-flex h-8 w-full items-center justify-center gap-1 px-2 text-[11px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-40"
|
||||
>
|
||||
{savingStoryboard ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <Check className="h-3.5 w-3.5" />}
|
||||
保存本条规划
|
||||
|
||||
Reference in New Issue
Block a user