mgbam commited on
Commit
da83876
Β·
verified Β·
1 Parent(s): 0c49880

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -13
app.py CHANGED
@@ -6,7 +6,7 @@ import logging
6
  # --- Streamlit PermissionError Mitigation Attempts ---
7
  if "STREAMLIT_CLIENT_GATHER_USAGE_STATS" not in os.environ:
8
  os.environ["STREAMLIT_CLIENT_GATHER_USAGE_STATS"] = "false"
9
- if "STREAMLIT_BROWSER_GATHERUSAGESTATS" not in os.environ:
10
  os.environ["STREAMLIT_BROWSER_GATHERUSAGESTATS"] = "false"
11
  streamlit_home_path_app = "/app/.streamlit_cai_config_v3"
12
  if "STREAMLIT_HOME" not in os.environ and os.getcwd().startswith("/app"):
@@ -185,13 +185,13 @@ if not st.session_state.project_story_treatment_scenes_list: st.info("Use the si
185
  else:
186
  for i_main_display, scene_content_item_display in enumerate(st.session_state.project_story_treatment_scenes_list):
187
  scene_num_for_display = scene_content_item_display.get('scene_number', i_main_display + 1)
188
- scene_title_for_display_main = scene_content_item_display.get('scene_title', 'Untitled Scene')
189
- key_base_main_area_widgets = f"s{scene_num_for_display}_main_widgets_loop_v3_{i_main_display}"
190
 
191
  if "director_note" in scene_content_item_display and scene_content_item_display['director_note']: st.info(f"🎬 Director Note S{scene_num_for_display}: {scene_content_item_display['director_note']}")
192
  st.subheader(f"SCENE {scene_num_for_display}: {scene_title_for_display_main.upper()}");
193
 
194
- treatment_display_col, visual_display_col = st.columns([0.45, 0.55]) # Defined here
195
 
196
  with treatment_display_col:
197
  with st.expander("πŸ“ Scene Treatment & Controls", expanded=True):
@@ -217,21 +217,21 @@ else:
217
  px_q_disp_main = scene_content_item_display.get('pexels_search_query_감독', None)
218
  if px_q_disp_main: st.caption(f"Pexels Fallback: `{px_q_disp_main}`")
219
 
220
- # <<< CORRECTED: Using visual_display_col as defined above >>>
221
- with visual_display_col:
222
  asset_info_main_disp = st.session_state.project_generated_assets_info_list[i_main_display] if i_main_display < len(st.session_state.project_generated_assets_info_list) else None
223
  if asset_info_main_disp and not asset_info_main_disp.get('error') and asset_info_main_disp.get('path') and os.path.exists(asset_info_main_disp['path']):
224
  path_asset_main = asset_info_main_disp['path']; type_asset_main = asset_info_main_disp.get('type','image')
225
- if type_asset_main == 'image': st.image(path_asset_main, caption=f"S{scene_num_for_display} ({type_asset_main}): {scene_title_disp}")
 
226
  elif type_asset_main == 'video':
227
  try:
228
  with open(path_asset_main,'rb') as vid_f_main: vid_b_main = vid_f_main.read()
229
- st.video(vid_b_main, format="video/mp4", start_time=0); st.caption(f"S{scene_num_for_display} ({type_asset_main}): {scene_title_disp}")
230
  except Exception as e_vid_disp_main_area: st.error(f"Error displaying video {path_asset_main}: {e_vid_disp_main_area}"); logger.error(f"Display video error: {e_vid_disp_main_area}", exc_info=True)
231
  else: st.warning(f"Unknown asset type '{type_asset_main}' S{scene_num_for_display}.")
232
  else:
233
  if st.session_state.project_story_treatment_scenes_list:
234
- err_msg_disp_main_area = asset_info_main_disp.get('error_message', 'Visual pending/failed.') if asset_info_main_disp else 'Visual pending/failed.'
235
  st.caption(err_msg_disp_main_area)
236
 
237
  with st.popover(f"✏️ Edit S{scene_num_for_display} Treatment"):
@@ -289,16 +289,16 @@ else:
289
  if st.session_state.project_story_treatment_scenes_list and any(asset_info_item_vid and not asset_info_item_vid.get('error') and asset_info_item_vid.get('path') for asset_info_item_vid in st.session_state.project_generated_assets_info_list if asset_info_item_vid is not None):
290
  if st.button("🎬 Assemble Narrated Cinematic Animatic", key="assemble_video_main_area_btn_final_unique_4", type="primary", use_container_width=True):
291
  with st.status("Assembling Ultra Animatic...", expanded=True) as status_video_assembly_final_op_main:
292
- assets_for_final_vid_assembly_list = [] # Corrected initialization name
293
  for i_vid_assembly_main_loop, scene_data_for_vid_assembly_main in enumerate(st.session_state.project_story_treatment_scenes_list):
294
  asset_info_current_scene_for_vid_main = st.session_state.project_generated_assets_info_list[i_vid_assembly_main_loop] if i_vid_assembly_main_loop < len(st.session_state.project_generated_assets_info_list) else None
295
  if asset_info_current_scene_for_vid_main and not asset_info_current_scene_for_vid_main.get('error') and asset_info_current_scene_for_vid_main.get('path') and os.path.exists(asset_info_current_scene_for_vid_main['path']):
296
- assets_for_final_vid_assembly_list.append({'path': asset_info_current_scene_for_vid_main['path'], 'type': asset_info_current_scene_for_vid_main.get('type', 'image'), 'scene_num': scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop + 1), 'key_action': scene_data_for_vid_assembly_main.get('key_plot_beat', ''), 'duration': scene_data_for_vid_assembly_main.get('user_scene_duration_secs', DEFAULT_SCENE_DURATION_SECS)}) # Corrected append target
297
  status_video_assembly_final_op_main.write(f"Adding S{scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop + 1)} ({asset_info_current_scene_for_vid_main.get('type')}).")
