使用OpenAI+Gemini構建你自己的漫畫生成器

使用OpenAI+Gemini構建你自己的漫畫生成器

文章目录

  • Comic War的概念
  • 漫畫戰爭的運作方式
  • 1. 使用者輸入
  • 2. 故事講述者的工作(Gemini)
  • 3. 插畫師的工作(OpenAI / Imagen)
  • 4. 輸出:最終漫畫
  • Comic War背後的技術
  • 實現過程
  • 1. 配置
  • 2. 編寫劇本
  • 2. 構建劇本
  • 4. 儲存漫畫
  • 5. 編排
  • 演示示例
  • 構建“漫畫戰爭”的挑戰
  • 超越漫畫戰爭
  • 小結
  • 常見問題

使用OpenAI+Gemini構建你自己的漫畫生成器

我們都曾欣賞過漫畫,無論是超級英雄漫畫、報紙漫畫還是日本漫畫。漫畫簡短、富有表現力,只需幾幀就能講述一個完整的故事。但如果有一個新的轉折:如果你可以使用漫畫生成器將一段短影片剪輯轉換成由四格組成的連環漫畫,其中包含對話泡泡、富有表現力的漫畫人物和幽默元素,那會怎樣?

這就是 Comic Generator 或 Comic War 背後的理念,而不僅僅是另一個內容生成器。我設計的系統可以將一段影片剪輯和一個簡短的創意想法轉化為完整的連環漫畫影像。最好將其視為兩個人之間富有想象力的合作:一個負責“編寫劇本”,另一個負責“繪製漫畫”。

在本文中,我將帶您瞭解 Comic War 的旅程,解釋它的工作原理、所需的元件、使用哪種程式語言進行編碼、我在此過程中遇到的挑戰以及專案未來的發展方向。

Comic War的概念

所有創意應用都基於一個標準公式:

  • 輸入:使用者提供的內容。
  • 轉化:系統如何運作並進一步完善。
  • 輸出:體驗的精髓,使其感覺完整而精緻。

對於 Comic War 來說,其公式如下:

  • 輸入:
    • 一段短影片(例如 YouTube 短片)。
    • 一句創意(“用考試代替影片中的打鬥”)。
  • 轉化:
    • 系統地分析影片,將創意改寫成完整的漫畫劇本,並嚴格執行規則(佈局、風格、幽默)。
  • 輸出:
    • 一段 PNG 格式的四格漫畫,帶有對話方塊和字幕。

它的樂趣何在?因為它是個性化的。你收到的不是隨機的漫畫,而是根據你一句創意定製的、對你剛剛選擇的片段進行重新詮釋的版本。

想象一下電影中的打鬥場景,將學生之間的爭吵演變成一場關於家庭作業的滑稽課堂大戰。這種相關的視覺效果的混合——熟悉的使用者名稱加上令人驚訝的、個性化的漫畫改寫轉折——是讓《漫畫戰爭》令人上癮的原因。

漫畫戰爭的運作方式

流程分解如下:

1. 使用者輸入

流程始於兩個簡單的輸入:

  • 影片網址:您的素材(理想情況下,YouTube 短片時長約為 30-40 秒)。
  • 創意文字:您的構思或主題。

示例:

影片地址:https://www.youtube.com/shorts/xQPAegqvFVs

創意:用考試代替暴力,就像 Yash 所說的那樣

“暴力,暴力,我不喜歡暴力,我避免……但暴力喜歡我。”

使用者只需提供這些,無需複雜的設定,也無需滑動條。

2. 故事講述者的工作(Gemini)

流程的第一部分就是我所說的“故事講述者”。在這裡,您輸入的 YouTube 影片連結和簡短創意等原始輸入會被轉化為結構化且可用的內容。

當你貼上影片連結時,Gemini 會檢視片段並提取細節:

  • 場景中發生了什麼?
  • 氛圍(緊張、戲劇化、輕鬆)。
  • 角色如何移動和互動。

