devingulliver commited on
Commit
f6fa68b
·
verified ·
0 Parent(s):

Super-squash branch 'main' using huggingface_hub

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +14 -0
  3. app.py +68 -0
  4. requirements.txt +2 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Instant Karaoke
3
+ emoji: 📉
4
+ colorFrom: green
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ sdk_version: 6.1.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: apache-2.0
11
+ short_description: Use AI to split a YT video into instrumental/vocal tracks
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import base64
4
+ import spaces
5
+ import urllib
6
+ import gradio as gr
7
+ import demucs.separate
8
+
9
+ os.makedirs("/home/user/.cache/torch/hub/checkpoints")
10
+ urllib.request.urlretrieve(
11
+ "https://dl.fbaipublicfiles.com/demucs/hybrid_transformer/955717e8-8726e21a.th",
12
+ "/home/user/.cache/torch/hub/checkpoints/955717e8-8726e21a.th"
13
+ )
14
+
15
+ with open("ytcookies.txt", "wb") as f:
16
+ f.write(base64.b64decode(os.environ["YT_COOKIE"]))
17
+
18
+
19
+ # begin copy-pasted function
20
+
21
+ from yt_dlp import YoutubeDL
22
+
23
+ def download_best_audio(url, outtmpl="%(id)s.%(ext)s"):
24
+ final_filename = None
25
+
26
+ def progress_hook(d):
27
+ nonlocal final_filename
28
+
29
+ # Final file after download (and after post-processing, if any)
30
+ if d.get("status") == "finished" and "filename" in d:
31
+ final_filename = d["filename"]
32
+
33
+ # Some postprocessors (e.g., ffmpeg) report separately
34
+ if d.get("status") == "postprocessor_finished":
35
+ final_filename = d.get("filename", final_filename)
36
+
37
+ ydl_opts = {
38
+ "format": "bestaudio/best",
39
+ "outtmpl": outtmpl,
40
+ "progress_hooks": [progress_hook],
41
+ "quiet": True,
42
+ "cookiefile": "ytcookies.txt"
43
+ }
44
+
45
+ with YoutubeDL(ydl_opts) as ydl:
46
+ ydl.download([url])
47
+
48
+ return final_filename
49
+
50
+ # end copy-pasted function
51
+
52
+ @spaces.GPU
53
+ def dummy(nope):
54
+ pass
55
+
56
+ def vidplusvox(yturl, progress=gr.Progress(track_tqdm=True)):
57
+ if not re.fullmatch(r'((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube(?:-nocookie)?\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|live\/|v\/)?)([\w\-]+)(\S+)?', yturl):
58
+ raise gr.Error("Invalid YouTube URL", duration=5)
59
+ infile = download_best_audio(yturl)
60
+ outinfo = demucs.separate.main(["--mp3", "--two-stems", "vocals", "-n", "htdemucs", "-d", "cpu", infile])
61
+ stem = "/home/user/app/separated/htdemucs/"+infile.rsplit(".", 1)[0]
62
+ print(os.listdir(stem))
63
+ return stem+"/vocals.mp3", stem+"/no_vocals.mp3"
64
+
65
+
66
+ demo = gr.Interface(fn=vidplusvox, inputs=gr.Text(label="YouTube URL"), outputs=[gr.Audio(label="Vocal"),gr.Audio(label="Instrumental")])
67
+ demo.queue()
68
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ demucs
2
+ yt-dlp