ulti / app.py
kneth02's picture
Upload app.py
ebda5ad verified
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()