/** * @license * SPDX-License-Identifier: Apache-2.0 */ import React, { useState, useEffect, useCallback, useRef } from 'react'; import { AppState } from './types'; import { generateTextImage, generateTextVideo, generateStyleSuggestion } from './services/geminiService'; import { getRandomStyle, fileToBase64, TYPOGRAPHY_SUGGESTIONS, createGifFromVideo } from './utils'; import { Loader2, Paintbrush, Clapperboard, Play, ExternalLink, Type, Sparkles, Image as ImageIcon, X, Upload, Download, FileType, Wand2, Volume2, VolumeX, ChevronLeft, ChevronRight, ArrowLeft, Video as VideoIcon, Key, Info, ShieldCheck, Box, Code, Copy, Check } from 'lucide-react'; import ThreeDLogo from './components/ThreeDLogo'; interface Video { id: string; title: string; videoUrl: string; description: string; } const staticFilesUrl = 'https://www.gstatic.com/aistudio/starter-apps/type-motion/'; export const MOCK_VIDEOS: Video[] = [ { id: '1', title: "Cloud Formations", videoUrl: staticFilesUrl + 'clouds_v2.mp4', description: "Text formed by fluffy white clouds in a deep blue summer sky.", }, { id: '2', title: "Elemental Fire", videoUrl: staticFilesUrl + 'fire_v2.mp4', description: "Flames erupt into text in an arid dry environment.", }, { id: '3', title: "Mystic Smoke", videoUrl: staticFilesUrl + 'smoke_v2.mp4', description: "A sudden wave of smoke swirling to reveal the text.", }, { id: '4', title: "Water Blast", videoUrl: staticFilesUrl + 'water_v2.mp4', description: "A wall of water punching through text with power.", }, ]; const ApiKeyDialog: React.FC<{ isOpen: boolean; onClose: () => void; onSelect: () => void }> = ({ isOpen, onClose, onSelect }) => { if (!isOpen) return null; return (

Paid API Key Required

To use cinematic video generation models (like Veo), you must select an API key from a Google Cloud project with billing enabled. Free-tier keys do not support these high-end features.

• Make sure your project is linked to a valid billing account.

• Check the pricing documentation for more details.

); }; const HeroCarousel: React.FC<{ forceMute: boolean }> = ({ forceMute }) => { const [currentIndex, setCurrentIndex] = useState(0); const [isMuted, setIsMuted] = useState(true); const video = MOCK_VIDEOS[currentIndex]; useEffect(() => { if (forceMute) { setIsMuted(true); } }, [forceMute]); const handleNext = useCallback(() => { setCurrentIndex((prev) => (prev + 1) % MOCK_VIDEOS.length); }, []); const handlePrev = useCallback(() => { setCurrentIndex((prev) => (prev - 1 + MOCK_VIDEOS.length) % MOCK_VIDEOS.length); }, []); return (

Try It Now

Diviner Vision - Try It Now

⚡ TRY IT YOURSELF

📊 Business Intelligence
📈 Business Development
🔬 Data Analytics
💰 Financial Modeling
📂

Upload Your File

Excel or CSV format

Processing your data...

Please wait, this may take 15-30 seconds for the first request.

⏰ Do not close this page

📊 Analysis Result


        

Post a Comment