ruslanmv commited on
Commit
aa17af1
·
1 Parent(s): 6370c41

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -12
app.py CHANGED
@@ -34,25 +34,34 @@ from gtts import gTTS
34
  from pydub import AudioSegment
35
  import textwrap
36
 
 
37
  # Initialize FLUX pipeline only if CUDA is available
38
  dtype = torch.bfloat16
39
  device = "cuda" if torch.cuda.is_available() else "cpu"
40
 
41
- if device == "cuda":
42
- flux_pipe = DiffusionPipeline.from_pretrained(
43
- "black-forest-labs/FLUX.1-schnell",
44
- torch_dtype=dtype
45
- ).to(device)
46
- else:
47
- flux_pipe = None # Avoid initializing the model when CUDA is unavailable
 
 
 
48
 
49
  MAX_SEED = np.iinfo(np.int32).max
50
  MAX_IMAGE_SIZE = 2048
51
 
52
  nltk.download('punkt')
53
 
 
54
  # Ensure proper multiprocessing start method
55
- multiprocessing.set_start_method("spawn", force=True)
 
 
 
 
56
 
57
  # Download necessary NLTK data
58
  def setup_nltk():
@@ -70,7 +79,7 @@ DESCRIPTION = (
70
  TITLE = "Video Story Generator with Audio by using FLUX, distilbart, and GTTS."
71
 
72
  # Load Tokenizer and Model for Text Summarization
73
- def load_text_summarization_model():
74
  """Load the tokenizer and model for text summarization."""
75
  print("Loading text summarization model...")
76
  tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-cnn-12-6")
@@ -80,6 +89,25 @@ def load_text_summarization_model():
80
  model.to(device)
81
  return tokenizer, model, device
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  tokenizer, model, device = load_text_summarization_model()
84
 
85
  # Log GPU Memory (optional, for debugging)
@@ -102,8 +130,8 @@ def check_gpu_availability():
102
 
103
  check_gpu_availability()
104
 
105
- @spaces.GPU()
106
- def generate_image_with_flux(
107
  text: str,
108
  seed: int = 42,
109
  width: int = 1024,
@@ -141,6 +169,45 @@ def generate_image_with_flux(
141
  print("DEBUG: Image generated successfully.")
142
  return image
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  # --------- End of MinDalle Functions ---------
145
  # Merge audio files
146
 
@@ -384,4 +451,6 @@ with demo:
384
  )
385
 
386
  # Launch the Gradio app
387
- demo.launch(debug=True, share=False)
 
 
 
34
  from pydub import AudioSegment
35
  import textwrap
36
 
37
+
38
  # Initialize FLUX pipeline only if CUDA is available
39
  dtype = torch.bfloat16
40
  device = "cuda" if torch.cuda.is_available() else "cpu"
41
 
42
+ def get_flux_pipeline():
43
+ """Load FLUX pipeline only when needed to prevent main process CUDA initialization."""
44
+ if device == "cuda":
45
+ return DiffusionPipeline.from_pretrained(
46
+ "black-forest-labs/FLUX.1-schnell",
47
+ torch_dtype=dtype
48
+ ).to(device)
49
+ return None
50
+
51
+ flux_pipe = None # Do not load at startup
52
 
53
  MAX_SEED = np.iinfo(np.int32).max
54
  MAX_IMAGE_SIZE = 2048
55
 
56
  nltk.download('punkt')
57
 
58
+
59
  # Ensure proper multiprocessing start method
60
+ try:
61
+ multiprocessing.set_start_method("spawn", force=True)
62
+ except RuntimeError:
63
+ pass # Ignore errors if the start method is already set
64
+
65
 
66
  # Download necessary NLTK data
67
  def setup_nltk():
 
79
  TITLE = "Video Story Generator with Audio by using FLUX, distilbart, and GTTS."
80
 
81
  # Load Tokenizer and Model for Text Summarization
82
+ def load_text_summarization_model_v1():
83
  """Load the tokenizer and model for text summarization."""
84
  print("Loading text summarization model...")
85
  tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-cnn-12-6")
 
89
  model.to(device)
90
  return tokenizer, model, device
91
 
92
+ def load_text_summarization_model():
93
+ """Load the tokenizer and model for text summarization without triggering CUDA init."""
94
+ print("Loading text summarization model...")
95
+
96
+ if "SPACE_ID" in os.environ: # Detect if running in Hugging Face Spaces
97
+ os.environ["CUDA_VISIBLE_DEVICES"] = "" # Prevent CUDA initialization
98
+
99
+ tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-cnn-12-6")
100
+ model = AutoModelForSeq2SeqLM.from_pretrained("sshleifer/distilbart-cnn-12-6")
101
+
102
+ if torch.cuda.is_available() and "SPACE_ID" not in os.environ:
103
+ device = torch.device("cuda:0")
104
+ else:
105
+ device = torch.device("cpu")
106
+
107
+ print(f"Using device: {device}")
108
+ model.to(device)
109
+ return tokenizer, model, device
110
+
111
  tokenizer, model, device = load_text_summarization_model()
112
 
113
  # Log GPU Memory (optional, for debugging)
 
130
 
131
  check_gpu_availability()
132
 
133
+ #@spaces.GPU()
134
+ def generate_image_with_flux_old(
135
  text: str,
136
  seed: int = 42,
137
  width: int = 1024,
 
169
  print("DEBUG: Image generated successfully.")
170
  return image
171
 
172
+
173
+
174
+ @spaces.GPU()
175
+ def generate_image_with_flux(
176
+ text: str,
177
+ seed: int = 42,
178
+ width: int = 1024,
179
+ height: int = 1024,
180
+ num_inference_steps: int = 4,
181
+ randomize_seed: bool = True
182
+ ):
183
+ print(f"DEBUG: Generating image with FLUX for text: '{text}'")
184
+
185
+ if randomize_seed:
186
+ seed = random.randint(0, MAX_SEED)
187
+
188
+ generator = torch.Generator().manual_seed(seed)
189
+
190
+ # Load FLUX pipeline only when needed
191
+ global flux_pipe
192
+ if flux_pipe is None:
193
+ flux_pipe = get_flux_pipeline() # Delayed initialization
194
+
195
+ if flux_pipe is None:
196
+ raise RuntimeError("FLUX pipeline is not available. Check CUDA or environment settings.")
197
+
198
+ image = flux_pipe(
199
+ prompt=text,
200
+ width=width,
201
+ height=height,
202
+ num_inference_steps=num_inference_steps,
203
+ generator=generator,
204
+ guidance_scale=0.0
205
+ ).images[0]
206
+
207
+ print("DEBUG: Image generated successfully.")
208
+ return image
209
+
210
+
211
  # --------- End of MinDalle Functions ---------
212
  # Merge audio files
213
 
 
451
  )
452
 
453
  # Launch the Gradio app
454
+ #demo.launch(debug=True, share=False)
455
+
456
+ demo.launch(debug=True, share="SPACE_ID" in os.environ)