本文へ移動
cccskills
無料GitHub で公開日本語紹介

render-imessage-chat

連絡先や会話文、表示時刻などを設定し、iMessage風のチャットをスマートフォン画面内に描いた縦型動画とブランドのエンドカードを作成します。

原文原文の説明を見る

Render a configurable iMessage conversation inside a properly framed phone, then a brand end card. Uses the original send/receive sounds and a shared frame timeline for text, typing, scrolling and sound. Free local Playwright + ffmpeg assembly; optional image/music generation belongs to separate gated capabilities.

gooseworks-ai/goose-skillsスター 1,272(GitHub 1,272 + cccskills 0)
連携ツールTikTokPlaywright

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • チャット形式の広告を作りたいとき
  • 会話のオチを見せる縦型動画を作るとき
  • 名前や時刻を指定したスマホ画面を作りたいとき
  • ブランドのエンドカード付き動画を作るとき

日本語での紹介

できること

連絡先名、グループ名、表示時刻、会話文、テーマ、背景などを設定し、iMessage風の会話をスマートフォン画面に表示した動画を作ります。テキストだけの会話にも対応し、画像やリアクションを指定した位置に挿入できます。文字の表示、入力中の演出、スクロール、送受信音は共通のタイムラインに沿って進み、会話の後にはロゴやCTAなどを含むブランドのエンドカードをつなげます。縦型動画では、最新のメッセージがReelsやTikTokの操作表示に隠れにくい安全領域に収まるよう画面を調整します。プレビューを作って確認し、設定を直して再レンダリングすることもできます。

こんなときに便利

チャット形式の広告や、会話のオチを見せる縦型動画を作りたいときに向いています。会話の登場人物やブランドに合わせて画面を調整したい場合にも使えます。

使い方の例

  • 「この会話をiMessage風の縦型広告にしてください」
  • 「連絡先名と表示時刻を指定して、ブランドのエンドカードを付けてください」

注意点

Node 18以上、Python 3、libx264対応のffmpeg、ffprobe、Playwright Chromiumが必要です。動画の組み立てはローカルで行い、レンダリングに有料APIは不要です。画像や音楽の生成は別の機能です。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

含まれるファイル(24)

  • SKILL.md12.8 KB
  • assets/sfx/imessage-receive.mp311.5 KB
  • assets/sfx/imessage-send.mp34.2 KB
  • references/imessage-reference.md5.2 KB
  • scripts/chat-driver.js6.3 KB
  • scripts/check-render.py6.1 KB
  • scripts/config.example.json1.7 KB
  • scripts/end-card.template.html3.5 KB
  • scripts/mockup/generate.js15.9 KB
  • scripts/mockup/templates/chat.css18.1 KB
  • scripts/mockup/templates/icons.js3.3 KB
  • scripts/package-lock.json1.7 KB
  • scripts/package.json322 B
  • scripts/record-chat.js25.0 KB
  • scripts/render-end-card.js14.3 KB
  • scripts/render.sh992 B
  • scripts/sfx-embedded.json21.7 KB
  • scripts/stitch.sh8.9 KB
  • skill.meta.json230 B
  • tests/fixtures/long-group-thread.json3.3 KB
  • tests/smoke-test.md1.5 KB
  • tests/test_chat.js12.3 KB
  • tests/test_safe_area.js10.1 KB
  • tests/test_stitch.py12.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Superseded: the video kit now does this with the phone-chat part, version 1.2.0, in the parts folder of this repository. Every phone-chat style is a style file that draws the same screen frame by frame from the plan's scenes, with the original sounds, in the kit's browser. This atom stays, unchanged in behaviour, for skills outside the kit until they move; its scripts still run.

Human version

Make a texting-story ad with the chosen contact names and phone time, a proportional phone, an inset Dynamic Island and the original iMessage sounds. The brand, story and background can change. Images are optional and can appear anywhere in the conversation; product links and music are optional too.

This rebuild preserves the shell and sounds from the approved Dermwise Goa build. It fixes missing identity binding, the island touching the screen edge, light-mode header colors, early/missing group names and capture timing drift. Every movie frame and sound cue uses the same timeline; browser startup cannot trim the beginning or ending. No paid API is needed to render or repair the UI.

