File size: 5,963 Bytes
a7438d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d6e9a60
 
 
a7438d2
 
4269cb2
a7438d2
098905a
 
 
 
 
 
 
 
 
 
a7438d2
 
 
8c8a286
 
 
 
 
 
 
 
 
 
 
 
 
a7438d2
 
098905a
 
 
 
 
 
 
 
 
 
a7438d2
 
 
098905a
 
 
 
 
 
 
 
 
 
 
a7438d2
 
 
 
 
97bb67c
 
 
a7438d2
1e26e1c
 
a7438d2
 
25aca96
 
1e26e1c
 
 
25aca96
1e26e1c
25aca96
 
9499f0c
 
 
 
 
97bb67c
 
 
a7438d2
97bb67c
 
9d859cb
97bb67c
 
 
 
 
 
 
 
 
a7438d2
 
 
8c8a286
9499f0c
a7438d2
 
 
4269cb2
a7438d2
 
 
 
5973976
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import gradio as gr
from llm_inference_video import VideoLLMInferenceNode
import random

title = """<h1 align="center">CineGen: AI Video Prompt Architect</h1>
<p align="center">Generate cinematic video prompts with technical specifications</p>"""

def create_video_interface():
    llm_node = VideoLLMInferenceNode()

    with gr.Blocks(theme='bethecloud/storj_theme') as demo:
        gr.HTML(title)
        
        with gr.Row():
            with gr.Column(scale=2):
                input_concept = gr.Textbox(label="Core Concept/Thematic Input", lines=3)
                style = gr.Dropdown(
                    choices=["Minimalist", "Simple", "Detailed", "Descriptive", "Dynamic", 
                            "Cinematic", "Documentary", "Animation", "Action", "Experimental"],
                    value="Simple",
                    label="Video Style"
                )

                camera_style = gr.Dropdown(
                    choices=[
                        "None",
                        "Steadicam flow", "Drone aerials", "Handheld urgency", "Crane elegance",
                        "Dolly precision", "VR 360", "Multi-angle rig", "Static tripod",
                        "Gimbal smoothness", "Slider motion", "Jib sweep", "POV immersion",
                        "Time-slice array", "Macro extreme", "Tilt-shift miniature",
                        "Snorricam character", "Whip pan dynamics", "Dutch angle tension",
                        "Underwater housing", "Periscope lens"
                    ],
                    value="None",
                    label="Camera Movement Style"
                )
                
                camera_direction = gr.Dropdown(
                    choices=[
                        "None",
                        "Zoom in", "Zoom out", "Pan left", "Pan right",
                        "Tilt up", "Tilt down", "Orbital rotation",
                        "Push in", "Pull out", "Track forward", "Track backward",
                        "Spiral in", "Spiral out", "Arc movement",
                        "Diagonal traverse", "Vertical rise", "Vertical descent"
                    ],
                    value="None",
                    label="Camera Direction"
                )
                
            with gr.Column(scale=2):
                pacing = gr.Dropdown(
                    choices=[
                        "None",
                        "Slow burn", "Rhythmic pulse", "Frantic energy", "Ebb and flow",
                        "Hypnotic drift", "Time-lapse rush", "Stop-motion staccato",
                        "Gradual build", "Quick cut rhythm", "Long take meditation",
                        "Jump cut energy", "Match cut flow", "Cross-dissolve dreamscape",
                        "Parallel action", "Slow motion impact", "Ramping dynamics",
                        "Montage tempo", "Continuous flow", "Episodic breaks"
                    ],
                    value="None",
                    label="Pacing Rhythm"
                )
                special_effects = gr.Dropdown(
                    choices=[
                        "None",
                        "Practical effects", "CGI enhancement", "Analog glitches",
                        "Light painting", "Projection mapping", "Nanosecond exposures",
                        "Double exposure", "Smoke diffusion", "Lens flare artistry",
                        "Particle systems", "Holographic overlay", "Chromatic aberration",
                        "Digital distortion", "Wire removal", "Motion capture",
                        "Miniature integration", "Weather simulation", "Color grading",
                        "Mixed media composite", "Neural style transfer"
                    ],
                    value="None",
                    label="SFX Approach"
                )
                custom_elements = gr.Textbox(label="Custom Technical Elements", 
                                           placeholder="e.g., Infrared hybrid, Datamosh transitions")
                
        with gr.Row():
            custom_elements = gr.Textbox(label="Custom Elements", scale=3)
            with gr.Column(scale=1):
                provider = gr.Dropdown(
                    choices=["SambaNova", "Groq"],
                    value="SambaNova",
                    label="LLM Provider"
                )
                model = gr.Dropdown(
                    choices=[
                        "Meta-Llama-3.1-70B-Instruct",
                        "Meta-Llama-3.1-405B-Instruct",
                        "Meta-Llama-3.1-8B-Instruct"
                    ],
                    value="Meta-Llama-3.1-70B-Instruct",
                    label="Model"
                )
                prompt_length = gr.Dropdown(
                    choices=["Short", "Medium", "Long"],
                    value="Medium",
                    label="Prompt Length"
                )

        generate_btn = gr.Button("Generate Video Prompt", variant="primary")
        output = gr.Textbox(label="Generated Prompt", lines=12, show_copy_button=True)

        def update_models(provider):
            models = {
                "Groq": ["llama-3.3-70b-versatile"],
                "SambaNova": [
                    "Meta-Llama-3.1-70B-Instruct",
                    "Meta-Llama-3.1-405B-Instruct",
                    "Meta-Llama-3.1-8B-Instruct"
                ]
            }
            return gr.Dropdown(choices=models[provider], value=models[provider][0])

        provider.change(update_models, inputs=provider, outputs=model)

        generate_btn.click(
            llm_node.generate_video_prompt,
            inputs=[input_concept, style, camera_style, camera_direction, pacing, special_effects, 
                   custom_elements, provider, model, prompt_length],
            outputs=output
        )


    return demo

if __name__ == "__main__":
    demo = create_video_interface()
    demo.launch(share=True)