File size: 5,878 Bytes
eb53b5d
 
 
 
 
 
 
f02a325
eb53b5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f02a325
eb53b5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f02a325
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
134
135
136
137
138
139
140
141
142
143
import os

os.environ["PIP_ROOT_USER_ACTION"] = "ignore"
os.environ["GRADIO_SSR_MODE"] = "false"
os.environ["GRADIO_DISABLE_SSR"] = "1"

import gradio as gr
import spaces  # Mandatory for ZeroGPU Spaces

RESOURCES = [
    {
        "name": "Vidi (ByteDance)",
        "category": "Video Model",
        "description": "ByteDance's multimodal video understanding and generation framework.",
        "links": [
            ("πŸ™ GitHub", "https://github.com/bytedance/vidi"),
            ("πŸš€ Live Demo", "https://vidi.byteintl.com"),
        ],
    },
    {
        "name": "Molmo2-8B (AllenAI)",
        "category": "Open-Weight VLM",
        "description": "AllenAI's open multimodal vision-language model for rich video and image reasoning.",
        "links": [
            ("πŸ€— Hugging Face", "https://huggingface.co/allenai/Molmo2-8B"),
            ("πŸš€ Playground Demo", "https://playground.allenai.org/?model=molmo2-8b"),
            ("πŸ“ Blog Post", "https://allenai.org/blog/molmo2"),
            ("▢️ YouTube Video", "https://youtu.be/Ej3Hb3kRiac"),
        ],
    },
    {
        "name": "VideoLLaMA 3 (DAMO-NLP-SG)",
        "category": "Video-LLM",
        "description": "Frontier multimodal foundation model tailored for image and video understanding.",
        "links": [
            ("πŸ™ GitHub", "https://github.com/DAMO-NLP-SG/VideoLLaMA3"),
            ("πŸš€ HF Space Demo", "https://huggingface.co/spaces/lixin4ever/VideoLLaMA3"),
        ],
    },
    {
        "name": "VideoJev-35B-A3B",
        "category": "MoE Video-LLM",
        "description": "35B total parameter (3B active) Mixture-of-Experts model for efficient video understanding.",
        "links": [
            ("πŸ€— Hugging Face", "https://huggingface.co/ZhuYuhan/VideoJev-35B-A3B"),
            ("πŸš€ HF Space Demo", "https://huggingface.co/spaces/hugging-apps/videojev-35b-a3b"),
        ],
    },
    {
        "name": "Gemini Agentic Video Understanding",
        "category": "API & Developer Guides",
        "description": "Official Google AI Studio and Gemini API guides for agentic video reasoning and frame-level understanding.",
        "links": [
            ("πŸ› οΈ AI Studio Developer Guide", "https://aistudio.google.com/learn/agentic-video-understanding-with-gemini"),
            ("πŸ“š Gemini Video Docs", "https://ai.google.dev/gemini-api/docs/video-understanding"),
        ],
    },
]


@spaces.GPU  # Satisfies the ZeroGPU startup scanner
def filter_resources(search_query: str, category_filter: str) -> str:
    query = (search_query or "").strip().lower()
    sections = []

    for item in RESOURCES:
        if category_filter != "All" and item["category"] != category_filter:
            continue
        if query and (
            query not in item["name"].lower()
            and query not in item["description"].lower()
            and query not in item["category"].lower()
        ):
            continue

        links_md = "  |  ".join(
            f"**[{label}]({url})**" for label, url in item["links"]
        )
        section = (
            f"### {item['name']}  `[{item['category']}]`\n"
            f"{item['description']}\n\n"
            f"πŸ”— {links_md}\n\n---"
        )
        sections.append(section)

    if not sections:
        return "### No matching models or resources found."

    return "\n\n".join(sections)


categories = ["All"] + sorted(list({r["category"] for r in RESOURCES}))

with gr.Blocks(title="Video Understanding Models & Demos Hub") as demo:
    gr.Markdown(
        """
        # 🎬 Video Understanding Models, Demos & Resources
        Quick-access directory of multimodal video foundation models, Hugging Face checkpoints, interactive playgrounds, and developer guides.
        """
    )

    with gr.Row():
        search_box = gr.Textbox(
            label="Search Models / Links",
            placeholder="Filter by keyword (e.g., Molmo, VideoLLaMA, Gemini, ByteDance, Vidi)...",
            scale=3,
        )
        category_dropdown = gr.Dropdown(
            choices=categories,
            value="All",
            label="Category",
            scale=1,
        )

    gr.Markdown("---")
    results_markdown = gr.Markdown(value=filter_resources("", "All"))

    with gr.Accordion("πŸ“‹ Summary Comparison Table", open=True):
        gr.Markdown(
            """
| Model / Resource | Category | Model / Repo Link | Live Demo / Space | Extra Links |
| :--- | :--- | :--- | :--- | :--- |
| **Vidi (ByteDance)** | Video Model | [GitHub](https://github.com/bytedance/vidi) | [Vidi Demo](https://vidi.byteintl.com) | β€” |
| **Molmo2-8B (AllenAI)** | Open-Weight VLM | [Hugging Face](https://huggingface.co/allenai/Molmo2-8B) | [AllenAI Playground](https://playground.allenai.org/?model=molmo2-8b) | [Blog](https://allenai.org/blog/molmo2) Β· [YouTube](https://youtu.be/Ej3Hb3kRiac) |
| **VideoLLaMA 3** | Video-LLM | [GitHub](https://github.com/DAMO-NLP-SG/VideoLLaMA3) | [HF Space](https://huggingface.co/spaces/lixin4ever/VideoLLaMA3) | β€” |
| **VideoJev-35B-A3B** | MoE Video-LLM | [Hugging Face](https://huggingface.co/ZhuYuhan/VideoJev-35B-A3B) | [HF Space](https://huggingface.co/spaces/hugging-apps/videojev-35b-a3b) | β€” |
| **Gemini Video Understanding** | API & Developer Guides | [AI Studio Guide](https://aistudio.google.com/learn/agentic-video-understanding-with-gemini) | β€” | [API Docs](https://ai.google.dev/gemini-api/docs/video-understanding) |
            """
        )

    search_box.change(
        fn=filter_resources,
        inputs=[search_box, category_dropdown],
        outputs=results_markdown,
    )
    category_dropdown.change(
        fn=filter_resources,
        inputs=[search_box, category_dropdown],
        outputs=results_markdown,
    )

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860, ssr_mode=False)