add a page for AI image Editor

This commit is contained in:
Carl Zhang
2025-09-30 15:30:31 -05:00
parent 0dc8eeb9fd
commit edd3dca1be
30 changed files with 156 additions and 33 deletions

View File

@@ -8,11 +8,14 @@ from .reference import reference
from .pythonx_lessons_pages.pythonx_homepage import pythonx_homepage
from .pythonx_lessons_pages.pythonx_introduction import pythonx_introduction
from .buff_bot import buffbot
from .bufftools_pages.letter_generator import letter_generator
from .bufftools_pages.ai_image_editor import ai_image_editor
from .pythonx_lessons_pages.pythonx_finance import pythonx_finance
from .pythonx_lessons_pages.pythonx_geomap import pythonx_geomap
from .pythonx_lessons_pages.pythonx_wordcloud import pythonx_wordcloud
from .outstanding_members import outstanding_members
from .cis_tech_challenge_pages.cis_tech_challenge_homepage import cis_tech_challenge_homepage
from .coreteks_pages.coreteks_homepage import coreteks_homepage
from .SendEmail import send_email
from .SendEmail import send_email

View File

@@ -23,7 +23,7 @@ def buffbot():
st.code(f.read(), language="python")
st.divider()
# Select AI model for chatbot
model_options = ["gemini-2.0-flash", "grok-3", "deepseek-r1:1.5b", "llama3.2:1b", "deepseek-chat", ]
model_options = ["gemini-2.0-flash", "deepseek-r1:1.5b", "llama3.2:1b", "deepseek-chat", ]
# on_change callback to clear chat history when model is changed
selected_model = st.selectbox("**👉Please select a model to start**", model_options, on_change=clear_chat)

View File

@@ -0,0 +1,60 @@
import streamlit as st
from PIL import Image
from google import genai
import json
from io import BytesIO
def edit_image_with_ai(image, description):
with open('app_config.json') as config_file:
config = json.load(config_file)
api_key = config["nano-banana"]["api_key"]
client = genai.Client(api_key=api_key)
prompt = description
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=[prompt, image],
)
text_response = None
image_response = None
for part in response.candidates[0].content.parts:
if part.text is not None:
text_response = part.text
if part.inline_data is not None:
image_response = Image.open(BytesIO(part.inline_data.data))
return text_response, image_response
def ai_image_editor():
st.markdown("<h1 style='text-align: center; color: #451002;'>AI Image Editor🖼</h1>", unsafe_allow_html=True)
st.markdown("<h5 style='text-align: center;'> Edit and enhance your images with the power of AI! 🎨 </h3>", unsafe_allow_html=True)
st.info("Powered by the online [Gemini Image Generation](https://ai.google.dev/gemini-api/docs/image-generation) API!")
# user upload an image and provide a description of the edit they want
uploaded_image = st.file_uploader("Upload an image to edit", type=["png", "jpg", "jpeg"])
if uploaded_image is not None:
with st.spinner("Loading image..."):
# display the uploaded image
image = Image.open(uploaded_image)
st.image(image, width= 300)
st.success("Image uploaded successfully!")
edit_description = st.text_area("Describe the edits you want to make to the image")
if st.button("AI Editing"):
if edit_description.strip() == "":
st.error("Please provide a description of the edits you want to make.")
else:
with st.spinner("Editing image..."):
# Call the AI image editing function (to be implemented)
text_response, image_response = edit_image_with_ai(image, edit_description)
if text_response:
st.info(text_response)
if image_response:
st.image(image_response, width=300)

View File

@@ -16,6 +16,7 @@ def navigation_bar():
sac.MenuItem('BuffBot', icon='robot'),
sac.MenuItem('BuffTools', icon='boxes', children=[
sac.MenuItem('Letter Generator', icon='bi bi-file-word'),
sac.MenuItem('AI Image Editor', icon='bi bi-image'),
]),
sac.MenuItem('Outstanding Members', icon='award'),
sac.MenuItem("Join Us", icon='person-add'),

View File

@@ -1,13 +0,0 @@
folium==0.19.5
geopy==2.4.1
matplotlib==3.10.1
openai==1.75.0
pandas==2.2.3
plotly==6.0.1
python_docx==1.1.2
streamlit==1.44.1
streamlit_ace==0.1.1
streamlit_antd_components==0.3.2
streamlit_folium==0.25.0
wordcloud==1.9.4
yfinance>=0.2.59