---
# System prepended metadata

title: 四格漫畫產生器

---

四格漫畫產生器
==

:::spoiler 程式碼


```python=
import gradio as gr
import json
import base64
from openai import OpenAI


def make_story(character1, character2):
  global API
  promptC=f'''
  以下列角色為主角，生成四格漫畫的故事

  輸出格式:python list
  ###
  蔡英文、賈伯斯
  ###
  ["背景是一個現代辦公室，蔡英文坐在辦公桌前執行公務。賈伯斯意外闖入，一眼就被她的領導風采吸引。","蔡英文和賈伯斯在一場科技論壇上相遇，開始交流彼此的理念。他們的眼神中閃爍著對創新和改變的熱情。","在一家咖啡廳，蔡英文和賈伯斯共同討論著未來的願景，手握著咖啡杯的瞬間，他們的手不經意地碰撞，心靈也漸漸產生共鳴。","最後，他們一同走在晚霞下的海灘，蔡英文和賈伯斯手牽著手，展望著未來，這段跨越國界的愛情故事就此展開。"]


  ###
  孫悟空、米老鼠
  ###
  ["在一個神奇的世界，孫悟空和米老鼠偶然相遇。他們一起在森林中遊玩，彼此快樂地分享著自己的故事。","孫悟空身手矯捷，米老鼠智慧過人，兩人配合默契，攻擊猛烈，抵禦著森林裡的妖魔鬼怪。","在一場決鬥中，孫悟空和米老鼠互相扶持，最終戰勝了強大的敵人。他們鼓掌慶祝胜利，也把對彼此的信任和友誼重申。","最後，孫悟空和米老鼠一起乘著神風雲舟，飛向未知的冒險，這段跨越種族和邊界的友情之旅就此開始。"]

  ###
  {character1}、{character2}
  ###

  '''

  client = OpenAI(api_key=API)
  res = client.completions.create(
      model="gpt-3.5-turbo-instruct",
      prompt=promptC,
      max_tokens=500
  )
  story_C = json.loads(res.choices[0].text)
  result = []
  for i in range(len(story_C)):
    result.append(f"story{i}.png")
    result.append(story_C[i])
    draw_story(story_C[i], i)

  return result


def draw_story(sentence,i):
  global API
  promptE=f"""
  將以下文字翻譯成英文

  ###
  在一次戰鬥中，孫悟空身受重傷，米老鼠用他的智慧發揮出了非凡的能力，最終成功打敗了敵人。
  ###
  In a battle, Sun Wukong was seriously injured. Mickey Mouse used his wisdom to display extraordinary abilities and finally succeeded in defeating the enemy.

  ###
  {sentence}
  ###

  """
  client = OpenAI(api_key=API)
  res = client.completions.create(
      model="gpt-3.5-turbo-instruct",
      prompt=promptE,
      max_tokens=500
  )
  sentence_E = res.choices[0].text

  response = client.images.generate(
  model="dall-e-2",
  prompt=sentence_E,
  size="256x256",
  quality="standard",
  response_format="b64_json",
  n=1,
  )
  imagestr = response.data[0].b64_json
  with open(f"story{i}.png","wb+") as fh:
    fh.write(base64.urlsafe_b64decode(imagestr))



demo = gr.Interface(
    fn = make_story,
    inputs=[gr.Textbox(label="角色1"),gr.Textbox(label="角色2")],
    outputs=[gr.Image(type="filepath",height=256,width=256,label="1"),gr.Textbox(label="1")
        ,gr.Image(type="filepath",height=256,width=256,label="2"),gr.Textbox(label="2")
        ,gr.Image(type="filepath",height=256,width=256,label="3"),gr.Textbox(label="3")
        ,gr.Image(type="filepath",height=256,width=256,label="4"),gr.Textbox(label="4")],
    title="四格漫畫生成器",
    description="輸入兩個角色，生成一段故事",
    allow_flagging="never",

)
demo.launch(inline=True, share=True)
```

:::

介面:
![image](https://hackmd.io/_uploads/H1TSMX7aT.png)



輸入:
![image](https://hackmd.io/_uploads/Syb9Gm7ap.png)



輸出:
![image](https://hackmd.io/_uploads/rJu7dM7Tp.png)
![image](https://hackmd.io/_uploads/r1tVdzX66.png)
![image](https://hackmd.io/_uploads/S1zb_fmTp.png)
![image](https://hackmd.io/_uploads/ry1DOfXaT.png)



{%hackmd AkrfIbY9QdC81IwIukVVPQ %}