Spaces:
Running
on
Zero
Running
on
Zero
| import gradio as gr | |
| # FramePack - 画像から動画生成 アプリケーション | |
| def make_custom_css(): | |
| """カスタムCSSを作成してレスポンシブ対応およびエラースタイルを定義""" | |
| # (省略: 既存のCSS定義をそのまま利用) | |
| return combined_css # 前述のCSSを返す | |
| css = make_custom_css() | |
| gr_ui = gr.Blocks(css=css).queue() | |
| with gr_ui: | |
| # アプリタイトル | |
| gr.HTML("<h1>FramePack - 画像から動画生成</h1>") | |
| # レイアウト: 左側は入力、右側は出力 | |
| with gr.Row(): | |
| with gr.Column(): | |
| # 画像アップロード | |
| input_image = gr.Image( | |
| source='upload', | |
| type="numpy", | |
| label="画像をアップロード", | |
| height=320 | |
| ) | |
| # プロンプト入力 | |
| prompt = gr.Textbox( | |
| label="プロンプト", | |
| placeholder="The camera smoothly orbits around the center of the scene, keeping the center point fixed and always in view" | |
| ) | |
| # クイックプロンプト一覧 | |
| quick_prompts = [ | |
| ["The camera smoothly orbits around the center of the scene, keeping the center point fixed and always in view"], | |
| ] | |
| example_prompts = gr.Dataset( | |
| samples=quick_prompts, | |
| label='クイックプロンプト', | |
| samples_per_page=10, | |
| components=[prompt] | |
| ) | |
| example_prompts.click(lambda x: x[0], inputs=[example_prompts], outputs=prompt) | |
| # 操作ボタン | |
| with gr.Row(): | |
| start_button = gr.Button("生成開始", variant="primary") | |
| stop_button = gr.Button("生成停止", interactive=False) | |
| # 設定パネル | |
| seed = gr.Number( | |
| label="シード値", | |
| value=31337, | |
| precision=0 | |
| ) | |
| video_length = gr.Slider( | |
| label="動画の長さ (最大5秒)", | |
| minimum=1, | |
| maximum=5, | |
| value=3, | |
| step=0.1 | |
| ) | |
| steps = gr.Slider( | |
| label="推論ステップ数", | |
| minimum=1, | |
| maximum=100, | |
| value=25, | |
| step=1 | |
| ) | |
| teacache = gr.Checkbox( | |
| label="TeaCacheを使用", | |
| value=True, | |
| info="高速化しますが、手指の生成品質が若干低下する可能性があります。" | |
| ) | |
| with gr.Column(): | |
| # プレビュー表示 | |
| preview = gr.Image( | |
| label="プレビュー", | |
| visible=False, | |
| height=200 | |
| ) | |
| # 生成結果動画 | |
| result_video = gr.Video( | |
| label="生成された動画", | |
| autoplay=True, | |
| loop=True, | |
| height=512 | |
| ) | |
| # 進捗表示 | |
| progress_desc = gr.Markdown("") | |
| progress_bar = gr.HTML("") | |
| # エラーメッセージ表示 | |
| error_html = gr.HTML("", visible=True) | |
| # 各種処理関数との紐付け | |
| inputs = [input_image, prompt, seed, video_length, steps, teacache] | |
| start_button.click(fn=process, inputs=inputs, | |
| outputs=[result_video, preview, progress_desc, progress_bar, start_button, stop_button]) | |
| stop_button.click(fn=end_process) | |
| # アプリ起動 | |
| gr_ui.launch() | |