import streamlit as st import requests import cloudinary import cloudinary.uploader from PIL import Image import io from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build import os # Configure Cloudinary with your credentials cloudinary.config( cloud_name="dvuowbmrz", api_key="177664162661619", api_secret="qVMYel17N_C5QUUUuBIuatB5tq0" ) # Set up OAuth2 client details CLIENT_SECRET_FILE = 'client_secret.json' SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] # Adjust scopes as needed # Set up Streamlit app #st.title("Google Authentication Demo") # Check if the user is authenticated if 'credentials' not in st.session_state: #st.write("WELCOME") flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES) credentials = flow.run_local_server(port=8501, authorization_prompt_message='') # Save credentials to a file for future use (optional) with open('token.json', 'w') as token_file: token_file.write(credentials.to_json()) st.session_state.credentials = credentials st.success("Authentication successful. You can now use the app.") # Use authenticated credentials to interact with Google API credentials = st.session_state.credentials service = build('drive', 'v3', credentials=credentials) # Fetch user's name from Google API try: user_info = service.about().get(fields="user").execute() user_name = user_info["user"]["displayName"] #st.header("Google Profile Information") st.markdown(f"
Userame: {user_name.upper()}
", unsafe_allow_html=True) except Exception as e: st.error(f"Error fetching user profile: {str(e)}") # Your app's functionality goes here # # Display Google Drive contents # st.header("Google Drive Contents") # results = service.files().list(pageSize=10).execute() # files = results.get('files', []) # if not files: # st.write('No files found in Google Drive.') # else: # st.write('Files in Google Drive:') # for file in files: # st.write(f"- {file['name']} ({file['mimeType']})") # Logout button if st.button("Logout"): del st.session_state.credentials os.remove("token_dir/token.json") # Remove the token file # Set up Hugging Face API endpoint API_URL = "https://api-inference.huggingface.co/models/CompVis/stable-diffusion-v1-4" headers = {"Authorization": "Bearer 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"} def query_model_with_image(image_description): payload = { "inputs": image_description } response = requests.post(API_URL, headers=headers, json=payload) image_bytes = response.content image = Image.open(io.BytesIO(image_bytes)) return image def upload_to_cloudinary(image, prompt_text): image_data = io.BytesIO() image.save(image_data, format="JPEG") image_data.seek(0) upload_result = cloudinary.uploader.upload( image_data, folder="compvis_app", public_id=prompt_text ) return upload_result["secure_url"] def fetch_latest_images_from_cloudinary(num_images=9): # Use the Cloudinary Admin API to list resources url = f"https://api.cloudinary.com/v1_1/{cloudinary.config().cloud_name}/resources/image" params = { "max_results": num_images, "type": "upload" } response = requests.get(url, params=params, auth=(cloudinary.config().api_key, cloudinary.config().api_secret)) if response.status_code == 200: images = response.json()["resources"] else: images = [] return images # Streamlit app st.markdown("""""", unsafe_allow_html=True) st.title("Text to Image Generator") image_description = st.text_input("Enter the image description") if st.button("Generate Image"): processed_image = query_model_with_image(image_description) st.image(processed_image, use_column_width=True, output_format="JPEG") # Use use_column_width=True st.session_state.processed_image = processed_image st.session_state.image_description = image_description st.write("Image generated.") if st.button("Upload"): if 'processed_image' in st.session_state: uploaded_url = upload_to_cloudinary(st.session_state.processed_image, st.session_state.image_description) st.write("Image uploaded to Cloudinary. Prompt Text:", st.session_state.image_description) st.write("Image URL on Cloudinary:", uploaded_url) else: st.write("Generate an image first before uploading.") # Fetch and display the latest images from Cloudinary st.header("Latest Images created") # Use the 'fetch_latest_images_from_cloudinary' function to get the latest images latest_images = fetch_latest_images_from_cloudinary() # Define the number of columns in the grid num_columns = 3 # You can adjust this number as needed # Calculate the width for each column column_width = f"calc(33.33% - {10}px)" # Adjust the width and margin as needed # Add CSS styling for the grid and rounded images st.markdown( f""" """, unsafe_allow_html=True, ) # Create the responsive grid layout st.markdown('