然後,它會將你的俏皮話(例如“用考試代替暴力”)擴充套件成一個漫畫指令碼。

現在,這個指令碼不再只是隨機的文字。它是一個包含四個分格的劇本,遵循一套嚴格的規則。這些規則被明確寫入了引導 Gemini 的系統提示中。它們包括:

  • 始終採用 2×2 網格(因此每個漫畫看起來都一致)。
  • 嚴格的漫畫風格(不刻意渲染人物)。
  • 對話以類似表情包的對話方塊形式呈現。
  • 新增字幕以補充笑點或背景。
  • 沒有裁剪,沒有截斷文字,也沒有對版權名稱進行有風險的引用。

透過將這些約束融入系統提示中,我確保 Storyteller 始終能夠生成乾淨可靠的劇本。因此,Gemini 不會要求影像生成器“只製作漫畫”,而是會準備一個結構完整的計劃,以便下一步無需猜測即可執行。

3. 插畫師的工作(OpenAI / Imagen)

劇本完成後,它會被傳遞給插畫師。

這部分工作無需解釋任何內容;它的唯一職責就是準確繪製 Storyteller 的描述。

插畫師的功能由影像生成模型實現。在我的設定中,我首選 OpenAI 的 GPT-Image-1,如果第一個工具失敗,則使用 Google 的 Imagen 作為備用方案。

實際操作如下:

  • 插畫師接收劇本,並將其作為一條長而詳細的提示。
  • 然後,它會將每個面板的人物、姿勢、背景和對話方塊完全按照佈局進行渲染。
  • 如果 OpenAI 不可用,相同的指令會自動傳送給 Imagen,因此您始終可以獲得完整的漫畫。

這種分離是 Comic War 可靠性的關鍵。

  • Gemini 的思維方式像導演一樣:它編寫劇本並搭建舞臺。
  • GPT-Image-1 或 Imagen,它們像藝術家一樣繪畫,遵循指示,而不會嘗試進行任何更改。

因此,輸出不會顯得雜亂無章。每幅漫畫都以標準的四格連環畫形式呈現,風格類似表情包,幾乎完全符合您的想法。

4. 輸出:最終漫畫

最終呈現的是一幅四格連環畫影像:

  • 各格邊框清晰。
  • 人物姿勢正確。
  • 對話氣泡,文字恰當。
  • 幽默感十足。

最重要的是,它看起來就像一部可以線上釋出的成品漫畫。

Comic War背後的技術

系統的核心技術如下:

  • 語言和工具
    • Python 是粘合語言。
    • dotenv 用於 API 金鑰管理。
    • Pillow 用於影像處理。
    • base64 用於處理影像資料。
  • Storyteller(分析 + 提示)
    • Gemini(多模態模型):讀取影片 + 擴充套件使用者輸入。
  • Illustrator(影像生成)
    • OpenAI GPT-Image-1(DALL·E 變體)。
    • 備用方案:Google Imagen(增強彈性)。

這種雙重方法既確保了創造力(來自 Storyteller),也確保了視覺一致性(來自 Illustrator)。

實現過程

現在,讓我們來看看實際的實現。

1. 配置

@dataclass
class ComicGenerationConfig:
    primary_service: str = "openai"
    fallback_service: str = "imagen"
    output_filename: str = "images/generated_comic.png"
    openai_model: str = "gpt-image-1"
    imagen_model: str = "imagen-4.0-generate-preview-06-06"
    gemini_model: str = "gemini-2.0-flash"

模型的使用方式如下:

  • OpenAI 是預設的插畫師。
  • Imagen 是備用的。
  • Gemini 是故事講述者。

2. 編寫劇本

def extract_comic_prompt_and_enhance(video_url, user_input):
    response = gemini_client.models.generate_content(
        model="gemini-2.0-flash",
        contents=[
            Part(text=enhancement_prompt),
            Part(file_data={"file_uri": video_url, "mime_type": "video/mp4"})
        ]
    )
    return response.text

這一步將模糊的輸入重寫為詳細的漫畫提示。

