diff --git a/app/service/Interaction/ImageStoryService.ts b/app/service/Interaction/ImageStoryService.ts index b122566..26101c3 100644 --- a/app/service/Interaction/ImageStoryService.ts +++ b/app/service/Interaction/ImageStoryService.ts @@ -221,21 +221,21 @@ export const useImageStoryServiceHook = (): UseImageStoryService => { return charactersAnalysis.map((character) => { console.log('character', character) // 如果已经有头像URL,直接返回 - if (character.avatarUrl) { + if (character.crop_url) { return { name: character.role_name, - url: character.avatarUrl, + url: character.crop_url, }; } - // 异步生成头像URL - generateAvatarFromRegion(character, activeImageUrl); + // // 异步生成头像URL + // generateAvatarFromRegion(character, activeImageUrl); - return { - name: character.role_name, - url: "", // 初始为空,异步生成完成后会更新 - }; - }); + // return { + // name: character.role_name, + // url: "", // 初始为空,异步生成完成后会更新 + // }; + }).filter(Boolean) as { name: string; url: string }[]; }, [charactersAnalysis, activeImageUrl, generateAvatarFromRegion]); /** * 上传图片并分析 diff --git a/components/common/ChatInputBox.tsx b/components/common/ChatInputBox.tsx index 83f531b..9e184a9 100644 --- a/components/common/ChatInputBox.tsx +++ b/components/common/ChatInputBox.tsx @@ -35,7 +35,7 @@ import StarterKit from "@tiptap/starter-kit"; import { HighlightTextExtension } from "@/components/ui/main-editor/HighlightText"; import Placeholder from "@tiptap/extension-placeholder"; import { createMovieProjectV1 } from "@/api/video_flow"; -import { useLoadScriptText } from "@/app/service/domain/service"; +import { useLoadScriptText, useUploadFile } from "@/app/service/domain/service"; // 自定义音频播放器样式 const customAudioPlayerStyles = ` @@ -556,7 +556,7 @@ export function ChatInputBox() { // 调用创建剧集API const episodeResponse = await createMovieProjectV1(episodeData); - console.log('episodeResponse', episodeResponse); + console.log("episodeResponse", episodeResponse); if (episodeResponse.code !== 0) { console.error(`创建剧集失败: ${episodeResponse.message}`); alert(`创建剧集失败: ${episodeResponse.message}`); @@ -704,11 +704,11 @@ export function ChatInputBox() { {/* 图片故事弹窗 */} - setIsPhotoStoryModalOpen(false)} - configOptions={configOptions} - /> + setIsPhotoStoryModalOpen(false)} + configOptions={configOptions} + /> {/* 右侧Action按钮 */} @@ -762,7 +762,6 @@ const ActionButton = ({ @@ -1042,9 +1041,10 @@ const PhotoStoryModal = ({ uploadAndAnalyzeImage, setCharactersAnalysis, originalUserDescription, - actionMovie + actionMovie, } = useImageStoryServiceHook(); const { loadingText } = useLoadScriptText(isLoading); + const { uploadFile } = useUploadFile(); // 重置状态 const handleClose = () => { resetImageStory(); @@ -1072,13 +1072,13 @@ const PhotoStoryModal = ({ } // 调用actionMovie接口 - const episodeResponse = await actionMovie( + const episodeResponse = await actionMovie( String(User.id), configOptions.mode as "auto" | "manual", configOptions.resolution as "720p" | "1080p" | "4k", configOptions.language ); - if(!episodeResponse) return + if (!episodeResponse) return; let episodeId = episodeResponse.project_id; // let episodeId = '9c34fcc4-c8d8-44fc-879e-9bd56f608c76'; router.push(`/create/work-flow?episodeId=${episodeId}`); @@ -1096,7 +1096,7 @@ const PhotoStoryModal = ({ footer={null} width="80%" style={{ maxWidth: "1000px", marginTop: "10vh" }} - className="photo-story-modal" + className="photo-story-modal bg-white/[0.08] backdrop-blur-[20px] [&_.ant-modal-content]:bg-white/[0.00]" closeIcon={
@@ -1114,7 +1114,7 @@ const PhotoStoryModal = ({ Movie Generation from Image
-
+
{/* 左侧:图片上传 */}
@@ -1164,7 +1164,7 @@ const PhotoStoryModal = ({ key={`${avatar.name}-${index}`} className="flex flex-col items-center" > -
+
{avatar.name}]*>${avatar.name}<\/role>`, "g"), + new RegExp( + `]*>${avatar.name}<\/role>`, + "g" + ), "" ) .replace( @@ -1211,6 +1214,61 @@ const PhotoStoryModal = ({ + {/* 上传新图片按钮 - 悬停时显示 */} + + +
0 && (
- {[ ...potentialGenres].map((genre) => ( + {[...potentialGenres].map((genre) => (
{/* 原始用户描述的展示 */} {originalUserDescription && ( -
Your Provided Text:{originalUserDescription}
+
+ Your Provided Text:{originalUserDescription} +
)}
diff --git a/components/pages/work-flow/thumbnail-grid.tsx b/components/pages/work-flow/thumbnail-grid.tsx index 7a87753..fdd86f6 100644 --- a/components/pages/work-flow/thumbnail-grid.tsx +++ b/components/pages/work-flow/thumbnail-grid.tsx @@ -46,7 +46,7 @@ export function ThumbnailGrid({ const container = thumbnailsRef.current; const thumbnailWidth = container.offsetWidth / 4; // 每个缩略图宽度(包含间距) const scrollPosition = currentSketchIndex * thumbnailWidth; - + container.scrollTo({ left: scrollPosition, behavior: 'smooth' @@ -68,13 +68,13 @@ export function ThumbnailGrid({ // 使用 useRef 存储前一次的数据,避免触发重渲染 const prevDataRef = useRef([]); - + useEffect(() => { const currentData = getCurrentData(); if (currentData && currentData.length > 0) { const currentDataStr = JSON.stringify(currentData); const prevDataStr = JSON.stringify(prevDataRef.current); - + // 只有当数据真正发生变化时才进行处理 if (currentDataStr !== prevDataStr) { // 找到最新更新的数据项的索引 @@ -84,14 +84,14 @@ export function ThumbnailGrid({ // 检查数据是否发生变化(包括状态变化) return JSON.stringify(item) !== JSON.stringify(prevDataRef.current[index]); }); - + console.log('changedIndex_thumbnail-grid', changedIndex, 'currentData:', currentData, 'prevData:', prevDataRef.current); - + // 如果找到变化的项,自动选择该项 if (changedIndex !== -1) { onSketchSelect(changedIndex); } - + // 更新前一次的数据快照 prevDataRef.current = JSON.parse(JSON.stringify(currentData)); } @@ -103,10 +103,10 @@ export function ThumbnailGrid({ const currentData = getCurrentData(); const maxIndex = currentData.length - 1; console.log('handleKeyDown', maxIndex, 'isFocused:', isFocused); - + if ((e.key === 'ArrowLeft' || e.key === 'ArrowRight') && maxIndex >= 0) { e.preventDefault(); - + let newIndex = currentSketchIndex; if (e.key === 'ArrowLeft') { // 向左循环 @@ -115,7 +115,7 @@ export function ThumbnailGrid({ // 向右循环 newIndex = currentSketchIndex === maxIndex ? 0 : currentSketchIndex + 1; } - + console.log('切换索引:', currentSketchIndex, '->', newIndex, '最大索引:', maxIndex); onSketchSelect(newIndex); } @@ -188,16 +188,16 @@ export function ThumbnailGrid({ const currentSketch = taskSketch[currentSketchIndex]; const defaultBgColors = ['RGB(45, 50, 70)', 'RGB(75, 80, 100)', 'RGB(105, 110, 130)']; const bgColors = currentSketch?.bg_rgb || defaultBgColors; - + return ( - {/* 动态渐变背景 */} - {/* 动态光效 */} - ( taskObject.videos.data.map((video, index) => { - + return (
) : (
- {`Thumbnail
)} - +
@@ -313,7 +313,7 @@ export function ThumbnailGrid({ const renderSketchThumbnails = (sketchData: any[]) => ( <> {sketchData.map((sketch, index) => { - + return (
- {`NG ); -} \ No newline at end of file +}