feat: Add MythGen

Former-commit-id: bfc93b1988
blog-agent
Zack 2 years ago
parent ccfa61fdf1
commit 3bc51e4046

@ -0,0 +1,2 @@
OPENAI_API_KEY="YOUR_API_KEY"
DALLE_COOKIE="YOUR_COOKIE"

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 pliny
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,71 @@
MythGen: A Dynamic New Art Form
Overview
![panel_2](https://github.com/elder-plinius/MythGen/assets/133052465/86bb5784-845b-4db8-a38f-217169ea5201)
MythGen is an Iterative Multimedia Generator that allows users to create their own comic stories based on textual prompts. The system integrates state-of-the-art language and image models to provide a seamless and creative experience.
Features
Initial Prompting: Kick-start your story with an initial text prompt.
Artistic Style Suffix: Maintain a consistent artistic style throughout your comic.
Image Generation: Generate captivating comic panels based on textual captions.
Caption Generation: Produce engaging captions for each comic panel.
Interactive Story Building: Select your favorite panels and captions to build your story iteratively.
Storyboard: View the sequence of your selected panels and their associated captions.
State Management: Keep track of the current state of your comic generation process.
User-Friendly Interface: Easy-to-use interface built on Gradio.
Prerequisites
OpenAI API Key
You will need an OpenAI API key to access GPT-3 for generating captions. Follow these steps to obtain one:
Visit OpenAI's Developer Dashboard.
Sign up for an API key and follow the verification process.
Once verified, you will be provided with an API key.
Bing Image Creator Cookie
You should obtain your cookie to run this program. Follow these steps to obtain your cookie:
Go to Bing Image Creator in your browser and log in to your account.
Press Ctrl+Shift+J to open developer tools.
Navigate to the Application section.
Click on the Cookies section.
Find the variable _U and copy its value.
How to Use
Initial Prompt: Start by inputting your initial comic concept.
Select a Panel: Choose your favorite panel and caption from the generated options.
Iterate: Use the "Next Part" button to generate the next part of your comic based on your latest selection.
View Storyboard: See your selected comic panels and captions in a storyboard for a comprehensive view of your comic.
Finalize: Continue this process until you've created your full comic story.
Installation
bash
pip install -r requirements.txt
Running MythGen
bash
python main.py
This will launch the Gradio interface where you can interact with MythGen.
Dependencies
Python 3.x
Gradio
OpenAI's GPT-3
DALL-E
Contributing
We welcome contributions! Please read the CONTRIBUTING.md for guidelines on how to contribute to this project.
License
This project is licensed under the MIT License. See LICENSE.md for details.

@ -0,0 +1,6 @@
[
{
"name": "cookie1",
"value": "1lEXeWRSIPUsQ0S3tdAc3v7BexGK2qBlzsXz8j52w_HNBoOsegjiwRySQHmfoWduHVUxSXo6cETPP2qNrYWAz6k7wn43WGO9i7ll9_Wl7M6HA2c9twbKByfAtAB5fr26wPawQ6y1GCdakD_Kr4xdD20fvkytnmOmZu7Ktnb9mUVE605AAbJcIA9SOlRN5410ZPOnZA1cIzr4WtAFWNfQKPG6Sxk_zO5zvXQfYTyMNmOI"
}
]

@ -0,0 +1,85 @@
import openai
import os
import dotenv
import logging
import gradio as gr
from dalle3 import Dalle
from bing_chat import BingChat
# from swarms.models.bingchat import BingChat
dotenv.load_dotenv(".env")
# Initialize the EdgeGPTModel
openai_api_key = os.getenv("OPENAI_API_KEY")
model = BingChat(cookie_path = "./cookies.json")
cookie = os.environ.get("BING_COOKIE")
auth = os.environ.get("AUTH_COOKIE")
response = model("Generate")
# Initialize DALLE3 API
cookie = os.getenv("DALLE_COOKIE")
dalle = Dalle(cookie)
logging.basicConfig(level=logging.INFO)
accumulated_story = ""
latest_caption = ""
standard_suffix = ""
storyboard = []
def generate_images_with_dalle(caption):
model.create_img(auth_cookie=cookie,auth_cookie_SRCHHPGUSR=auth,prompt=caption)
urls = dalle.get_urls()
return urls
def generate_single_caption(text):
prompt = f"A comic about {text}."
response = model(prompt)
return response
def interpret_text_with_gpt(text, suffix):
return generate_single_caption(f"{text} {suffix}")
def create_standard_suffix(original_prompt):
return f"In the style of {original_prompt}"
def gradio_interface(text=None, next_button_clicked=False):
global accumulated_story, latest_caption, standard_suffix, storyboard
if not standard_suffix:
standard_suffix = create_standard_suffix(text)
if next_button_clicked:
new_caption = interpret_text_with_gpt(latest_caption, standard_suffix)
new_urls = generate_images_with_dalle(new_caption)
latest_caption = new_caption
storyboard.append((new_urls, new_caption))
elif text:
caption = interpret_text_with_gpt(text, standard_suffix)
comic_panel_urls = generate_images_with_dalle(caption)
latest_caption = caption
storyboard.append((comic_panel_urls, caption))
storyboard_html = ""
for urls, cap in storyboard:
for url in urls:
storyboard_html += f'<img src="{url}" alt="{cap}" width="300"/><br>{cap}<br>'
return storyboard_html
if __name__ == "__main__":
iface = gr.Interface(
fn=gradio_interface,
inputs=[
gr.inputs.Textbox(default="Type your story concept here", optional=True, label="Story Concept"),
gr.inputs.Checkbox(label="Generate Next Part")
],
outputs=[gr.outputs.HTML()],
live=False # Submit button will appear
)
iface.launch()

@ -0,0 +1,62 @@
from flask import Flask, request, jsonify
import openai
import logging
from dalle3 import Dalle
import os
import gradio as gr
import requests
from PIL import Image
from io import BytesIO
import dotenv
app = Flask(__name__)
dotenv.load_dotenv(".env")
# Initialize OpenAI API, INPUT YOUR OWN OPENAI KEY
openai.api_key = os.getenv("OPENAI_API_KEY")
# Initialize DALLE3 API, INPUT YOUR OWN COOKIE
cookie = os.getenv("DALLE_COOKIE")
dalle = Dalle(cookie)
def interpret_text_with_gpt(text):
model_engine = "text-davinci-002"
panel_instructions = "Create a comic panel where"
refined_prompt = f"{panel_instructions} {text}"
response = openai.Completion.create(
engine=model_engine,
prompt=refined_prompt,
max_tokens=100
)
final_prompt = response.choices[0].text.strip()
return final_prompt
def generate_images_with_dalle(refined_prompt):
dalle.create(refined_prompt)
urls = dalle.get_urls()
return urls
def gradio_interface(text):
refined_prompt = interpret_text_with_gpt(text)
comic_panel_urls = generate_images_with_dalle(refined_prompt)
output = []
for i, url in enumerate(comic_panel_urls):
response = requests.get(url)
img = Image.open(BytesIO(response.content))
caption = f"Caption for panel {i+1}"
output.append((img, caption))
return output
iface = gr.Interface(
fn=gradio_interface,
inputs=["text"],
outputs=[gr.outputs.Image(type="pil", label="Comic Panels"), "text"]
)
iface.launch()

@ -0,0 +1,8 @@
dalle3==0.0.7
Flask==2.3.2
gradio==3.48.0
openai==0.28.1
Pillow==10.1.0
python-dotenv==1.0.0
Requests==2.31.0
swarms==1.8.2
Loading…
Cancel
Save