mf-overlaylisted
Install: claude install-skill arielaizn/motion-forge-plugin
# mf-overlay · קוד מעל המציאות
## שני מסלולים
**תמונה:** התמונה נכנסת לסרט כ-data URL, והסרט ��צייר מעליה.
```bash
python3 - <<'EOF'
import base64, sys
from PIL import Image; import io
im = Image.open('photo.jpg'); im.thumbnail((1920, 1920))
b = io.BytesIO(); im.convert('RGB').save(b, 'JPEG', quality=90)
open('films/photo-data.js', 'w').write("const PHOTO_SRC = 'data:image/jpeg;base64," + base64.b64encode(b.getvalue()).decode() + "';")
EOF
```
בסרט: `<script src="photo-data.js"></script>`, וב-`setup()` טוענים `new Image()` מ-`PHOTO_SRC` ומחכים ל-`decode()`.
תמונה מ-`file://` רגיל "מלכלכת" את הקנבס, ואז הרינדור נכשל ב-`toDataURL`. לכן data URL.
**וידאו:** הסרט מרונדר עם רקע שקוף ומולבש על הקליפ ב-ffmpeg.
1. בסרט: `bg: null`, ואותו `size` ו-`fps` כמו הקליפ (או 1080x1920 ב-30fps וחיתוך הקליפ).
2. `node render.mjs films/overlay.html --alpha` → `out/overlay.mov` (ProRes 4444 עם אלפא) + `out/overlay.wav`.
3. קומפוזיט, כשהפסקול של הסרט יורד מתחת לדיבור של הקליפ (sidechain):
```bash
ffmpeg -i clip.mp4 -i out/overlay.mov -i out/overlay.wav -filter_complex "\
[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,fps=30[bg];\
[bg][1:v]overlay=0:0:format=auto[v];\
[0:a]asplit=2[sp][key];[2:a]volume=0.8[fx];[fx][key]sidechaincompress=threshold=0.04:ratio=5:attack=8:release=250[fxd];\
[sp][fxd]amix=inputs=2:duration=first:normalize=0,alimiter=limit=0.93[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart final.mp4
`