# Momentloom: Let the right video find you

> Source: <https://dev.to/sonu0702/momentloom-let-the-right-video-find-you-1jje>
> Published: 2026-10-24 08:40:30+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19)*

Every Short starts with a small question: which video is worth my time?

One long YouTube video can hide a dozen good moments, or none. Finding out means searching, opening tabs, skipping around, and only then starting the edit. After that come the crop, captions, hook, title, and description. Do it once and it is manageable. Do it for every video, every week, and the setup becomes its own job.

I wanted to move that work into the background. Momentloom starts before the editing timeline: it looks for source videos, prepares possible clips, and leaves me with the decision that still needs a person, what is worth sharing.

Momentloom is a local-first app that finds promising YouTube videos and turns their strongest moments into Shorts that are ready for review and posting.

The workflow can start with a topic or keyword. Momentloom gathers YouTube candidates, adds trend context where available, and ranks the results with an explainable Hype score. It helps prioritize candidates; it is not a probability estimate of virality. Searches can be saved and scheduled with a cron expression, country, language, and video-length filters. With Auto-shorts enabled, a schedule can send its top eligible result into the clip queue while another video is being processed.

For each source video, Momentloom transcribes the speech, looks for distinct moments that can stand on their own, and makes clips under 60 seconds. The number of clips depends on the moments it finds, rather than a fixed count. It can also choose a framing treatment for one face, two speakers, or a screencast, then burn in word-level captions in one of 17 styles.

Each clip comes with a spoken-word hook, a YouTube title, and descriptions for sharing. Momentloom prepares the package; a person still chooses what to post. It does not publish directly to a channel.

[Watch Momentloom find videos and prepare Shorts](https://youtu.be/hvM2OxrV054)

Reward your laziness: Momentloom automatically searches YouTube for trending videos by topic or keyword, turns standout moments into ready-to-post Shorts, and repeats on your schedule. Come back to finished clips with captions, hooks, titles, and descriptions ready for your channel.

[View or edit the Excalidraw source](https://github.com/sonu0702/momentloom/docs/07-auto-shorts-user-flow.excalidraw).

Gemma is optional. To use the default model, start Ollama and download it:

```
ollama pull gemma4:e4b
```

…

`.env.example` to `.env`, and start the Docker Compose app:

```
git clone https://github.com/sonu0702/momentloom.git
cd momentloom
cp .env.example .env
docker compose up --build -d
```

Then open [http://localhost:8001](http://localhost:8001). The README includes the cmd for creating `.env` and explains the optional local model setup.

The app is one repository with a React and Vite frontend and a Python FastAPI backend. Docker Compose runs the app alongside OpenSERP, which supplies related web results for discovery. SQLite keeps job state, search snapshots, schedules, and clip metadata. Large source videos and rendered clips stay in files on the user's computer, so rebuilding the Docker image does not erase them.

For discovery, OpenSERP provides trend context and PyYtSearch expands relevant phrases into YouTube candidates. A Python ranker combines the available signals into the Hype score. Search and clip ranking are separate: the Hype score ranks candidate videos; the clip pipeline estimates which moments in a selected video are worth cutting.

For clip creation, yt-dlp obtains a public YouTube source when needed, FFprobe reads its media properties, and faster-whisper transcribes speech locally with word-level timestamps. Gemma can suggest a visual layout, score transcript windows, propose clip boundaries, and draft titles, descriptions, and hooks. Python validates the response, aligns boundaries to words, removes duplicate moments, and enforces the under-60-second limit. OpenCV and MediaPipe handle local face tracking for reframing. FFmpeg renders the clips and libass burns in the timed captions.

**Gemma** is served through Ollama's OpenAI-compatible API. The endpoint and model are configurable:

```
LLM_BASE_URL=http://host.docker.internal:11434/v1
LLM_MODEL=gemma4:e4b
```

If Gemma is unavailable or returns unusable output, Momentloom falls back to local transcript heuristics and safe framing defaults. The app still runs; the model improves the editorial suggestions rather than becoming a single point of failure.

This workflow touches a lot of media, and the judgment calls are personal. I want to be able to choose which model helps make them, where it runs, and what happens when it is unavailable.

Using an open-weight model through Ollama makes local inference a practical option. The model setting can be changed without rebuilding the product around one provider. The pipeline is also inspectable: Gemma suggests moments and copy, while ordinary Python code validates clip boundaries, applies the length limit, and calculates the separate Hype ranking. That division makes it easier to understand what the model decided and what the application enforces.

Open innovation made it possible to build an end-to-end tool around a model I can run and configure myself, while keeping the fallback path usable. The result is not a black box that declares something viral. It is a repeatable assistant that finds candidates, prepares edits, and leaves the final choice with me.

I do not have measured before-and-after hours to claim, so I will not invent a time-saved number. The payoff is in the repeated steps Momentloom can take off my hands: search on a schedule, keep the results, queue an eligible video, and return to clips with captions and posting copy already prepared.

That is the kind of laziness I wanted to reward. I still make the taste call. I just do not have to begin every time by doing all the same setup work again.