298
  else: logger.warning(f"Skipping S{scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop+1)} for video: No valid asset.")
299
- if assets_for_final_vid_assembly_list: # Corrected check
300
  status_video_assembly_final_op_main.write("Calling video engine..."); logger.info("APP: Calling visual_engine.assemble_animatic_from_assets")
301
- st.session_state.project_final_video_path = st.session_state.visual_content_engine.assemble_animatic_from_assets(asset_data_list=assets_for_final_vid_assembly_list, overall_narration_path=st.session_state.project_overall_narration_audio_path, output_filename="cinegen_ultra_animatic.mp4", fps=24) # Corrected pass
302
  if st.session_state.project_final_video_path and os.path.exists(st.session_state.project_final_video_path): status_video_assembly_final_op_main.update(label="Ultra animatic assembled! πŸŽ‰", state="complete", expanded=False); st.balloons()
303
  else: status_video_assembly_final_op_main.update(label="Video assembly failed. Check logs.", state="error", expanded=True); logger.error("APP: Video assembly returned None or file does not exist.")
304
  else: status_video_assembly_final_op_main.update(label="No valid assets for video assembly.", state="error", expanded=True); logger.warning("APP: No valid assets found for video assembly.")
 
6
  # --- Streamlit PermissionError Mitigation Attempts ---
7
  if "STREAMLIT_CLIENT_GATHER_USAGE_STATS" not in os.environ:
8
  os.environ["STREAMLIT_CLIENT_GATHER_USAGE_STATS"] = "false"
9
+ if "STREAMLIT_BROWSER_GATHERUSAGESTATS" not in os.environ: # For newer versions
10
  os.environ["STREAMLIT_BROWSER_GATHERUSAGESTATS"] = "false"
11
  streamlit_home_path_app = "/app/.streamlit_cai_config_v3"
12
  if "STREAMLIT_HOME" not in os.environ and os.getcwd().startswith("/app"):
 
185
  else:
186
  for i_main_display, scene_content_item_display in enumerate(st.session_state.project_story_treatment_scenes_list):
187
  scene_num_for_display = scene_content_item_display.get('scene_number', i_main_display + 1)
188
+ scene_title_for_display_main = scene_content_item_display.get('scene_title', 'Untitled Scene') # Used for caption
189
+ key_base_main_area_widgets = f"s{scene_num_for_display}_main_widgets_loop_v3_{i_main_display}"
190
 
191
  if "director_note" in scene_content_item_display and scene_content_item_display['director_note']: st.info(f"🎬 Director Note S{scene_num_for_display}: {scene_content_item_display['director_note']}")
192
  st.subheader(f"SCENE {scene_num_for_display}: {scene_title_for_display_main.upper()}");
193
 
194
+ treatment_display_col, visual_display_col = st.columns([0.45, 0.55])
195
 
196
  with treatment_display_col:
197
  with st.expander("πŸ“ Scene Treatment & Controls", expanded=True):
 
217
  px_q_disp_main = scene_content_item_display.get('pexels_search_query_감독', None)
218
  if px_q_disp_main: st.caption(f"Pexels Fallback: `{px_q_disp_main}`")
219
 
220
+ with visual_display_col: # <<< USING THE CORRECT VARIABLE NAME HERE >>>
 
221
  asset_info_main_disp = st.session_state.project_generated_assets_info_list[i_main_display] if i_main_display < len(st.session_state.project_generated_assets_info_list) else None
