Compare commits

...
Author SHA1 Message Date
Brandon Thomas f1038a493f plumb through "generate audio" (only veo supports this??) 2025-11-25 04:48:37 -05:00
6 changed files with 20 additions and 19 deletions
@@ -79,6 +79,11 @@ pub struct EnqueueImageToVideoRequest {
/// Text prompt used to direct the video.
pub prompt: Option<String>,
/// Optional.
/// Generate the video with audio, if there is an option.
/// Typically, this costs money when presented as an option, so we default to off.
pub generate_audio: Option<bool>,
/// OPTIONAL.
/// Only for Sora2 model currently.
pub sora_orientation: Option<SoraOrientation>,
@@ -222,7 +222,7 @@ pub async fn handle_video_artcraft(
prompt: request.prompt.clone(),
duration: None,
resolution: None,
generate_audio: None,
generate_audio: request.generate_audio,
};
let result = generate_veo_3_image_to_video(
&app_env_configs.storyteller_host,
@@ -249,7 +249,7 @@ pub async fn handle_video_artcraft(
prompt: request.prompt.clone(),
duration: None,
resolution: None,
generate_audio: None,
generate_audio: request.generate_audio,
};
let result = generate_veo_3_fast_image_to_video(
&app_env_configs.storyteller_host,
@@ -280,19 +280,15 @@ export const PromptBoxVideo = ({
frontend_subscriber_id: subscriberId,
};
if (selectedModel.generateWithSound) {
request.generate_audio = !!generateWithSound;
}
if (selectedModel?.tauriId === "sora_2") {
request.sora_orientation =
resolution === "720p" ? "landscape" : "portrait";
}
if (selectedModel?.tauriId === "veo_2") {
request.generate_with_sound = !!generateWithSound;
}
if (selectedModel?.tauriId === "veo_3") {
request.generate_with_sound = !!generateWithSound;
}
await EnqueueImageToVideo(request);
onEnqueuePressed?.(prompt, subscriberId);
@@ -47,6 +47,6 @@ export class VideoModel extends Model {
this.endFrame = args.endFrame;
this.requiresImage = args.requiresImage;
this.sizeOptions = args.sizeOptions ?? [];
this.generateWithSound = args.generateWithSound;
this.generateWithSound = args.generateWithSound || false;
}
}
@@ -30,7 +30,7 @@ export const VIDEO_MODELS: VideoModel[] = [
endFrame: true,
requiresImage: true,
progressBarTime: 100000,
generateWithSound: true,
generateWithSound: false,
}),
new VideoModel({
id: "kling_2_1_pro",
@@ -45,7 +45,7 @@ export const VIDEO_MODELS: VideoModel[] = [
endFrame: true,
requiresImage: true,
progressBarTime: 100000,
generateWithSound: true,
generateWithSound: false,
}),
new VideoModel({
id: "kling_2_1_master",
@@ -60,7 +60,7 @@ export const VIDEO_MODELS: VideoModel[] = [
endFrame: false,
requiresImage: true,
progressBarTime: 100000,
generateWithSound: true,
generateWithSound: false,
}),
new VideoModel({
id: "seedance_1_0_lite",
@@ -114,7 +114,7 @@ export const VIDEO_MODELS: VideoModel[] = [
startFrame: true,
endFrame: false,
requiresImage: true,
generateWithSound: true,
generateWithSound: false,
progressBarTime: 100000,
}),
new VideoModel({
@@ -36,7 +36,7 @@ export interface EnqueueImageToVideoRequest {
sora_orientation?: "portrait" | "landscape";
// Optional. Whether to generate audio alongside the video (used by some models like Veo2)
generate_with_sound?: boolean;
generate_audio?: boolean;
}
interface RawEnqueueImageToVideoRequest {
@@ -47,7 +47,7 @@ interface RawEnqueueImageToVideoRequest {
frontend_caller?: string;
frontend_subscriber_id?: string;
sora_orientation?: "portrait" | "landscape";
generate_with_sound?: boolean;
generate_audio?: boolean;
}
export interface EnqueueImageToVideoError extends CommandResult {
@@ -94,8 +94,8 @@ export const EnqueueImageToVideo = async (
mutableRequest.sora_orientation = request.sora_orientation;
}
if (typeof request.generate_with_sound === "boolean") {
mutableRequest.generate_with_sound = request.generate_with_sound;
if (typeof request.generate_audio === "boolean") {
mutableRequest.generate_audio = request.generate_audio;
}
const result = await invoke("enqueue_image_to_video_command", {