wave-twinx 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,58 @@
1
+ Metadata-Version: 2.4
2
+ Name: wave-twinx
3
+ Version: 0.1.0
4
+ Summary: A YouTube client with working videos - ad-free and customizable.
5
+ Author: philast-015
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/philast-015/Wave
8
+ Project-URL: Source, https://github.com/philast-015/Wave
9
+ Project-URL: Tracker, https://github.com/philast-015/Wave/issues
10
+ Keywords: youtube,video,client,web
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: flask>=3.1.3
24
+ Requires-Dist: flask-cors>=6.0.5
25
+ Requires-Dist: requests>=2.34.2
26
+ Requires-Dist: yt-dlp>=2026.6.9
27
+
28
+ # Wave
29
+
30
+ Wave is a terminal + web based YouTube client that offers videos without any ads and insane customization like:
31
+ - making it minimal and productive
32
+ - gaming related
33
+ - education only
34
+ - and much more
35
+
36
+ ## Installation
37
+
38
+ ```bash
39
+ pip install wave-twinx
40
+ ```
41
+
42
+ Or from source:
43
+
44
+ ```bash
45
+ git clone https://github.com/philast-015/Wave
46
+ cd Wave
47
+ pip install .
48
+ ```
49
+
50
+ ## Usage
51
+
52
+ ```bash
53
+ wave
54
+ ```
55
+
56
+ ## Contribution
57
+
58
+ Contributers are welcome! just fork this repo edit what you want and create a PR.
@@ -0,0 +1,31 @@
1
+ # Wave
2
+
3
+ Wave is a terminal + web based YouTube client that offers videos without any ads and insane customization like:
4
+ - making it minimal and productive
5
+ - gaming related
6
+ - education only
7
+ - and much more
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ pip install wave-twinx
13
+ ```
14
+
15
+ Or from source:
16
+
17
+ ```bash
18
+ git clone https://github.com/philast-015/Wave
19
+ cd Wave
20
+ pip install .
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ```bash
26
+ wave
27
+ ```
28
+
29
+ ## Contribution
30
+
31
+ Contributers are welcome! just fork this repo edit what you want and create a PR.
@@ -0,0 +1,47 @@
1
+ [build-system]
2
+ requires = ["setuptools>=64"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "wave-twinx"
7
+ version = "0.1.0"
8
+ description = "A YouTube client with working videos - ad-free and customizable."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = {text = "MIT"}
12
+ authors = [
13
+ {name = "philast-015"},
14
+ ]
15
+ keywords = ["youtube", "video", "client", "web"]
16
+ classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Environment :: Web Environment",
19
+ "Intended Audience :: End Users/Desktop",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
27
+ ]
28
+ dependencies = [
29
+ "flask>=3.1.3",
30
+ "flask-cors>=6.0.5",
31
+ "requests>=2.34.2",
32
+ "yt-dlp>=2026.6.9",
33
+ ]
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/philast-015/Wave"
37
+ Source = "https://github.com/philast-015/Wave"
38
+ Tracker = "https://github.com/philast-015/Wave/issues"
39
+
40
+ [project.scripts]
41
+ wave = "wave.main:main"
42
+
43
+ [tool.setuptools.packages.find]
44
+ include = ["wave*"]
45
+
46
+ [tool.setuptools.package-data]
47
+ wave = ["Web/*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,208 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Yt_Wave</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
9
+ </head>
10
+ <body>
11
+
12
+ <!-- Search View -->
13
+ <div id="searchView">
14
+ <header>
15
+ <a href="/"><i class="bi bi-youtube"></i> Wave</a>
16
+ <form id="searchForm">
17
+ <input type="text" id="searchInput" placeholder="Search YouTube..." autofocus>
18
+ <button type="submit"><i class="bi bi-search-heart"></i></button>
19
+ </form>
20
+ <div id="searchHistoryDropdown" hidden>
21
+ <div id="searchHistoryList"></div>
22
+ </div>
23
+ </header>
24
+
25
+ <div id="collapsed-sidebar">
26
+ <button class="sidebar-icon" data-tab="home" title="Home">
27
+ <i class="bi bi-house"></i>
28
+ </button>
29
+ <button class="sidebar-icon" data-tab="trending" title="Trending">
30
+ <i class="bi bi-fire"></i>
31
+ </button>
32
+ <button class="sidebar-icon" data-tab="history" title="History">
33
+ <i class="bi bi-clock-history"></i>
34
+ </button>
35
+ <button class="sidebar-icon" data-tab="bookmarks" title="Saved">
36
+ <i class="bi bi-bookmark"></i>
37
+ </button>
38
+ <button class="sidebar-icon" data-tab="likes" title="Likes">
39
+ <i class="bi bi-heart"></i>
40
+ </button>
41
+ <button class="sidebar-icon" id="sidebarSettingsBtn" data-tab="settings" title="Settings">
42
+ <i class="bi bi-gear"></i>
43
+ </button>
44
+ </div>
45
+
46
+ <div id="sidebar">
47
+ <div class="sidebar-content">
48
+ <div class="tab-panel" id="tab-history">
49
+ <div class="tab-label">Watch history</div>
50
+ <div id="historyList" class="saved-grid"></div>
51
+ </div>
52
+ <div class="tab-panel" id="tab-bookmarks">
53
+ <div class="tab-label">Saved videos</div>
54
+ <div id="bookmarksList" class="saved-grid"></div>
55
+ </div>
56
+ <div class="tab-panel" id="tab-likes">
57
+ <div class="tab-label">Liked videos</div>
58
+ <div id="likesList" class="saved-grid"></div>
59
+ </div>
60
+ <div class="tab-panel" id="tab-settings">
61
+ <div class="menu-section">
62
+ <div class="menu-label">Theme</div>
63
+ <div class="menu-group" data-setting="theme">
64
+ <button data-value="dark" class="active">Dark</button>
65
+ <button data-value="light">Light</button>
66
+ </div>
67
+ </div>
68
+ <div class="menu-section">
69
+ <div class="menu-label">Search radius</div>
70
+ <div class="menu-group" data-setting="searchRadius">
71
+ <button data-value="none">None</button>
72
+ <button data-value="small">Small</button>
73
+ <button data-value="medium" class="active">Medium</button>
74
+ <button data-value="full">Full</button>
75
+ </div>
76
+ </div>
77
+ <div class="menu-section">
78
+ <div class="menu-label">Card radius</div>
79
+ <div class="menu-group" data-setting="cardRadius">
80
+ <button data-value="none">None</button>
81
+ <button data-value="small" class="active">Small</button>
82
+ <button data-value="medium">Medium</button>
83
+ <button data-value="full">Full</button>
84
+ </div>
85
+ </div>
86
+ <div class="menu-section">
87
+ <div class="menu-label">Accent color</div>
88
+ <div class="menu-group" data-setting="accent">
89
+ <button data-value="red" class="active" style="--swatch:#ff0033">Red</button>
90
+ <button data-value="blue" style="--swatch:#0066ff">Blue</button>
91
+ <button data-value="green" style="--swatch:#00aa44">Green</button>
92
+ <button data-value="purple" style="--swatch:#8833ff">Purple</button>
93
+ <button data-value="orange" style="--swatch:#ff6600">Orange</button>
94
+ <button data-value="yellow" style="--swatch:#f7c10a">Yellow</button>
95
+ <button data-value="neon" style="--swatch:#90F000">Neon</button>
96
+ </div>
97
+ </div>
98
+ <div class="menu-section">
99
+ <div class="menu-label">Grid columns</div>
100
+ <div class="menu-group" data-setting="gridCols">
101
+ <button data-value="auto" class="active">Auto</button>
102
+ <button data-value="2">2</button>
103
+ <button data-value="3">3</button>
104
+ <button data-value="4">4</button>
105
+ </div>
106
+ </div>
107
+ <div class="menu-section">
108
+ <div class="menu-label">Animations</div>
109
+ <div class="menu-group" data-setting="animations">
110
+ <button data-value="on" class="active">On</button>
111
+ <button data-value="off">Off</button>
112
+ </div>
113
+ </div>
114
+ <div class="menu-section">
115
+ <div class="menu-label">Recommendations</div>
116
+ <div class="menu-group" data-setting="recommendations">
117
+ <button data-value="on" class="active">On</button>
118
+ <button data-value="off">Off</button>
119
+ </div>
120
+ </div>
121
+ <div class="menu-section">
122
+ <div class="menu-label">Country mode</div>
123
+ <div class="menu-group" data-setting="countryMode">
124
+ <button data-value="on">On</button>
125
+ <button data-value="off" class="active">Off</button>
126
+ </div>
127
+ </div>
128
+ <div class="menu-section">
129
+ <div class="menu-label">Country</div>
130
+ <input type="text" id="countryInput" placeholder="e.g. US, IN, GB..." maxlength="4" style="width:100%;padding:6px 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg2);color:var(--text);font-size:13px;outline:none;text-transform:uppercase">
131
+ </div>
132
+ <div class="menu-section">
133
+ <div class="menu-label">Tags</div>
134
+ <div class="menu-group" data-setting="tags" id="tagsGroup">
135
+ <button data-value="games">#games</button>
136
+ <button data-value="movies">#movies</button>
137
+ <button data-value="music">#music</button>
138
+ <button data-value="sports">#sports</button>
139
+ <button data-value="tech">#tech</button>
140
+ <button data-value="news">#news</button>
141
+ <button data-value="education">#education</button>
142
+ <button data-value="comedy">#comedy</button>
143
+ </div>
144
+ <div class="custom-tag-row">
145
+ <input type="text" id="customTagInput" placeholder="Add custom tag..." maxlength="20">
146
+ <button id="addCustomTag"><i class="bi bi-plus"></i></button>
147
+ </div>
148
+ </div>
149
+ <div class="menu-section">
150
+ <div class="menu-label">Danger Zone</div>
151
+ <button id="resetDataBtn" class="danger-btn"><i class="bi bi-exclamation-triangle"></i> Reset all data</button>
152
+ </div>
153
+ </div>
154
+ </div>
155
+ </div>
156
+
157
+ <div id="results"></div>
158
+ </div>
159
+
160
+ <!-- Player View -->
161
+ <div id="playerView" hidden>
162
+ <div class="player-container">
163
+ <video id="videoPlayer" autoplay></video>
164
+ <audio id="audioPlayer" preload="auto"></audio>
165
+ <div class="player-controls" id="playerControls">
166
+ <div class="controls-top">
167
+ <span class="video-title" id="playerTitle"></span>
168
+ </div>
169
+ <div class="controls-center">
170
+ <button class="big-play-btn" id="bigPlayBtn"><i class="bi bi-play-fill"></i></button>
171
+ </div>
172
+ <div class="controls-bottom">
173
+ <div class="progress-bar" id="progressBar">
174
+ <div class="progress-buffer" id="progressBuffer"></div>
175
+ <div class="progress-played" id="progressPlayed"></div>
176
+ <div class="progress-thumb" id="progressThumb"></div>
177
+ </div>
178
+ <div class="controls-row">
179
+ <div class="controls-left">
180
+ <button class="ctrl-btn" id="playBtn"><i class="bi bi-play-fill"></i></button>
181
+ <span class="time-display"><span id="currentTime">0:00</span> / <span id="duration">0:00</span></span>
182
+ </div>
183
+ <div class="controls-right">
184
+ <button class="ctrl-btn" id="muteBtn"><i class="bi bi-volume-up-fill"></i></button>
185
+ <input type="range" id="volumeSlider" min="0" max="1" step="0.05" value="1">
186
+ <button class="ctrl-btn" id="miniplayerBtn" title="Miniplayer (i)"><i class="bi bi-pip"></i></button>
187
+ <button class="ctrl-btn" id="fullscreenBtn" title="Fullscreen (f)"><i class="bi bi-fullscreen"></i></button>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ <div class="meta">
194
+ <h4 id="metaTitle"></h4>
195
+ <h6 id="metaChannel"></h6>
196
+ <div class="player-actions">
197
+ <button id="likeBtn" class="action-btn"><i class="bi bi-heart"></i> <span>Like</span></button>
198
+ <button id="bookmarkBtn" class="action-btn"><i class="bi bi-bookmark"></i> <span>Save</span></button>
199
+ <button id="downloadBtn" class="action-btn"><i class="bi bi-download"></i> <span>Download</span></button>
200
+ <button id="openYtBtn" class="action-btn"><i class="bi bi-box-arrow-up-right"></i> <span>YouTube</span></button>
201
+ </div>
202
+ <p id="metaDescription"></p>
203
+ </div>
204
+ </div>
205
+
206
+ <script src="script.js"></script>
207
+ </body>
208
+ </html>