On a 9:16 canvas the phone now sits clear of the TikTok/Reels controls by default: the newest message, including the punchline, always stays above the bottom caption band and left of the button rail (safe_area).


Agent version

Read the reference and authoring rules. The calling recipe supplies NEW names, copy, brand facts and real assets. scripts/config.example.json is a fictional, runnable example, never defaults.

Choices and bindings

  • Relationship, contact names and group title → thread.participants, thread.title.
  • Displayed phone time → thread.clock, preserving the user's chosen text.
  • Story, tone and language → thread.messages. Casual spelling and emojis are allowed.
  • Chat images → zero or more attachment entries at their authored positions in thread.messages; either participant may send them. Never reorder by type.
  • Theme → theme: "dark" | "light".
  • Background → optional local background_image; neutral when absent.
  • Hardware → dynamic_island: true | false; true floats inside the screen.
  • Music → optional existing bed passed to render.sh --music; no bed means SFX only.

Exactly one participant is self:true. A DM has two participants; its header reads the other participant's name and derives the first initial unless supplied. A group requires a title and named contacts. Missing names fail before capture. There is no demo-name fallback. Changing the config changes the visible name. When a name changes, update any derived initials too. Keep explicit user-supplied initials only when they still match the requested identity.

Run

Requires Node 18+, Python 3, ffmpeg with libx264, ffprobe and Playwright Chromium. Install dependencies in the fetched scripts folder, then launch/close that script's own Chromium before any optional paid image/music call. Preserve its cwd, NODE_PATH and PLAYWRIGHT_BROWSERS_PATH. gooseworks doctor --renderer-script "/absolute/path/scripts/record-chat.js" can check that runtime. If unavailable, use a bounded free createRequire(actualScript) launch/close probe (15-second launch timeout, 20-second whole-process limit). Cache presence alone is not proof.

cd scripts
npm ci
# Install Chromium only if the free launch probe says it is missing:
# npx playwright install chromium
node record-chat.js --config /absolute/path/config.json --out-dir /absolute/path/working/preview --preview-only
bash render.sh --config /absolute/path/config.json --out /absolute/path/finals/master-final.mp4
# Optional: append --music /absolute/path/bed.mp3

Preview produces chat.html, chat-preview.png and master-chat.safe-area.json; the HTML exposes window.__renderAt(seconds) and window.__safeAreaReport() (canvas-pixel boxes of the newest row and any data-safe-keep sheet or dialog) for frame inspection. Full render keeps those, master-chat.mp4, .timeline.json, .sfx.json, the end-card HTML/PNG/MP4 and the finished master. The recorder checks the safe area on every output frame and fails on a violation. check-render.py verifies dimensions, audio stream, frame count, complete ending and the safe-area report; python3 scripts/check-render.py --safe-area <work>/master-chat.safe-area.json checks a preview alone. Review the ACTUAL master after every repair; these technical checks do not establish creative acceptance.

Individual record-chat.js, render-end-card.js and stitch.sh commands remain available. render.sh produces the 1080×1920 recipe master. The chat recorder also supports even preview dimensions; the phone must fit with a margin.

