参考图 {index + 1}
{reference.asset ? `${reference.asset.width} × ${reference.asset.height}` : '图片正在同步'}
最想保留
{reference.preserve.join('、')}
可以改变
{reference.adapt.join('、')}
不要照着画
{reference.doNotCopy.join('、')}
import {
Ban,
Check,
ChevronDown,
Film,
ImageIcon,
Lightbulb,
ListChecks,
Loader2,
MessageCircle,
Palette,
Play,
SlidersHorizontal,
Sparkles,
WandSparkles,
} from 'lucide-react';
import { toast } from 'sonner';
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { useImageWorkspaceStore } from '@/stores/image-workspace';
import type {
DesignCompilationIssue,
DesignWorkspace,
} from '../../../shared/image-workspace';
import {
projectYouthCreationCard,
type YouthCreationCardModel,
} from './youth-form-projection';
export type YouthCreationCardProps = {
workspace: DesignWorkspace;
quoteBlockers: DesignCompilationIssue[];
generationAvailable: boolean;
onOpenFineTune: () => void;
onFocusComposer: () => void;
};
function formatDuration(seconds: number): string {
if (!Number.isFinite(seconds)) return `${seconds} 秒`;
if (Number.isInteger(seconds)) return `${seconds} 秒`;
return `${seconds.toFixed(1)} 秒`;
}
function MediumIcon({ medium }: { medium: 'image' | 'video' }) {
return medium === 'video'
?
: ;
}
function Chip({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
function TagSection({
title,
items,
icon,
tone = 'default',
}: {
title: string;
items: string[];
icon: React.ReactNode;
tone?: 'default' | 'avoid';
}) {
if (items.length === 0) return null;
return (
{model.readinessMessage} 参考图 {index + 1}
{reference.asset
? `${reference.asset.width} × ${reference.asset.height}`
: '图片正在同步'}
最想保留 {reference.preserve.join('、')} 可以改变 {reference.adapt.join('、')} 不要照着画 {reference.doNotCopy.join('、')} 时长 {formatDuration(durationSeconds)} 节奏 {pacing} 结尾 {endState} 画面顺序{title}
{items.map((item, index) => (
{model.blockers.map((blocker) => (
)}
参考图片
视频安排
{storyBeats.map((beat, index) =>
先在对话里说说脑中的画面,不用一次想完整。
继续描述你想看到的画面,AI 会接着问一个关键问题。
{generationAvailable ? '先看看制作方案,再决定要不要开始。' : '现在还不能开始制作,但你可以继续完善想法。'}
方案准备好了,确认后就开始制作。
作品做好后会出现在下面,先去做点别的吧。
喜欢这个方向?可以再做一个版本。
会跟着聊天自动更新,不需要逐项填写。
{model.summary}