diff --git a/src/renderer/src/pages/video/Video.tsx b/src/renderer/src/pages/video/Video.tsx
index e005454de1..9d893ee121 100644
--- a/src/renderer/src/pages/video/Video.tsx
+++ b/src/renderer/src/pages/video/Video.tsx
@@ -9,6 +9,7 @@ export const Video = ({ video }: VideoProps) => {
const { t } = useTranslation()
return (
+ {/* TODO: complete video widget */}
{video &&
}
{video === undefined && t('video.undefined')}
{video === null && (
diff --git a/src/renderer/src/pages/video/VideoPage.tsx b/src/renderer/src/pages/video/VideoPage.tsx
index 89bf125067..177c857c8c 100644
--- a/src/renderer/src/pages/video/VideoPage.tsx
+++ b/src/renderer/src/pages/video/VideoPage.tsx
@@ -6,24 +6,29 @@ import { SystemProviderIds } from '@renderer/types'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
+import { ModelSetting } from './settings/ModelSetting'
import { ProviderSetting } from './settings/ProviderSetting'
import { VideoPanel } from './VideoPanel'
export const VideoPage = () => {
const { t } = useTranslation()
const [providerId, setProviderId] = useState
(SystemProviderIds.openai)
+ const [modelId, setModelId] = useState('sora-2')
return (
{t('video.title')}
+ {/* Settings */}
+ {/* Video list */}
diff --git a/src/renderer/src/pages/video/settings/ModelSetting.tsx b/src/renderer/src/pages/video/settings/ModelSetting.tsx
new file mode 100644
index 0000000000..b6ed460136
--- /dev/null
+++ b/src/renderer/src/pages/video/settings/ModelSetting.tsx
@@ -0,0 +1,48 @@
+import { Select, SelectItem } from '@heroui/react'
+import { Model, SystemProviderId } from '@renderer/types'
+import { Dispatch, SetStateAction } from 'react'
+import { useTranslation } from 'react-i18next'
+
+import { SettingItem, SettingTitle } from './shared'
+
+export interface ModelSettingProps {
+ providerId: string
+ modelId: string
+ setModelId: Dispatch>
+}
+
+interface ModelSelectItem extends Model {
+ key: string
+ label: string
+}
+
+// Hard-encoded for now. We may implement a function to filter video generation model from provider.models.
+const videoModelsMap = {
+ openai: ['sora-2', 'sora-2-pro'] as const
+} as const satisfies Partial>
+
+export const ModelSetting = ({ providerId, modelId, setModelId }: ModelSettingProps) => {
+ const { t } = useTranslation()
+
+ const items: ModelSelectItem[] = videoModelsMap[providerId]?.map((m: string) => ({ key: m, label: m })) ?? []
+
+ return (
+
+
+
+
+ )
+}