Spaces:
Runtime error
Runtime error
File size: 3,332 Bytes
fdc5f70 e4df913 87e4401 2c690c6 857db5b 87e4401 e4df913 779076d e05183d 857db5b e4df913 87e4401 779076d f950faf 779076d e4df913 fdc5f70 f950faf e4df913 e05183d 2c690c6 e05183d c3aa73a f950faf fdc5f70 e4df913 fdc5f70 e05183d fdc5f70 f950faf fdc5f70 c3aa73a f950faf fdc5f70 2c690c6 fdc5f70 c3aa73a e05183d fdc5f70 c3aa73a e05183d 779076d f950faf fdc5f70 e05183d fdc5f70 e05183d fdc5f70 e05183d |
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 |
#!/usr/bin/env python3
# GhostAI Music Generator Hugging Face Spaces GPU-Compatible
import spaces # <--- Must be imported FIRST before torch and CUDA
import os
import sys
import gc
import warnings
import tempfile
import torch
import torchaudio
import numpy as np
import gradio as gr
from pydub import AudioSegment
from audiocraft.models import MusicGen
from huggingface_hub import login
warnings.filterwarnings("ignore")
# Hugging Face token auth
HF_TOKEN = os.getenv("HF_TOKEN")
if not HF_TOKEN:
sys.exit("ERROR: HF_TOKEN not set.")
login(HF_TOKEN)
# Device setup
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Running on {device.upper()}")
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128"
# Load MusicGen model explicitly on GPU
musicgen = MusicGen.get_pretrained("medium")
musicgen.lm.to(device)
musicgen.set_generation_params(duration=10)
def clean_resources():
if device == "cuda":
torch.cuda.empty_cache()
gc.collect()
@spaces.GPU # <-- Correct GPU decorator for HF
def generate_music(prompt, cfg, top_k, top_p, temp, total_len, chunk_len, crossfade):
if not prompt.strip():
return None, "⚠️ Enter a valid prompt."
sample_rate = musicgen.sample_rate
segments = []
chunks = max(1, total_len // chunk_len)
for _ in range(chunks):
with torch.no_grad():
audio = musicgen.generate(
[prompt],
temperature=temp,
cfg_coef=cfg,
top_k=top_k,
top_p=top_p,
duration=chunk_len,
progress=False
)[0].cpu().float()
if audio.dim() == 1:
audio = audio.unsqueeze(0).repeat(2, 1)
elif audio.shape[0] == 1:
audio = audio.repeat(2, 1)
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmp:
torchaudio.save(tmp.name, audio, sample_rate)
segment = AudioSegment.from_wav(tmp.name)
os.unlink(tmp.name)
segments.append(segment)
clean_resources()
final = segments[0]
for seg in segments[1:]:
final = final.append(seg, crossfade=crossfade)
final = final[:total_len * 1000].fade_in(1000).fade_out(1000).normalize(headroom=-9.0)
out_path = "output_cleaned.mp3"
final.export(out_path, format="mp3", bitrate="128k", tags={"title": "GhostAI Track", "artist": "GhostAI"})
return out_path, "✅ Done!"
demo = gr.Interface(
fn=generate_music,
inputs=[
gr.Textbox(label="Instrumental Prompt"),
gr.Slider(1.0, 10.0, value=3.0, step=0.1, label="CFG Scale"),
gr.Slider(10, 500, value=250, step=10, label="Top-K"),
gr.Slider(0.0, 1.0, value=0.9, step=0.05, label="Top-P"),
gr.Slider(0.1, 2.0, value=1.0, step=0.1, label="Temperature"),
gr.Radio([30, 60, 90, 120], value=30, label="Length (seconds)"),
gr.Slider(5, 15, value=10, step=1, label="Chunk Length (seconds)"),
gr.Slider(100, 2000, value=1000, step=100, label="Crossfade (ms)")
],
outputs=[
gr.Audio(label="Generated Music", type="filepath"),
gr.Textbox(label="Status")
],
title="👻 GhostAI Music Generator",
description="Generate instrumental music using MusicGen Medium model."
)
demo.launch(share=False)
|