diff --git a/www/js/version.json b/www/js/version.json
index 743b5ab..f746aff 100644
--- a/www/js/version.json
+++ b/www/js/version.json
@@ -1,5 +1,5 @@
{
- "VERSION": "v0.7.102",
- "VERSION_NUMBER": "0.7.102",
- "BUILD_DATE": "2026-08-07T19:02:39.514Z"
+ "VERSION": "v0.7.103",
+ "VERSION_NUMBER": "0.7.103",
+ "BUILD_DATE": "2026-08-08T11:27:48.503Z"
}
diff --git a/www/js/vj-stream.mjs b/www/js/vj-stream.mjs
index 1e700a5..97a1f3c 100644
--- a/www/js/vj-stream.mjs
+++ b/www/js/vj-stream.mjs
@@ -9,7 +9,7 @@ const STATS_POLL_INTERVAL = 10000;
const DEFAULT_STREAMING_SITE = Object.freeze({
name: 'laantungir.net',
streamBaseUrl: 'https://laantungir.net',
- streamUrlTemplate: '{base}/stream/{slug}/stream.m3u8',
+ streamUrlTemplate: '{base}/stream/{slug}/src/index.m3u8',
rtmpServer: 'rtmp://laantungir.net:1935/publish',
obsKeyTemplate: '{slug}/src/{SECRET_KEY}',
});
@@ -1801,7 +1801,7 @@ export function initVjStreamPanel({
showStreamingSiteForm('add', {
name: '',
streamBaseUrl: 'https://',
- streamUrlTemplate: '{base}/stream/{slug}/stream.m3u8',
+ streamUrlTemplate: '{base}/stream/{slug}/src/index.m3u8',
rtmpServer: 'rtmp://',
obsKeyTemplate: '{slug}/src/{SECRET_KEY}',
});
@@ -1829,7 +1829,7 @@ export function initVjStreamPanel({
const draft = normalizeStreamingSiteConfig({
name: String(els.inputSiteName?.value || '').trim(),
streamBaseUrl: String(els.inputSiteStreamBaseUrl?.value || '').trim(),
- streamUrlTemplate: String(els.inputSiteStreamUrlTemplate?.value || '').trim(),
+ streamUrlTemplate: '{base}/stream/{slug}/src/index.m3u8',
rtmpServer: String(els.inputSiteRtmpServer?.value || '').trim(),
obsKeyTemplate: String(els.inputSiteObsKeyTemplate?.value || '').trim(),
});
diff --git a/www/vj-full.html b/www/vj-full.html
new file mode 100644
index 0000000..805c4c3
--- /dev/null
+++ b/www/vj-full.html
@@ -0,0 +1,7008 @@
+
+
+
+
+
+
+ VJ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![Playlist avatar]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
AI
+
+
No saved providers yet.
+
+
+
+
+
+
+ リレー
+
+
+ Loading relays...
+
+
+
+
+
+
ブロッサム
+
+
Loading blossom servers...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/vj.html b/www/vj.html
index 805c4c3..754f149 100644
--- a/www/vj.html
+++ b/www/vj.html
@@ -44,10 +44,8 @@
#vjApp {
--vj-col-1: 280px;
- --vj-col-2: 640px;
- --vj-col-3: 300px;
- --vj-col-4: 320px;
- --vj-col-5: 280px;
+ --vj-col-2: 320px;
+ --vj-col-3: 280px;
--vj-gutter-size: 10px;
flex: 1;
@@ -58,11 +56,7 @@
var(--vj-gutter-size)
var(--vj-col-2)
var(--vj-gutter-size)
- var(--vj-col-3)
- var(--vj-gutter-size)
- var(--vj-col-4)
- var(--vj-gutter-size)
- var(--vj-col-5);
+ var(--vj-col-3);
width: 100%;
overflow: hidden;
align-items: stretch;
@@ -70,9 +64,7 @@
#vjStreamCard,
#vjChatPanel,
- #musicSidebar,
- #musicMain,
- #musicQueuePanel {
+ #musicSidebar {
min-width: 0;
}
@@ -82,7 +74,7 @@
}
#vjStreamCard {
- grid-column: 7;
+ grid-column: 3;
min-width: 280px;
border: var(--border);
border-radius: var(--border-radius);
@@ -95,7 +87,7 @@
}
#vjChatPanel {
- grid-column: 9;
+ grid-column: 5;
min-width: 220px;
border: var(--border);
border-radius: var(--border-radius);
@@ -400,28 +392,6 @@
overflow: auto;
}
- #musicMain {
- grid-column: 3;
- min-width: 0;
- min-height: 0;
- display: flex;
- flex-direction: column;
- gap: 10px;
- }
-
- #musicQueuePanel {
- grid-column: 5;
- min-width: 240px;
- border: var(--border);
- border-radius: var(--border-radius);
- background: var(--secondary-color);
- padding: 10px;
- display: flex;
- flex-direction: column;
- gap: 10px;
- overflow: hidden;
- min-height: 0;
- }
.vjGutter[data-gutter-index="0"] {
grid-column: 2;
@@ -431,13 +401,6 @@
grid-column: 4;
}
- .vjGutter[data-gutter-index="2"] {
- grid-column: 6;
- }
-
- .vjGutter[data-gutter-index="3"] {
- grid-column: 8;
- }
.musicSidebarTitle {
font-size: 12px;
@@ -1535,7 +1498,7 @@
-
-
-
-
-
-
-
-
-
-
-
+