GIF Cinema
將一個簡報轉化為具有因果關係的不同可見動作,然後組裝審查過的鏡頭成為一個較長的故事。分離外觀、角色動作、圖形運動與交付格式。保留使用者選擇的藝術風格與已批准的素材。這是一個作者引導的工作流程,而非自主動畫模型。
選擇真實的生產路線
- 現有 GIF: 檢查每個片段實際顯示的內容;圍繞這些動作建立故事。捆綁的範例在無 API 金鑰的情況下測試了此路線。
- 新角色動作: 為每個短暫生成的 GIF 規劃一個主要動作。僅使用可用的、已授權的生成工具或 API。在將其狀態擴展到另一個場景之前,檢查並接受每個結果。請參閱 generation.md。
- 動態設計: 使用包含的本地動畫標題渲染器處理排版和強調規則入場。對於分層角色、可移動道具、遮罩或綁定動作,請使用環境中實際可用的合成器並保留其可編輯來源。此套件不包含通用分層動畫引擎。
不要將攝影機漂移、疊加層、反轉的素材、同一剪輯上的另一個字幕或更長的停留視為新的角色動作。一部長卡通需要額外的故事事件。如果缺少那些圖畫且無法生成,請交付一個誠實的動畫腳本或生產計畫,而不是聲稱的完成卡通。
運行時與無金鑰檢查
需要 Python 3.10+、Pillow、Git、FFmpeg 和 ffprobe。使用隔離環境。該技能的助手使用經過審查的不可變公共運行時:
python -m venv .venv
# 為你的 shell 啟動 .venv,然後:
python -m pip install "gif-cinema @ git+https://github.com/antropos17/chatgpt-gif-cinema.git@fa82b13366a9ae94a4ece730ec6b2d065cd9a060"
python -m gif_cinema --help
ffmpeg -version
ffprobe -version
也可以使用該版本的現有檢出或經過測試的相容新運行時。不要自動降級一個正常工作的專案。運行時使用包含的源可用 評估授權。GIF Factory 的歸屬工作流程影響在 THIRD_PARTY_NOTICES.md 中有其自己的 MIT 通知。
相對於此技能資料夾解析助手和資產路徑。以下範例假設外殼在該資料夾中。從其他位置,請使用助手的絕對路徑和輸入 JSON;將輸出放在使用者的專案中,絕不要放在已安裝的技能中。
python scripts/story_project.py compile assets/example/storyboard.json --out output/story-project
python -m gif_cinema render output/story-project/film.json --dry-run --max-api-calls 0
python -m gif_cinema render output/story-project/film.json --execute --max-api-calls 0 --out output/story-render
python scripts/story_project.py export-gif output/story-render/film.mp4 --out output/story.gif
這是一個 9.68 秒的來源編輯,而不是一個新的長卡通:一個 2 秒的本地動畫標題,後面跟著三個現有的 2.56 秒太空人動作。MP4 使用 25 fps;來源角色每個片段有 16 張圖畫,而不是每秒 25 張新圖畫。GIF 匯出預設為 320 像素寬、10 fps、無聲、播放一次。--repeat 循環整個結果。某些檢視器會覆蓋 GIF 循環行為。
對於核心 CLI 回歸檢查,運行 scripts/smoke_test.py --out NEW_DIRECTORY。兩個助手都不需要金鑰。故事助手從不進行提供者呼叫,並拒絕現有的輸出專案。story-project.md 記錄了其確切的 schema、命令、時間和限制。
在生成之前直接
對於一個新故事或實質性的擴展,請閱讀 storytelling.md。製作一個可編輯的故事板:
- 前提和結局;受眾、目標時長、長寬比、語言和聲音需求(如相關)。推斷低風險預設值,而不是再次詢問。
- 一個緊湊的視覺聖經:可識別的角色錨點、調色板/材質、服裝、道具數量、所有權、比例、地理和攝影機慣例。
- 一個節拍/鏡頭列表:之前的狀態 → 可見動作 → 之後的狀態,攝影機、預期時長和故事中的目的。在每個剪輯處追蹤手/道具/接觸點。
- 一個來源/生成對應:哪些動作已經存在,哪些需要新圖畫,哪些是本地圖形。將未渲染的鏡頭標記為未渲染。
通過添加有意義的動作和後果來擴展故事,而不是重複素材直到計時器達到簡報。assets/example/long-story.plan.json 中的長故事範例是一個未渲染的 14 動作生產計畫。編譯它會準備 14 個一次性生成輸入;它不會渲染這些動作。
故意生成並連接
使用 scripts/story_project.py compile ... 編譯故事板。一個僅含來源的專案具有可執行的 film.json。一個缺少或已生成鏡頭的專案具有單獨的 generation/ID.json 輸入和一個故意不完整的 assembly-template.json。編譯器不會執行付費批次。
當角色或方法是新的時,使用一個代表性動作來建立可行性。新生成需要使用者自己的 API 存取和約定的有限呼叫上限。為了終點連續性,提取接受的上一個最後一幀,檢查它,然後將該現有靜止幀加上一個乾淨的身份參考附加到下一個鏡頭輸入。編譯器不會創建未來參考或自動依賴圖。
保持單獨的片段資料夾和已接受/已拒絕候選者的記錄。必須在兩個相鄰連接處審查重拍。在片段清單中記錄每個選定 GIF 的鏡頭 ID、路徑、SHA-256 和審查註釋。使用 --takes takes.json 編譯以填充生成的插槽,而無需手動更改其模式。助手檢查那些確切的位元組,測量其實際延遲並保留原始請求。它可以應用部分選擇;缺失的動作會保持明確的未渲染狀態。
每個專案包含一個可攜帶的 storyboard.json。從該檔案繼續使用新的片段清單和新輸出目錄。現有來源和已渲染的標題是哈希固定的,不能由清單替換。對於故意的重拍,創建原始故事板的編輯副本並在新副本中選擇新的片段;保留先前的專案並再次審查兩個相鄰剪輯。保留帶有其審查記錄的專案版本。呼叫者註釋不是自動的視覺接受。請參閱 確切的選擇格式和無金鑰範例。即使在配置了金鑰的情況下,也使用零呼叫渲染。
運動、時間和匯出
標題卡片是僅一次的文本/線條入口,隨後是停留。字母是本地且在故事板中可編輯,而不是委託給生成提示。標題是單獨的鏡頭,而不是疊加層;運行時字幕是一個單獨的 SRT,而不是嵌入到 GIF 中。如果需要,使用 --font 指定一個有授權的本地字體,並檢查其字形。
角色時間來自解碼的來源 GIF。來源重新定時、過渡、插值、音訊生成和自動動作合成不由這個助手提供。固定的運行時使用硬剪輯,並可以通過其電影腳本導入可選的本地音訊。GIF 沒有音訊。如果使用較新的編輯工具,請遵循當前的執行時間幫助;不要暗示固定套件包含它們。
先匯出一個經過驗證的 MP4,然後是較小的 GIF 或章節。GIF 調色板轉換會損壞漸層和精細輪廓;也要審查實際的最終 GIF。高播放 FPS 不會創建新的運動。review.md 提供了視覺和技術接受檢查。
交付實際結果
提供請求的 GIF/MP4 檔案,並附帶實際時長、尺寸、循環行為、來源圖畫節奏與匯出 FPS 的對比、無聲/音訊狀態以及已知的視覺缺陷。根據請求包含可編輯的專案。在分享專案之前審查來源名稱、提示、參考和授權;不要發布私人輸入。區分技術驗證、你的視覺審查和使用者接受。