diff --git a/.claude/skills/video-film/SKILL.md b/.claude/skills/video-film/SKILL.md index a6d352b..2246abc 100644 --- a/.claude/skills/video-film/SKILL.md +++ b/.claude/skills/video-film/SKILL.md @@ -1,6 +1,6 @@ --- name: video-film -description: Make or change a social media film in apps/video (Remotion) in the approved mintel.me style - one continuous shot, minimal, with a camera pull-back as the reveal, in German and English. Use when asked for a new video, a new topic, changes to an existing film, new formats, or to re-render the video library. +description: Make or change a social media film or image post in apps/video (Remotion) in the approved mintel.me style - one continuous shot, minimal, with a camera pull-back as the reveal, in German and English. Use when asked for a new video, a new topic, changes to an existing film, new formats, or to re-render the video library. --- # Making a film for mintel.me @@ -87,9 +87,24 @@ Frame 0 is the preview image: it must already look good and carry the hook line. - **Do not name a helper script `copy.py`, `json.py` or similar**: it shadows the Python module. - **Text from an old worktree is stale.** The website changed language and wording during this work. +## Image posts + +Every film gets a poster, and the plan pairs it with a card (see `apps/web/plans/content-strategy.md`). + +- Poster: add an entry to `src/content/images.ts` with `poster: { video, frame }`. Pick the frame where the + whole picture is in view and the problem is obvious (around frame 250 to 300). Two lines, as short as + possible: "Kein Pingpong." / "Ihr Büro." +- Card: a question a client asks before the first call (`label`) and the answer in two or three lines. + The answer must be on the website already. +- Add the new posts to `src/content/plan.ts`, run `pnpm test`, then `node scripts/export.ts --images` + and look at the PNGs in `feed` and `square`. +- A poster is not a frozen frame inside a one-frame image: `Freeze` did not work there. The poster is a + composition as long as the film, rendered at that frame. + ## Formats and output Compositions are `--`. `node scripts/export.ts` renders `feed` (4:5, LinkedIn) and `wide` (16:9, YouTube and ads) in both languages into -`out/library///`, with `post.txt` and an overview page `out/library/index.html`. -`out/` is not committed. +`out/library//week-/--/`, with `post.txt` and an overview page +`out/library/index.html`. `out/` is not committed. Keep it tidy: check frames, contact sheets and logs +go into `out/tmp`, nothing loose into `out/`, and `out/tmp` is emptied before you report. diff --git a/apps/video/CLAUDE.md b/apps/video/CLAUDE.md index 8010c26..70f6a9f 100644 --- a/apps/video/CLAUDE.md +++ b/apps/video/CLAUDE.md @@ -12,11 +12,12 @@ or `pnpm -r`. `apps/web` must never import from here, and this package imports n - One video: `pnpm render WebsiteDone-de-feed out/website.mp4` - The whole library: `pnpm library` (= `node scripts/export.ts`; `--only `, `--formats feed,wide`, `--page` to rewrite only post texts and the overview). Writes `out/library/index.html` (watch, copy the post - text, download) and `out/library/