No description
Find a file
2026-06-01 12:56:02 +00:00
examples web: move web-push sending to webserver; remove push logic from worker; add enable_show_local.php 2026-05-28 18:52:54 +00:00
hooks tools: add authorized-notify hook 2026-05-28 18:56:42 +00:00
.gitignore Ignore local media/assets dirs 2026-05-28 15:05:23 +00:00
movmaker.py Stop drawing teaser text in rendered intro while keeping metadata teaser 2026-06-01 05:34:40 +00:00
mvlog_worker.py Ignore .mvlog-hide-map in worker fingerprint calculation 2026-05-31 22:08:56 +00:00
package-lock.json Send web push notifications from worker 2026-05-26 13:48:33 +00:00
package.json Send web push notifications from worker 2026-05-26 13:48:33 +00:00
README.md README.md updated to current state 2026-06-01 12:56:02 +00:00
send_push.js Send web push notifications from worker 2026-05-26 13:48:33 +00:00

movmaker

Flat-folder Python + ffmpeg movie maker, plus optional MVLog worker.

What it does

  • Input: one directory with mixed images/videos/audio + optional data.txt
  • Output: one rendered MP4 with transitions, captions, intro/logo, stamps, and embedded metadata
  • Optional worker (mvlog_worker.py) syncs/render/publishes MVLog jobs to a remote webserver

Requirements

  • Python 3
  • ffmpeg, ffprobe

Install (Debian/Ubuntu):

sudo apt install ffmpeg

Basic usage

python3 movmaker.py /path/to/input

Preview render:

python3 movmaker.py /path/to/input --preview

Custom output dir:

python3 movmaker.py /path/to/input --out-dir /path/to/output

Input model (flat folder)

Supported media:

  • Images: .jpg .jpeg .png .webp .bmp .tif .tiff
  • Videos: .mp4 .mov .mkv .avi .webm .m4v
  • Audio: .mp3 .wav .m4a .aac .flac .ogg
  • Data file: data.txt (also accepts info.txt, title.txt)

No required subfolders.

Ordering

If order.json exists in the input folder, it is used first for visual media order. Then fallback order is handled by movmaker logic (metadata/filename/file-time based sorting path).

order.json should contain only visual files (images/videos).

data.txt format

Use key: value lines.

General keys used by movmaker:

  • Title / Name
  • Teaser
  • Quote_da
  • Location / Place / Where
  • Date / Dates / When
  • Description / Desc / Synopsis

Per-file captions:

IMG_0001.jpg: caption text
clip01.mp4: caption text

Per-video source audio toggle (optional):

clip01.mp4 audio: yes

Current render behavior (important)

  • Default still duration: 6s
  • Default crossfade: 3s
  • First still is extended (FIRST_IMAGE_DURATION_MULTIPLIER)
  • Intro/logo mode supported (--intro-logo)
  • Teaser is metadata-only (not burned into intro text)
  • quote_da and teaser are embedded in output metadata
  • Long video caption rule:
    • if clip duration > 10s, caption starts at +2s and shows for 6s
  • Output filename is normalized/safe ASCII (YYYYMMDD_slug.mp4)
  • Detailed ffmpeg logs are written under <input>/.logs/

MVLog worker (mvlog_worker.py)

Worker is for MVLog web integration (remote in-dir -> local render -> remote out-dir).

Key points:

  • Uses per-job state .movmaker-state.json
  • Honors job toggles (.movmaker-enabled, .movmaker-preview, .mvlog-hidden)
  • Includes article IDs from .mvlog-id in state
  • Ignores .mvlog-id and .mvlog-hide-map in fingerprinting
  • Publishes output atomically and clears remote cache file
  • Supports remote mode (SSH/SCP) and --local mode

Run once:

./mvlog_worker.py

Single job:

./mvlog_worker.py --job 20260525_mohnesee

Force rerender:

./mvlog_worker.py --job 20260525_mohnesee --force

Pass extra movmaker args:

./mvlog_worker.py --movmaker-arg=--preview

Notes

  • This repo does not send web push itself; push is handled by MVLog web app server-side.
  • Keep secrets out of git (API keys, push keys, auth files).