ToolJovia
Files

Local Media Playlist Builder

Author a media sequence with titles and relative paths, then download a real XSPF playlist and complete source-order evidence locally.

✓ Browser-local processing
A selected actual File replaces the pasted JSON. No media file is read or uploaded.
Use sourceType relative-path for literal paths beside the playlist, or http-url for already canonical HTTP(S) resource URIs. Repeated rows stay repeated.

Loading tool…

How to use Local Media Playlist Builder

Prepare the order you want to hand to a supporting media player. Keep repeated tracks intentional, describe their locations and add only metadata you know. The builder creates a real playlist file, explains its encoded relative references and leaves the final file placement and player import under your control.

  1. Replace the example with your own playlist title and ordered track list. Add optional creator, album, annotation and durationMs only when you intend to carry those literal values.
  2. For local media, enter plain relative paths and keep the exported playlist beside that path root. For remote references, enter canonical HTTP(S) URIs. Review every row, including intended repeats.
  3. Build and inspect the small current summary. Download the XSPF playlist or complete JSON to review original locations, encoded URIs, metadata and missing duration hints.
  4. Place the playlist and media yourself, then open it manually in your chosen supporting player. Confirm that the intended files and order are recognized before relying on the sequence.

Good to know

  • One authored XSPF version 1 playlist, 1–200 ordered tracks. No existing-playlist import, M3U/HLS conversion, directory scan, automatic media copy, playback, player launch, codec check, metadata lookup, live stream test, account or network request. It does not certify reader compatibility, licensing, ownership or safe external destinations.
  • Use 1–200,000 source UTF-16 units and UTF-8 bytes. An optional actual File of 1–200,000 bytes takes priority; its Unicode basename is single-line, at most 200 UTF-16 units, without path separators. Strict UTF-8, exact byte count and one 5-second read deadline apply. One initial BOM is consumed only for parsing; full original source remains in JSON.
  • Root fields: title, optional creator/annotation and tracks. Track fields: sourceType, location and optional title/creator/album/annotation/durationMs. Duplicate JSON members, prototype keys, unknown fields, wrong types, malformed Unicode and any over-budget complete result refuse atomically. Blank optional strings remain explicitly empty; omission stays distinct from an empty value.
  • Title is nonblank. Names use at most 200 UTF-16 units on one line; annotations allow at most 1,000 and preserve tabs/CR/LF. Unsupported controls, noncharacters and lone surrogates refuse. Text is XML character data with proper escaping, never mounted as HTML, a DTD, extension or stylesheet. Unicode spelling and accents are not normalized.
  • relative-path means a literal portable relative path, not an already escaped URI. At most 1,024 UTF-16 units, 32 segments and 100 units per segment; no empty, dot, traversal, drive/UNC, backslash, reserved device/filename character, outer-whitespace or trailing-dot segment. Each segment is UTF-8 percent-encoded once. Literal % becomes %25 and # becomes %23; no decoding, filesystem resolution, xml:base or source file access occurs.
  • http-url is an already canonical ASCII HTTP(S) URI up to 2,048 characters, with valid percent escapes and no credentials, whitespace or backslashes. The URL parser’s href must equal the source. Encoded resource paths are not decoded or probed. A later player may contact these resources when you choose to import the file; this page never does so.
  • Optional durationMs is a canonical integer string from 0 through 86,400,000. It is a user-supplied hint, not a measured clip length or playback limit. JSON reports the exact sum of supplied hints and counts missing values; actual playback duration remains null. Order is encoded faithfully, but a player can shuffle, skip unsupported tracks or choose its own rendering behavior.
  • Both complete downloads are checked before either mode returns: XSPF at most 600,000 UTF-16 units and UTF-8 bytes; JSON at most 800,000 of each. Copy contains the small current summary. JSON includes source paths, the selected filename, authored metadata and exact original input, so review it before sharing.
  • Relative references depend on the playlist’s final base location. Moving media, unsupported codecs, player settings and network availability can still prevent rendering. No external player import, real audio or universal conformance certificate is provided by this builder. Official linked schema availability and independent parser checks are separate engineering evidence.
  • Input is not automatically saved. Pending reads reject on pagehide and late bytes cannot restore that failed result. Reset/rerun use the existing site generation guard to discard old UI output; they do not promise to abort the underlying browser read immediately.

Common questions

Why are spaces and percent characters changed in a relative location?

A playlist location is a URI, while your sourceType relative-path value is a literal filename path. The builder encodes each filename segment once and keeps directory slashes. For example, a literal space becomes %20 and an existing percent sign becomes %25. The JSON table shows both spellings.

Does downloading the playlist include my audio or video files?

No. The file carries references, order and your optional metadata. Put it beside the intended relative path root, or provide canonical HTTP(S) resources, then manually check the result with your supporting application.

Why does a repeated track remain in the file?

A sequence can intentionally revisit the same resource. Each entered row keeps its own ordinal and metadata. The builder does not sort, merge or deduplicate your authored list.

Keep going with related tools

All files →