Config contract

  • Inline thread or thread_path. Relative files resolve against config.json.
  • Unique message IDs and valid from participants. Types: text, typing, timestamp, attachment, tapback. Reactions target an earlier message ID and carry an emoji. Typing immediately precedes a received text/attachment from the same person. Self messages type in the composer, including complete emoji graphemes.
  • Short messages read best. Longer words wrap; real overflow fails preflight.
  • Optional attachment: src local image/data URI, presentation:"photo" for a photo or "rich-link" for image + flush meta card + title/domain/chevron. Optional dwell_sec overrides its default 3.6-second reading hold. Text-only chats need no images. One or several attachments can come first, between any messages or last; preserve the user's placement and sender. Never require an opening photo or a product image at a fixed beat.
  • Optional thread.clock sets the displayed status-bar time, such as 10:24 or 18:07. Bind the chosen time; do not replace it with a demo time. Only when absent does the shell use its neutral 9:41 fallback. In-chat timestamp labels are separate message inputs, not a required fixed timestamp.
  • End card: approved image_path, or real logo_svg_path, logo_image_path, inline logo_svg or wordmark_text, brand colors, CTA and optional benefits. stars defaults to 0. Ratings require approved proof_text. An artwork path replaces the complete template; check its copy and CTA first.
  • Default outer canvas 1080×1920; zoom fits the 393×852 phone proportionally. Excess zoom fails rather than cropping the phone. timing can override the named pacing fields in record-chat.js; ending hold must be at least 0.5 seconds.
  • safe_area keeps the conversation clear of the platform controls. Omitted: on for 9:16 canvases, off for other shapes. true uses the review-finished-ad bands (top 220, bottom 400, right 140, left 0 px at 1080×1920, scaled to the canvas). An object such as {"bottom":480} overrides single bands in output pixels; omitted keys keep the defaults. false restores the old centred full-height phone exactly.
  • With safe_area on, the phone is the largest proportional size whose conversation viewport sits inside the zone (an 8 px inset) while the phone stays in the middle of the canvas. At 1080×1920 that is zoom about 1.648 with 258 px above and below the phone. phone_fit: "largest" gives the biggest safe phone instead (zoom about 1.97), which has to sit 16 px from the top with a wide gap under it. Every row is clipped to that viewport, so the newest row is safe on every frame. The composer, home bar and group avatars may sit in the bands; typed text reappears as the newest row.
  • An explicit zoom is a ceiling while safe_area is on: kept when safe, otherwise lowered to the safe maximum with a log line (the recipe seed zoom: 2.1 becomes about 1.648). Set safe_area:false to keep it exactly.
  • The framed phone draws the home indicator, with the 34 px strip iOS keeps under the composer for it.
  • timing.tail_hold (default 2 s) is how long the finished thread holds before the end card. With the gap that follows the last message, the last line is on screen about 2.7 s; at 1 s a nine-word punchline had 1.7 s.

Original sound contract

The send/receive MP3s are byte-identical to both archived Dermwise and Wonderloom builds. Keep them. No substitute ringtone, notification-cascade sound or generated pop. One cue per real text/attachment; none for typing or composer keystrokes. Picture reveals and cues share fixed output-frame times; the audible onset follows the first visible reveal frame. The mixer strips leading silence and limits peaks.

Full checkouts use assets/sfx. Text-only catalog packages use the hash-checked scripts/sfx-embedded.json fallback. Keep that file byte for byte. --sfx-dir can override the source explicitly. Missing, silent, corrupt or LFS-pointer audio stops the render. After an intentional MP3 replacement, a builder regenerates the embedded copy in the goose-skills repo with python3 tests/test_stitch.py --write-embedded.

Verification and failures

The tests live in the goose-skills repo, not in installed copies. There, run node --test tests/test_chat.js, node --test tests/test_safe_area.js and python3 -m pytest tests/test_stitch.py. Run one test file at a time; each test opens and closes one Chromium. Browser tests cover changing names/time/background, text-only chats, attachment placement, blank-name rejection, inset hardware, dark/light chrome, group labels after typing, Unicode composer text and long threads. test_safe_area.js walks every frame of tests/fixtures/long-group-thread.json (16-message group thread, wrapped punchline) and asserts the newest row stays above y 1520 and left of x 940, that a bottom sheet in the band fails, and that safe_area:false keeps the old layout. CI runs both browser files. Audio tests cover fetched-package delivery and limited overlapping cues.

Fix the configuration error and rerender locally. UI defects never justify paid generation. Watch the final for the selected name, readable bubbles, smooth scroll, correct sender labels and sounds, complete last message and correct brand end card. Use review-finished-ad for brand/copy review when called by the recipe.

Critical knowledge

