| import gradio as gr | |
| import requests | |
| languages = { | |
| "English": "en", | |
| "Indonesian": "id", | |
| "Spanish": "es", | |
| "French": "fr", | |
| "German": "de", | |
| "Italian": "it", | |
| "Portuguese": "pt", | |
| "Russian": "ru", | |
| "Japanese": "ja", | |
| "Korean": "ko", | |
| "Chinese (Simplified)": "zh", | |
| "Arabic": "ar", | |
| "Turkish": "tr", | |
| "Hindi": "hi", | |
| "Thai": "th" | |
| } | |
| genres = ["Horror", "Romance", "Fantasy", "Sci-Fi", "Mystery", "Comedy", "Slice of Life"] | |
| styles = ["Realistic", "Semi-Realistic", "Cartoon", "Anime", "Noir", "Pixar-like", "Surreal"] | |
| moods = ["Funny", "Sad", "Mysterious", "Emotional", "Light-hearted", "Dark", "Fantastical"] | |
| rations = ["9:16 (Vertical Smartphone)", "16:9 (Landscape)", "1:1 (Square)"] | |
| audio = ["Rain", "Glitch", "Heartbeat", "Wind", "Footsteps", "Music Box", "Silence"] | |
| camera = ["Static", "Slow Zoom In", "Dolly In", "Drone Shot", "360° Pan", "Handheld Shake"] | |
| lighting = ["Soft Light", "Backlit", "Dark Shadows", "Flickering", "Cinematic Contrast"] | |
| ambience = ["Peaceful", "Chaotic", "Eerie", "Melancholic", "Magical", "Claustrophobic"] | |
| voice_line = ["", "‘What is this place?’", "‘Don't look behind you…’", "‘We meet again.’"] | |
| spoken_language = ["None", "English", "Japanese", "Indonesian", "Arabic", "Korean"] | |
| times = ["Morning", "Afternoon", "Sunset", "Night", "Midnight"] | |
| def translate_text(text, target_lang): | |
| try: | |
| response = requests.post( | |
| "https://translate.argosopentech.com/translate", | |
| data={"q": text, "source": "en", "target": target_lang, "format": "text"}, | |
| headers={"Content-Type": "application/x-www-form-urlencoded"} | |
| ) | |
| if response.status_code == 200: | |
| return response.json()["translatedText"] | |
| else: | |
| return "Translation error: " + response.text | |
| except: | |
| return "Translation failed." | |
| def generate_prompt(lang_key, genre, style, mood, ratio, setting, character, object, audio_fx, camera_move, lighting_fx, ambience_fx, dialogue, spoken_lang, extra_detail, timeslot, translation): | |
| language = languages.get(lang_key, "en") | |
| prompt = f"A {genre.lower()} scene set in {setting} during {timeslot}, featuring {character} and {object}. Visual style: {style}. Mood: {mood}. Format: {ratio}. Audio: {audio_fx}. Camera: {camera_move}. Lighting: {lighting_fx}. Atmosphere: {ambience_fx}." | |
| if dialogue: | |
| prompt += f" The character says: {dialogue} (in {spoken_lang})." | |
| if extra_detail: | |
| prompt += f" Additional details: {extra_detail}." | |
| if translation and language != "en": | |
| return translate_text(prompt, language) | |
| return prompt | |
| with gr.Blocks() as app: | |
| gr.Markdown("""# 🎬 Gemini Veo 3 Ultimate Prompt Generator | |
| Lengkap dengan fitur suara, musik, sinematik, lighting, dialog, waktu, dan efek suasana. | |
| """) | |
| with gr.Row(): | |
| lang = gr.Dropdown(list(languages.keys()), label="Output Language", value="English") | |
| genre = gr.Dropdown(genres, label="Genre") | |
| style = gr.Dropdown(styles, label="Visual Style") | |
| with gr.Row(): | |
| mood = gr.Dropdown(moods, label="Mood") | |
| ratio = gr.Dropdown(rations, label="Aspect Ratio") | |
| timeslot = gr.Dropdown(times, label="Waktu Kejadian") | |
| setting = gr.Textbox(label="Lokasi Adegan") | |
| character = gr.Textbox(label="Karakter Utama") | |
| object = gr.Textbox(label="Objek atau Fokus") | |
| with gr.Row(): | |
| audio_fx = gr.Dropdown(audio, label="Sound / Music") | |
| camera_move = gr.Dropdown(camera, label="Gerakan Kamera") | |
| lighting_fx = gr.Dropdown(lighting, label="Pencahayaan") | |
| ambience_fx = gr.Dropdown(ambience, label="Suasana Video") | |
| dialogue = gr.Dropdown(voice_line, label="Kalimat yang Diucapkan") | |
| spoken_lang = gr.Dropdown(spoken_language, label="Bahasa Percakapan") | |
| extra_detail = gr.Textbox(label="Tambahan Detail (opsional)") | |
| translate = gr.Checkbox(label="Terjemahkan prompt ke bahasa yang dipilih") | |
| output = gr.Textbox(label="Final Prompt", lines=6) | |
| generate = gr.Button("🔮 Generate Prompt") | |
| generate.click(fn=generate_prompt, | |
| inputs=[lang, genre, style, mood, ratio, setting, character, object, audio_fx, camera_move, lighting_fx, ambience_fx, dialogue, spoken_lang, extra_detail, timeslot, translate], | |
| outputs=output) | |
| app.launch() | |