Conversation
Added instructions for naming and exporting playlists.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Drop Zone Ops — v2 Feature Branch → Main
Summary
This PR merges a substantial rebuild of Drop Zone Ops from a Flask/Python server app into a fully client-side, zero-dependency single HTML file. It also introduces a new Commercial Injection feature and updated documentation.
What Changed
🏗 Architecture — Flask → Client-Side
The original project required a Python server, virtual environment, pip dependencies, and a running Flask process. All of that has been removed.
app.py), WebSocket integration, OBS scheduling, andrequirements.txtdependencyindex.html— open in any browser, works immediately🪂 Playlist Builder — Core UI
The drag-and-drop playlist builder has been rebuilt from scratch as a clean two-panel layout.
Left panel — Drop Zone:
Right panel — Operations:
.M3U Playlistbutton📁 Local Base Path
Solves the core OBS compatibility problem — browser security prevents access to full file paths when dropping files, so the base path field provides the folder prefix.
APPLY ALLbutton retroactively applies to existing items🏷 Tag System
Each playlist item has a tag categorizing its broadcast role:
content— main programmingcommercial— ad spotsbumper— station IDs, intro/outro clipsinterstitial— transitions, fillerother— catch-allClick the tag badge on any item to cycle through tags. Tags are written as
tvg-typeattributes in the exported.m3u.✏️ Item Edit Modal
Click any item title to open a full edit modal:
MM:SSorH:MM:SS— no seconds conversion required)group-titlein the.m3u)📋 CSV / JSON Import
Bulk import playlists from structured data files. Supports both formats with flexible field mapping.
CSV headers:
path, name, duration, tag, groupJSON fields:
path,name,duration,tag,group(plus aliases:url,src,title,type,category,block)Template files included:
playlist-template.csvandplaylist-template.json📡 M3U Export
.m3uwith#EXTINFmetadata per itemgroup-titleandtvg-typeattributestrimEnd()applied before writing — removes trailing newline that breaks OBS VLC Source💉 Commercial Injection
New feature. A full broadcast automation tool that slides in from the right as a panel over the existing UI.
Commercial Library (Column 1)
Injection Rules (Column 2)
Selection modes:
random,sequential,specificJSON Template + Preview (Column 3)
.jsonfileContent source
.m3uor.jsonas the content sourceOutput
.m3uas normal🎨 UI / UX Polish
📄 Documentation
README.mdfully rewritten to reflect the new client-side architecture:Files Changed
index.htmlapp.py+templates/index.html+static/style.cssREADME.mdplaylist-template.csvplaylist-template.jsonapp.pywstest.pyowncast-test.pyrequirements.txttemplates/index.htmlstatic/style.cssTesting
Tested and confirmed working on:
OBS VLC Source compatibility confirmed —
.m3uoutput loads and plays correctly without trailing newline.