The current renderer combines the fixed-frame repair with the lessons from the live-capture audit. Read [[references::references/imessage-reference.md]] before authoring.

  1. Browser startup and CPU load must never change movie time. Fixed output frames replace capture-clock guesses, sync curtains and picture-snapping retries.
  2. Measure each sound's audible onset. The original send file includes lead-in; trim silence before placing it on the visible reveal frame.
  3. Keep the original receive chime. Shorten it only when another message follows quickly, so its second note cannot mask that next message.
  4. Check the text Range against the bubble bounds. Bubble tails intentionally extend beyond the box.
  5. Use Apple emoji assets for recordings on hosts whose native emoji differ. Cache and inline them before capture; keep complete Unicode graphemes while typing.
  6. Scratch directory templates must work on macOS and GNU systems.
  7. Start short conversations under the header. Keep the input fixed at the bottom and scroll only the conversation.
  8. Picture and sounds share output-frame time. Reactions use that same timeline and must target an earlier real message.
  9. Do not zoom into a link as if a camera were moving across the phone screen.
  10. Editorial endings use the brand's own fonts, headlines, benefits, URL and footnote. Approved complete artwork can replace the template.
  11. Show Delivered only beneath the newest sent text or attachment.
  12. Typed text must equal sent text. The deterministic composer completes before sending and wraps long lines.
  13. Download and inline requested end-card fonts before capture. A missing font fails the render instead of silently changing the brand.
  14. Read approved brand colours from the brand kit or site styling. Preserve the selected background and contact names.
  15. Keep the quieter audit mix with the existing peak limiter. Unsupported ratings remain absent unless approved proof is supplied.
  16. Inspect the actual encoded ending and sound alignment. Frame counts and a passing stream probe do not establish creative acceptance.
  17. Keep the newest message out of the platform controls. A full-height phone put the punchline under the TikTok/Reels caption band. Fit the conversation viewport, not the whole phone, into the safe zone: the phone stays large and native. A future skin with bottom sheets must extend PHONE.keep to the screen bottom and mark sheets data-safe-keep.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

<slug>

無料概要あり

資料には具体的なスキルの内容や手順が記載されていないため、用途や得られる結果を特定できません。

  • 用途を確認したいとき
  • 入力や手順を確認したいとき
  • 期待する結果を確認したいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-angle-miner

無料概要あり

顧客の課題や商品情報、広告事例を調べ、根拠のある広告訴求と静止画・動画・コピー案にまとめます。動画案は実際の制作フォーマットとの相性も確認し、商品単位の角度集として整理します。

  • 商品の根拠に沿った広告の切り口を探したいとき
  • 静止画広告や動画広告の案を作りたいとき
  • 顧客の言葉から見出しや広告文を考えたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-campaign-analyzer

無料概要あり

Google、Meta、LinkedInなどの広告実績を分析し、成果の出た広告や予算の無駄を特定します。停止・拡大・テスト案や、具体的な予算配分を提案します。

  • 広告予算の無駄を見つけたいとき
  • 複数媒体の成果を比較したいとき
  • 広告の停止・拡大候補を決めたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-lead-quality-analyzer

無料概要あり

広告費と登録後の成果を照合し、質の高いリード獲得にかかった実コストを算出します。広告素材ごとに拡大・維持・調査・停止の判断材料を整理するスキルです。

  • 広告素材ごとの実質獲得コストを比べたいとき
  • 低CPAでも質の低い広告を見つけたいとき
  • 登録後の成果データとの照合状況を調べたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-management-intake

無料概要あり

Meta広告を始める前にブランド情報を調べ、予算や広告表現に関わる不明点だけを質問して準備を整えます。確認事項と仮定を記録し、ブランド情報とキャンペーン概要を作成します。

  • ブランド情報が未記録の状態で広告を始めたいとき
  • 予算や広告期間の前提を整理したいとき
  • 広告で使う主張や制約を記録したいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-policy-check

無料概要あり

広告文や画像内の表現を配信先と商品カテゴリのルールに照らして確認し、直せる箇所を修正しながら、法務や人の判断が必要なリスクを広告ごとに整理します。

  • 広告の配信前チェック
  • 広告画像や動画の表現確認
  • クリエイター広告の表示確認
gooseworks-ai/goose-skills1,2722026年10月27日 更新

gooseworks-ai のスキルをすべて見る

このスキルの問題を報告する