222
  if asset_info_main_disp and not asset_info_main_disp.get('error') and asset_info_main_disp.get('path') and os.path.exists(asset_info_main_disp['path']):
223
  path_asset_main = asset_info_main_disp['path']; type_asset_main = asset_info_main_disp.get('type','image')
224
+ # <<< CORRECTED VARIABLE NAME IN CAPTION F-STRING >>>
225
+ if type_asset_main == 'image': st.image(path_asset_main, caption=f"S{scene_num_for_display} ({type_asset_main}): {scene_title_for_display_main}")
226
  elif type_asset_main == 'video':
227
  try:
228
  with open(path_asset_main,'rb') as vid_f_main: vid_b_main = vid_f_main.read()
229
+ st.video(vid_b_main, format="video/mp4", start_time=0); st.caption(f"S{scene_num_for_display} ({type_asset_main}): {scene_title_for_display_main}") # Corrected here too
230
  except Exception as e_vid_disp_main_area: st.error(f"Error displaying video {path_asset_main}: {e_vid_disp_main_area}"); logger.error(f"Display video error: {e_vid_disp_main_area}", exc_info=True)
231
  else: st.warning(f"Unknown asset type '{type_asset_main}' S{scene_num_for_display}.")
232
  else:
233
  if st.session_state.project_story_treatment_scenes_list:
234
+ err_msg_disp_main_area = asset_info_main_disp.get('error_message', 'Visual pending or failed.') if asset_info_main_disp else 'Visual pending or failed.'
235
  st.caption(err_msg_disp_main_area)
236
 
237
  with st.popover(f"✏️ Edit S{scene_num_for_display} Treatment"):
 
289
  if st.session_state.project_story_treatment_scenes_list and any(asset_info_item_vid and not asset_info_item_vid.get('error') and asset_info_item_vid.get('path') for asset_info_item_vid in st.session_state.project_generated_assets_info_list if asset_info_item_vid is not None):
290
  if st.button("🎬 Assemble Narrated Cinematic Animatic", key="assemble_video_main_area_btn_final_unique_4", type="primary", use_container_width=True):
291
  with st.status("Assembling Ultra Animatic...", expanded=True) as status_video_assembly_final_op_main:
292
+ assets_for_final_vid_assembly_list = []
293
  for i_vid_assembly_main_loop, scene_data_for_vid_assembly_main in enumerate(st.session_state.project_story_treatment_scenes_list):
294
  asset_info_current_scene_for_vid_main = st.session_state.project_generated_assets_info_list[i_vid_assembly_main_loop] if i_vid_assembly_main_loop < len(st.session_state.project_generated_assets_info_list) else None
295
  if asset_info_current_scene_for_vid_main and not asset_info_current_scene_for_vid_main.get('error') and asset_info_current_scene_for_vid_main.get('path') and os.path.exists(asset_info_current_scene_for_vid_main['path']):
296
+ assets_for_final_vid_assembly_list.append({'path': asset_info_current_scene_for_vid_main['path'], 'type': asset_info_current_scene_for_vid_main.get('type', 'image'), 'scene_num': scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop + 1), 'key_action': scene_data_for_vid_assembly_main.get('key_plot_beat', ''), 'duration': scene_data_for_vid_assembly_main.get('user_scene_duration_secs', DEFAULT_SCENE_DURATION_SECS)})
297
  status_video_assembly_final_op_main.write(f"Adding S{scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop + 1)} ({asset_info_current_scene_for_vid_main.get('type')}).")
298
  else: logger.warning(f"Skipping S{scene_data_for_vid_assembly_main.get('scene_number', i_vid_assembly_main_loop+1)} for video: No valid asset.")
299
+ if assets_for_final_vid_assembly_list:
300
  status_video_assembly_final_op_main.write("Calling video engine..."); logger.info("APP: Calling visual_engine.assemble_animatic_from_assets")
301
+ st.session_state.project_final_video_path = st.session_state.visual_content_engine.assemble_animatic_from_assets(asset_data_list=assets_for_final_vid_assembly_list, overall_narration_path=st.session_state.project_overall_narration_audio_path, output_filename="cinegen_ultra_animatic.mp4", fps=24)
302
  if st.session_state.project_final_video_path and os.path.exists(st.session_state.project_final_video_path): status_video_assembly_final_op_main.update(label="Ultra animatic assembled! πŸŽ‰", state="complete", expanded=False); st.balloons()
303
  else: status_video_assembly_final_op_main.update(label="Video assembly failed. Check logs.", state="error", expanded=True); logger.error("APP: Video assembly returned None or file does not exist.")
304
  else: status_video_assembly_final_op_main.update(label="No valid assets for video assembly.", state="error", expanded=True); logger.warning("APP: No valid assets found for video assembly.")