Video Playlist Editor — User Guide
Create and manage video playlists with grouping, multi-language subtitles, chapter navigation, interactive annotations, and export ZWMAP-compatible JSON for seamless ZWPlayer integration.
Getting Started
The Playlist Editor is a free online tool for creating and managing video playlists. Organize videos into groups, configure metadata (poster, subtitles, chapters, annotations, thumbnails) for each video, then export a ZWMAP JSON file for use with ZWPlayer.
Quick Start Steps
-
Create groups
Click the "+ New Group" button in the toolbar (or press G) to create your first group. Groups organize videos by topic or series.
-
Add video items
Select a group, then click "Add Item" (or press N), or use the batch import feature. Three methods are available: paste URLs, drag & drop local files, or import JSON/XML.
-
Configure metadata
Set poster images, multi-language subtitle tracks, chapter navigation, interactive annotations, thumbnails, and EPG program info for each video item. URL is required; type is auto-detected.
-
Export ZWMAP JSON
Once configured, click "Export" (or press Ctrl+S) to download the playlist JSON file. This file can be used directly in ZWPlayer configuration.
Tip: This tool runs entirely in your browser. Playlist data is automatically saved locally — refreshing the page won't lose your work. You can also export to a file at any time for backup.
Keyboard Shortcuts
Speed up your workflow with these keyboard shortcuts:
| Key | Action | Description |
|---|---|---|
| Ctrl+S | Export Playlist | Export the current playlist as a JSON file |
| Ctrl+Z | Undo | Undo the last operation |
| Ctrl+Y | Redo | Redo the previously undone operation |
| N | New Item | Add a new video item to the selected group |
| G | New Group | Create a new playlist group |
| Delete | Delete | Delete the selected item or group |
| Esc | Exit / Cancel | Exit preview mode or close the current dialog |
Drag & Drop Sorting — Drag items or groups to reorder them. You can also drag items between groups.
Group & Item Management
Group Management
Groups organize video items by topic, series, or category. Each group has the following properties:
| Name | Description |
|---|---|
| Name | Display name for the group, e.g. "Unit 1", "Course Series". |
| ID | Unique identifier for the group. Auto-generated if left empty. |
| Expanded | Controls whether the group is expanded by default in the player. |
Item Detail Fields
Each video item supports the following configuration fields:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Display name for the video. | |
id |
string | Unique identifier for the item. Auto-generated if left empty. | |
url |
string | Yes | URL of the video file (required). Supports MP4, HLS, DASH, FLV formats. |
type |
string | Stream type: auto (auto-detect), mp4, hls, dash, flv. Usually keep as auto. | |
isLive |
boolean | Mark whether the item is a live stream. | |
poster |
string | URL of the video cover image. | |
subtitle |
array | Array of subtitle tracks. Each track contains url, label, and lang fields. | |
chapter |
string | URL of the chapter navigation JSON file. | |
annotation |
string | URL of the interactive annotation JSON file. | |
thumbnail |
string | URL of the thumbnail JSON file (ZWMAP thumbnail protocol format). | |
watermark |
string | URL of the watermark JSON file (ZWMAP watermark protocol format). | |
epg |
string | EPG program name for live stream current program info. |
Import Methods
The Playlist Editor supports multiple import methods to quickly populate your playlist:
URL Import
Paste a list of video URLs, one per line. Supports "URL name" format to specify video names. Lines starting with # are treated as comments. Ideal for quickly importing existing online video resources.
# Comment lines start with #
https://cdn.example.com/video1.mp4 Episode 1
https://cdn.example.com/video2.mp4 Episode 2
https://cdn.example.com/video3.mp4
File Import
Drag and drop local files into the editor window. Supports video files and matching auxiliary files. The system automatically classifies and associates files by base name.
File Type Recognition Rules
The system uses a three-phase detection strategy: 1) ZWMAP protocol header (zwp_type), 2) filename suffix keywords, 3) content structure analysis. ZWMAP protocol header (zwp_type), 2) filename suffix keywords, 3) content structure analysis. ZWMAP protocol header (zwp_type), 2) filename suffix keywords, 3) content structure analysis.
| Type | Extensions | ZWMAP zwp_type |
Filename Suffixes | Structure Fallback |
|---|---|---|---|---|
| Video | .mp4 .webm .ogg .m4v | — | — | Browser MIME type detection |
| Subtitle | .srt .vtt .bcc | subtitle |
_subtitle -subtitle | Has body array |
| Chapter | .json .vtt | chapter |
_chapter -chapter _chapters -chapters | Has chapters array, or array with start_time |
| Annotation | .json | annotation |
_annotation -annotation _annotations -annotations | Has hotspots or events array |
| Thumbnail | .json | thumbnail |
_thumbnail -thumbnail _thumb -thumb -thumbnails | Has thumbnail.url or legacy {url, width, height, total} |
| Watermark | .json | watermark |
_watermark -watermark _wm -wm | Has watermarks array |
| Poster | .jpg .jpeg .png .webp | — | _poster -poster _cover -cover | Image file matched by base name |
Example: If you drop video.mp4, video.vtt, and video.json together, the system will merge them into a single video item.
JSON Import
Import a ZWMAP playlist JSON file. The tool parses groups and items, merging them into the current playlist. Useful for restoring or migrating data from existing configurations.
XML Import
Import a compatible XML playlist file. The tool automatically converts the XML structure to ZWMAP format.
Bulk Operations & Templates
Select multiple items and use bulk operations to modify their properties simultaneously. Path templates support variable substitution:
Template Variables
| Variable | Description |
|---|---|
{baseUrl} |
Base URL (configured in the toolbar header) |
{filename} |
Video file base name (without extension) |
{ext} |
Video file extension |
{index} |
Item index within the group (starting from 1) |
{groupName} |
Parent group name |
Bulk Operation Types
| Operation | Description |
|---|---|
| Set Type | Set the video type for selected items to auto, mp4, hls, dash, or flv. |
| Set Live | Batch set whether selected items are live streams. |
| Apply Path Template | Use template variables to batch-set paths for subtitles, chapters, annotations, or thumbnails. |
| Move to Group | Move selected items to a specified group. |
| Delete Selected | Delete all selected items. |
ZWMAP Playlist Protocol Specification
The ZWMAP (Z&W Media Annotation Protocol) playlist type defines a standard JSON format for describing video playlists. This protocol enables interoperability between playlist editing tools and video players.
Protocol Header
Every ZWMAP playlist document begins with a protocol identifier:
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "playlist",
"zwp_version": "1.0"
}
Data Structure
A playlist consists of a groups array, where each group contains an items array:
Item Fields
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Display name for the video. | |
id |
string | Unique item identifier. Auto-generated if omitted. | |
url |
string | Yes | Video file URL. Supports MP4, HLS (.m3u8), DASH (.mpd), FLV formats. |
type |
string | Stream type: auto, mp4, hls, dash, flv. Auto detects based on URL suffix. | |
isLive |
boolean | Boolean flag indicating a live stream. | |
poster |
string | Video cover image URL. | |
subtitle |
array | Array of subtitle tracks. Each entry contains url (subtitle file URL), label (display name), lang (language code). | |
chapter |
string | Chapter JSON file URL. | |
annotation |
string | Interactive annotation JSON file URL. | |
thumbnail |
string | Thumbnail JSON file URL (ZWMAP thumbnail protocol format). | |
watermark |
string | Watermark JSON file URL (ZWMAP watermark protocol format). | |
epg |
string | EPG current program name. |
Complete Example
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "playlist",
"zwp_version": "1.0",
"groups": [
{
"name": "Course Series",
"id": "group-1",
"items": [
{
"name": "Episode 1",
"id": "item-1",
"url": "https://cdn.example.com/video1.mp4",
"type": "auto",
"poster": "https://cdn.example.com/poster1.jpg",
"subtitle": [
{ "url": "https://cdn.example.com/sub1-en.vtt", "label": "English", "lang": "en" },
{ "url": "https://cdn.example.com/sub1-zh.vtt", "label": "中文", "lang": "zh" }
],
"chapter": "https://cdn.example.com/chapter1.json",
"annotation": "https://cdn.example.com/annotation1.json",
"thumbnail": "https://cdn.example.com/thumb1.json",
"watermark": "https://cdn.example.com/watermark1.json"
},
{
"name": "Episode 2",
"id": "item-2",
"url": "https://cdn.example.com/video2.mp4"
}
]
},
{
"name": "Live Channels",
"id": "group-2",
"items": [
{
"name": "News Live",
"url": "https://live.example.com/news.m3u8",
"type": "hls",
"isLive": true,
"epg": "News Broadcast"
}
]
}
]
}
This example shows a playlist with two groups, each containing two video items with common metadata configurations.
Note: The zwp_protocol and zwp_type fields are required in the ZWMAP playlist protocol. The url field in each item is required; all other item fields are optional. The zwp_protocol and zwp_type fields are required in the ZWMAP playlist protocol. The url field in each item is required; all other item fields are optional.
ZWPlayer Integration
ZWPlayer is a full-featured JavaScript video player with native playlist support. Here's how to integrate the generated playlist with ZWPlayer.
Player Configuration
Add the playlist property to your ZWPlayer initialization config:
var player = new ZWPlayer({
playerElm: 'mse',
url: 'https://cdn.example.com/video1.mp4',
playlist: {
groups: [
{
name: 'Course Series',
items: [
{ name: 'Episode 1', url: 'https://cdn.example.com/video1.mp4' },
{ name: 'Episode 2', url: 'https://cdn.example.com/video2.mp4' }
]
}
]
}
});
Configuring Base URL
Set the Base URL in the editor toolbar header. When exporting, it is automatically prepended to local filenames. If your videos already use full URLs, no Base URL is needed.
Using a JSON URL
Upload the exported ZWMAP JSON file to your web server, then pass the URL directly to the playlist property:
var player = new ZWPlayer({
playerElm: 'mse',
url: 'https://cdn.example.com/video1.mp4',
playlist: 'https://cdn.example.com/playlist/playlist-zwmap.json'
});
Deployment: Upload the exported JSON file to your web server. All resources referenced in the JSON (videos, subtitles, chapters, annotations, thumbnails, posters) must have accessible URLs. Using a Base URL is recommended for consistent resource path management. Upload the exported JSON file to your web server. All resources referenced in the JSON (videos, subtitles, chapters, annotations, thumbnails, posters) must have accessible URLs. Using a Base URL is recommended for consistent resource path management.