File size: 8,809 Bytes
57eccf2 c6c35c1 57eccf2 158efc9 57eccf2 158efc9 57eccf2 c6c35c1 57eccf2 c6c35c1 57eccf2 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 c6c35c1 57eccf2 c6c35c1 57eccf2 c6c35c1 57eccf2 158efc9 57eccf2 158efc9 57eccf2 c6c35c1 347bec2 c6c35c1 57eccf2 c6c35c1 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 c6c35c1 158efc9 57eccf2 c6c35c1 158efc9 57eccf2 158efc9 57eccf2 158efc9 57eccf2 347bec2 158efc9 57eccf2 158efc9 57eccf2 158efc9 c6c35c1 158efc9 57eccf2 c6c35c1 158efc9 57eccf2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# Generate_Holiday_Postcard.py
import streamlit as st
from utils.helper_utilities import generate_flux_image, add_custom_message
from utils.configuration import fonts, holiday_scene_prompts, example_holiday_messages
from dotenv import load_dotenv
import os
# Set page configuration
st.set_page_config(page_title="FLUX Image Generation Tool", page_icon="π")
# Streamlit UI Elements
st.title("π FLUX-tastic Holiday Postcard Generator π¨")
st.markdown(
"""Welcome to the FLUX Holiday Postcard Generator!
- π
π¨ It's time to make your holiday greetings pop with a personalized, AI-generated postcard!
- β¨ No more boring, store-bought cards! Instead, flex your creative muscles with the FLUX models, adding your unique touch.
- Customize a dazzling holiday scene with your own message and share your festive vibes! ππ
### How it works:
1. Choose a holiday-themed prompt or write your own π
2. Select a FLUX model to bring your vision to life β¨
3. Customize with a snazzy holiday message and choose from a variety of fonts ποΈ
4. Design your text's background and color to perfectly match the vibe π¨
5. Generate your masterpiece and share the joy with friends and family! π¬
Get ready to deck the halls with creativity! πβ¨
"""
)
st.divider()
st.subheader("Load Fireworks API Key")
# Load API Key
# Define and ensure the .env directory and file exist
dotenv_path = os.path.join(os.path.dirname(__file__), '..', 'env', '.env')
os.makedirs(os.path.dirname(dotenv_path), exist_ok=True)
# Create the .env file if it doesn't exist
if not os.path.exists(dotenv_path):
with open(dotenv_path, "w") as f:
st.success(f"Created {dotenv_path}")
# Load environment variables from the .env file
load_dotenv(dotenv_path, override=True)
# Check if the Fireworks API key is set or blank
fireworks_api_key = os.getenv("FIREWORKS_API_KEY")
# Show the entire app but disable running parts if no API key
if not fireworks_api_key or fireworks_api_key.strip() == "":
fireworks_api_key = st.text_input("Enter Fireworks API Key", type="password")
# Optionally, allow the user to save the API key to the .env file
if fireworks_api_key and st.checkbox("Save API key for future use"):
with open(dotenv_path, "a") as f:
f.write(f"FIREWORKS_API_KEY={fireworks_api_key}\n")
st.success("API key saved to .env file.")
else:
st.success(f"API key loaded successfully: partial preview {fireworks_api_key[:5]}")
# Dropdown to select a holiday-themed prompt or enter a custom prompt
st.divider()
st.subheader("1οΈβ£ Step 1: Pick Your Holiday Theme or Create Your Own πβ¨")
st.markdown("""
Get into the festive spirit by choosing from a range of holiday-inspired prompts. Feeling extra creative? Enter your own prompt and let the holiday magic begin! π
β¨
""")
selected_prompt = st.selectbox("Choose a holiday-themed prompt or enter your own", options=["Custom"] + holiday_scene_prompts)
custom_prompt = st.text_input("Enter your custom prompt") if selected_prompt == "Custom" else ""
prompt = custom_prompt if selected_prompt == "Custom" else selected_prompt
# Dropdown to select the model
st.divider()
st.subheader("2οΈβ£ Step 2: Select Your FLUX Model π")
st.markdown("""
Choose from two FLUX models: whether youβre aiming for lightning speed or extra detail, weβve got you covered! π₯β¨
""")
model_choice = st.selectbox("Select the model:", ["flux-1-schnell-fp8", "flux-1-dev-fp8"])
# Expose parameters like guidance_scale, inference steps, and seed after model selection
st.divider()
st.subheader("2οΈβ£A: Customize Your Model Parameters βοΈ")
st.markdown("""
Now that you've selected your model, fine-tune the parameters to adjust how the FLUX model generates your holiday card.
""")
# Parameter options exposed after model selection
guidance_scale = st.slider("Guidance Scale", min_value=0.0, max_value=20.0, value=7.5, step=0.1)
num_inference_steps = st.slider("Number of Inference Steps", min_value=1, max_value=100, value=50, step=1)
seed = st.slider("Random Seed", min_value=0, max_value=1000, value=42)
# Dropdown to select an example message or write a custom one
st.divider()
st.subheader("3οΈβ£ Step 3: Craft the Perfect Message π")
st.markdown("""
Whatβs a holiday card without a heartfelt (or hilarious) message? Choose from example holiday greetings or write your own to make the card so you! ποΈπ
""")
selected_message = st.selectbox("Choose an example message or write your own:", options=["Custom"] + example_holiday_messages)
message = st.text_input("Enter a holiday message to add:", value=selected_message if selected_message != "Custom" else "")
# Additional inputs for customizing the message
st.divider()
st.subheader("4οΈβ£ Step 4: Style Your Message with Flair β¨")
st.markdown("""
From fancy fonts to colorful backgrounds, youβre in control. Pick your favorite font, adjust the size, and add a splash of color to make your message truly shine. ππ¨
""")
font_choice = st.selectbox("Select a font:", list(fonts.keys()))
font_size = st.slider("Select font size:", 1, 300, 40)
max_chars = st.slider("Max characters per line:", 10, 100, 40) # Slider to select character wrap limit
# Background color and font color pickers
bg_color = st.color_picker("Pick a background color for the text box:", "#FFFFFF")
font_color = st.color_picker("Pick a font color:", "#000000")
# Transparency level slider
alpha = st.slider("Select transparency level for the background (0: fully transparent, 255: fully opaque)", 0, 255, 220)
# Position options for the message (vertical and horizontal)
position_vertical = st.radio("Select message vertical position:", ["Top", "Center", "Bottom"])
position_horizontal = st.radio("Select message horizontal position:", ["Left", "Center", "Right"])
st.divider()
st.subheader("5οΈβ£ Step 5: Preview and Share the Holiday Cheer! π
π¬")
st.markdown("""
Click "Generate Image" and watch the magic happen! Your holiday card is just moments away from spreading joy to everyone on your list. ππβ¨
""")
# Button to generate images
if not fireworks_api_key or fireworks_api_key.strip() == "":
st.warning("Enter a valid Fireworks API key to enable image generation.")
generate_button = st.button("Generate Image", disabled=True)
else:
generate_button = st.button("Generate Image")
if generate_button:
st.markdown("""
π You're one click away from holiday magic! π Hit that Generate Image button and let FLUX create your personalized postcardβready for sharing! π¬
""")
if not prompt.strip():
st.error("Please provide a prompt.")
else:
try:
with st.spinner("Generating image..."):
# Determine steps based on model
steps = 30 if model_choice == "flux-1-dev-fp8" else 4
# Generate image using the helper utility
generated_image = generate_flux_image(
model_path=model_choice, # Correctly pass the model choice
api_key=fireworks_api_key, # Fireworks API key
prompt=prompt, # User's prompt for generation
steps=steps, # Number of inference steps
guidance_scale=guidance_scale, # Guidance scale (optional if unchanged)
seed=seed # Random seed (optional if unchanged)
)
# Get the selected font path from configuration
font_path = fonts[font_choice]
# Add the holiday message to the generated image using the helper utility
image_with_message = add_custom_message(
generated_image.copy(), message, font_path, font_size,
position_vertical, position_horizontal, max_chars, bg_color, font_color, alpha
)
# Display the image with the message
st.image(image_with_message, caption=f"Generated using {model_choice} with custom message", use_column_width=True)
# Preview the placement details
st.write(f"Message preview (vertical position: {position_vertical}, horizontal position: {position_horizontal}, font: {font_choice}, size: {font_size}, max chars: {max_chars}, bg color: {bg_color}, font color: {font_color}, transparency: {alpha})")
except Exception as e:
st.error(f"An error occurred: {e}")
# Footer Section
st.divider()
st.markdown(
"""
Thank you for using the Holiday Card Generator powered by **Fireworks**! π
Share your creations with the world and spread the holiday cheer!
Happy Holidays from the **Fireworks Team**. π₯
"""
) |