Harden audio-only script flow and mode propagation

This commit is contained in:
ي
2026-04-20 08:44:46 +05:30
parent ba9ddbf368
commit e68c289901
7 changed files with 148 additions and 11 deletions

View File

@@ -289,6 +289,7 @@ const PodcastDashboard: React.FC = () => {
knobs={knobsState}
speakers={project.speakers}
durationMinutes={project.duration}
podcastMode={project?.podcastMode || "video_only"}
script={scriptData}
analysis={analysis}
outline={analysis?.suggestedOutlines?.[0]}

View File

@@ -452,6 +452,7 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow
knobs: projectState.knobs,
speakers: project.speakers,
durationMinutes: project.duration,
podcastMode: (project as any)?.podcastMode || "video_only",
bible: projectState.bible,
outline: analysis?.suggestedOutlines?.[0],
analysis: analysis,

View File

@@ -25,6 +25,7 @@ interface ScriptEditorProps {
avatarUrl?: string | null; // Base avatar URL for consistent scene image generation
analysis?: any;
outline?: any;
podcastMode?: "audio_only" | "video_only" | "audio_video";
}
export const ScriptEditor: React.FC<ScriptEditorProps> = ({
@@ -43,6 +44,7 @@ export const ScriptEditor: React.FC<ScriptEditorProps> = ({
avatarUrl,
analysis,
outline,
podcastMode = "video_only",
}) => {
const [script, setScript] = useState<Script | null>(initialScript);
const [loading, setLoading] = useState(false);
@@ -93,6 +95,7 @@ export const ScriptEditor: React.FC<ScriptEditorProps> = ({
knobs,
speakers,
durationMinutes,
podcastMode,
analysis,
outline,
})
@@ -112,7 +115,7 @@ export const ScriptEditor: React.FC<ScriptEditorProps> = ({
return () => {
mounted = false;
};
}, [projectId, rawResearch, idea, knobs, speakers, durationMinutes, analysis, outline, emitScriptChange, onError, script]);
}, [projectId, rawResearch, idea, knobs, speakers, durationMinutes, podcastMode, analysis, outline, emitScriptChange, onError, script]);
const updateScene = (updated: Scene) => {
// Use functional update to ensure we're working with latest state
@@ -837,4 +840,3 @@ export const ScriptEditor: React.FC<ScriptEditorProps> = ({
</Box>
);
};

View File

@@ -208,6 +208,7 @@ export const ScriptEditorProvider: React.FC<ScriptEditorProviderProps> = ({
knobs,
speakers,
durationMinutes,
podcastMode,
analysis,
outline,
})
@@ -547,4 +548,4 @@ export const useScriptEditor = (): ScriptEditorContextType => {
throw new Error("useScriptEditor must be used within ScriptEditorProvider");
}
return context;
};
};

View File

@@ -12,6 +12,7 @@ import {
Knobs,
PodcastAnalysis,
PodcastEstimate,
PodcastMode,
Query,
RenderJobResult,
Research,
@@ -403,6 +404,7 @@ export const podcastApi = {
knobs: Knobs;
speakers: number;
durationMinutes: number;
podcastMode?: PodcastMode;
bible?: any;
outline?: any;
analysis?: PodcastAnalysis | null;
@@ -427,6 +429,7 @@ export const podcastApi = {
bible: params.bible,
outline: params.outline,
analysis: params.analysis,
podcast_mode: params.podcastMode || "video_only",
});
if (params.onProgress) {
@@ -453,6 +456,7 @@ export const podcastApi = {
},
],
approved: false,
chart_data: scene.chart_data || scene.chartData || undefined,
}));
return { scenes: scriptScenes };