2. 構建劇本

OpenAI (主要):

result = openai_client.images.generate(
    model="gpt-image-1",
    prompt=enhanced_prompt,
)
image_bytes = base64.b64decode(result.data[0].b64_json)

Imagen (備用):

response = gemini_client.models.generate_images(
    model="imagen-4.0-generate-preview-06-06",
    prompt=enhanced_prompt,
)
image_data = response.generated_images[0].image

後備方案確保可靠性;如果一位插畫師出現故障,另一位插畫師將接管工作。

4. 儲存漫畫

def save_image(image_data, filename="generated_comic.png"):
    img = PILImage.open(BytesIO(image_data))
    img.save(filename)
    return filename

此方法將漫畫以 PNG 格式寫入磁碟。

5. 編排

def generate_comic(video_url, user_input):
    enhanced_prompt = extract_comic_prompt_and_enhance(video_url, user_input)
    image_data = generate_image_with_fallback(enhanced_prompt)
    return save_image(image_data)

所有步驟都在這裡聯絡在一起:

  • 提取劇本,生成漫畫,儲存輸出。

演示示例

讓我們來看看實際操作。

輸入:

  • 影片:動作短片。

影片連結輸入

  • 想法:“用考試代替暴力。”

提示詞

生成的劇本:

  • 畫面 1:男主角癱坐在桌子上:“考試,考試,考試……”
  • 畫面 2:砰的一聲合上書本:“我不喜歡考試!”
  • 畫面 3:悄悄溜走:“我逃避考試……”
  • 畫面 4:一個名為“期末考試”的巨型書本怪物:“……但考試喜歡我!”

輸出:

生成四格漫畫

清晰的四格漫畫

構建“漫畫戰爭”的挑戰

任何專案都難免會遇到障礙。以下是我遇到的一些挑戰:

  • 模糊的輸入:使用者傾向於給出簡短的想法。如果不進行改進,由於資訊有限,輸出會顯得平淡或模糊。解決方案:嚴格擴充套件劇本。
  • 圖片生成失敗:有時圖片生成會卡住。解決方案:自動回退到備份服務。
  • 裁剪問題:對話方塊被截斷。解決方案:在提示中明確構圖規則。
  • 版權風險:部分片段引用了著名電影。解決方案:自動移除劇本中的電影名稱/品牌。

超越漫畫戰爭

漫畫戰爭只是其中一個用例。同樣的引擎還可以支援:

  • 表情包生成器:從熱門片段自動生成熱門表情包。
  • 教育漫畫:將枯燥的講座變成四格講解。
  • 營銷工具:為活動生成品牌故事板。
  • 互動式敘事:讓使用者逐格引導故事。

簡而言之,任何結合幽默、視覺效果和個性化的內容都可以從這種方法中受益。

小結

Comic War 的開發過程就像一堂關於協調的課程,我們將工作分工分配給了故事講述者和插畫師。

我們並沒有寄希望於一個模型“解決所有問題”,而是賦予了每個部分明確的職責:

  • 一個模型負責擴充套件和構建創意
  • 一個模型負責忠實地繪製

最終呈現的作品精緻、個性化且充滿樂趣。

這就是重點:只需一段短影片和一個天馬行空的想法,任何人都可以創作出一部看起來足以登上網際網路頭版的漫畫。

常見問題

問題 1:我需要什麼來創作漫畫?

答:一個 YouTube 短連結(約 30-40 秒)和一個單行創意。系統會使用 Gemini 分析影片片段,將你的想法擴充套件成一個四格劇本,然後由影像模型進行繪製。

問題 2:使用了哪些模型?

答:Gemini 負責草擬四格劇本。GPT-Image-1 負責繪製。如果 OpenAI 失敗,系統會自動使用 Imagen。這種分離機制可以確保結果的一致性。

問 3:如何避免版權問題?

答:劇本會刪除品牌和角色名稱,避免使用雷同內容,並保持風格化的漫畫風格。您提供的影片是您有權使用的。

評論留言