ishworrsubedii's picture
add: prodctpage batch cto, mto, nto, video and static file
21ba534
import logging
import os
import random
from datetime import datetime
from typing import List
from src.components.image_generation import batch_image_generation
from src.components.supabase_information_fetch import fetch_necklace_offset_each_store, fetch_model_body_type, \
upload_information_to_new_table, upload_productpage_logs
from src.components.video_generation import generate_combined_video
os.makedirs('logs', exist_ok=True)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('logs/running.log'),
logging.StreamHandler()
]
)
def update_processed_necklaces(necklace_id: str, status: bool, model_name: str):
response = upload_productpage_logs(necklace_id, status, model_name=model_name)
def get_random_clothing_combinations(clothing_list: List[str], colors: List[str], count: int = 5) -> List[str]:
"""Generate random clothing combinations."""
combinations = []
for _ in range(count):
clothing = random.choice(clothing_list)
color = random.choice(colors)
combinations.append(f"{color} {clothing}")
return combinations
def combined_image_and_video_generation(storename, image_url):
logging.info("Starting combined image and video generation process")
try:
necklace_data = fetch_necklace_offset_each_store(storename=storename)
url, typee = fetch_model_body_type(image_url=image_url)
model_name = url.split("/")[-1].split(".")[0]
for necklace in necklace_data:
necklace_id = necklace.necklace_id
response = upload_productpage_logs(necklace_id, True, model_name=model_name)
if response['status'] == "error":
print("Skipping", necklace_id)
logging.info(f"Skipping {necklace_id} - already processed")
continue
start_time = datetime.now()
logging.info(f"Processing necklace: {necklace_id}")
try:
if typee == "lean":
x_offset = necklace.x_lean_offset
y_offset = necklace.y_lean_offset
logging.info("Body Type: lean")
elif typee == "medium":
x_offset = necklace.x_broad_offset
y_offset = necklace.y_broad_offset
logging.info("Body Type: medium")
else:
logging.info("Body Type: None")
x_offset = None
y_offset = None
clothing_combinations = get_random_clothing_combinations(
clothing_list=["Salwar Kameez", "South Indian Saree", "Kurti", "Lehenga", "Silk Saree"],
colors=["Red", "Blue", "Green", "Yellow", "Pink"]
)
makeup_data = {
"lipstick": "Carmine Red",
"eyeliner": "Black",
"eyeshadow": "Maroon"
}
image_params = {
"model_image": url,
"necklace_id": necklace_id,
"necklace_category": necklace.category,
"storename": storename,
"clothing_list": clothing_combinations,
"makeup_colors": makeup_data,
"x_offset": x_offset,
"y_offset": y_offset
}
print("image: params", image_params)
logging.info("NTO-CTO-MTO images Generating for {}".format(necklace_id))
image_results = batch_image_generation(**image_params)
logging.info(f"Image generation result: {image_results}")
if image_results.status != 'success':
raise Exception(f"Image generation failed: {image_results.message}")
cto_urls = [result['url'] for result in image_results.cto_results[:4]] # First four CTO images
mto_urls = [image_results.mto_results[-1]['url']]
video_params = {
"intro_video_path": f"{storename}_intro.mp4",
"font_path": "PlayfairDisplay-VariableFont.ttf",
"background_audio_path": "LoveIndianCinematicBGM.mp3",
"necklace_title": [necklace_id],
"necklace_images": [necklace.necklace_url],
"nto_image_title": [[necklace_id]],
"nto_cto_image_title": [[necklace_id, necklace_id, necklace_id, necklace_id]],
"makeup_image_title": [[necklace_id]],
"necklace_try_on_output_images": [[result['url'] for result in image_results.nto_results]],
"clothing_output_images": [cto_urls
],
"makeup_output_images": [
mto_urls
],
"background_colors": [[245, 245, 245], [220, 245, 245]],
"outro_title": "Reach out to us for more information",
"address": "None",
"phone_numbers": "None",
"logo_url": "https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/MagicMirror/FullImages/default.png",
"outro_video_path": f"{storename}_outro.mp4"
}
logging.info("Video Generating for {}".format(necklace_id))
video_result = generate_combined_video(**video_params)
logging.info(f"Video generation result: {video_result}")
if video_result.status != 'success':
raise Exception(f"Video generation failed: {video_result.message}")
urls = {
'video_url': video_result.video_url,
'images_url': str([result['url'] for result in image_results.nto_results])
}
logging.info("Completed combined image and video generation process")
upload_information_to_new_table(necklace_id=necklace_id,
nto_images_urls=[result['url'] for result in image_results.nto_results],
cto_images_urls=cto_urls,
mto_urls=mto_urls,
video_urls=video_result.video_url,
model_name=model_name
)
update_processed_necklaces(
necklace_id=necklace_id,
status=True,
model_name=model_name
)
except Exception as e:
raise e
logging.error(f"Error processing {necklace_id}: {str(e)}")
update_processed_necklaces(
necklace_id=necklace_id,
status=False,
model_name=model_name
)
return {
"status": "success",
}
except Exception as e:
raise e
logging.error(f"Fatal error in combined generation process: {str(e)}")
return {
'status': 'error',
'message': str(e)
}
if __name__ == "__main__":
image_url = "https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/JewelmirrorModelImages/p_01.png"
storename = "ChamundiJewelsMandir"
result = combined_image_and_video_generation(image_url=image_url, storename=storename)
print(f"Process completed with status: {result}")