CODE · 2.8 KB
src/providers.js
Workspace snapshot · 09/04 14:52
const USD_TO_BUDGET_YEN = 165;
function usdPerSecond(value) {
return Math.ceil(value * USD_TO_BUDGET_YEN);
}
export const videoProviders = [
{ id: "flux-3-draft", label: "Draft / FLUX 3", engine: "fal", model: "blackforestlabs/flux-3/text-to-video/draft", yenPerSecond: usdPerSecond(0.06), role: "低価格で構図と動きを比較し、採用案だけEnhanceする", executable: true, duration: { min: 5, max: 20 }, resolution: "720p", requestShape: "flux" },
{ id: "omni-flash", label: "Hook / Gemini Omni Flash", engine: "fal", model: "google/gemini-omni-flash", yenPerSecond: usdPerSecond(0.125), role: "Text-to-Videoの強いフックと高速な反復", executable: true, duration: { min: 3, max: 10 }, resolution: "720p", requestShape: "omni" },
{ id: "kling-o3-standard", label: "Control / Kling O3 Standard", engine: "fal", model: "fal-ai/kling-video/o3/standard/text-to-video", yenPerSecond: usdPerSecond(0.084), role: "低原価のカメラ制御と複数ショット", executable: true, duration: { min: 3, max: 15 }, resolution: "1080p", requestShape: "kling" },
{ id: "seedance-2-fast", label: "Motion / Seedance 2.0 Fast", engine: "fal", model: "bytedance/seedance-2.0/fast/text-to-video", yenPerSecond: usdPerSecond(0.2419), role: "複雑な動き、物理、カメラ演出、最大15秒", executable: true, duration: { min: 4, max: 15 }, resolution: "720p", requestShape: "seedance" },
{ id: "minimax-h3", label: "Image / MiniMax H3", engine: "fal", model: "minimax/h3/text-to-video", yenPerSecond: usdPerSecond(0.26), role: "2K、Image-to-Video、被写体一貫性の本命候補", executable: true, duration: { min: 5, max: 15 }, resolution: "2K", requestShape: "minimax" },
{ id: "veo-lite", label: "Private Draft / Veo 3.1 Lite", engine: "vertex", model: "veo-3.1-lite-generate-001", yenPerSecond: 8, role: "機密素材をVertex AI内で安価に試作", executable: true, duration: { values: [4, 6, 8] }, requestShape: "vertex" },
{ id: "veo-fast", label: "Private Production / Veo 3.1 Fast", engine: "vertex", model: "veo-3.1-fast-generate-001", yenPerSecond: 15, role: "機密素材、最終フレーム、延長が必要な通常制作", executable: true, duration: { values: [4, 6, 8] }, requestShape: "vertex" },
{ id: "veo-quality", label: "Private Hero / Veo 3.1", engine: "vertex", model: "veo-3.1-generate-001", yenPerSecond: 60, role: "採用確度が高い最終見せ場だけ", executable: true, duration: { values: [4, 6, 8] }, requestShape: "vertex" }
];
export function findVideoProvider(id) {
return videoProviders.find((provider) => provider.id === id) ?? videoProviders[0];
}
export function providerSupportsDuration(provider, seconds) {
if (provider.duration.values) return provider.duration.values.includes(seconds);
return seconds >= provider.duration.min && seconds <= provider.duration.max;
}