[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"project-13764173":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":45,"post_text":49,"what":50,"said":76,"maker_in_thread":213,"shape":215,"grid":220,"attempts":459,"same_week":460,"maker_shows":411,"maker_hidden":489,"reader_version":490,"card":491},"13764173","Universal Playlist Format (UPL)","Tired of the non-portability of my playlists, I wrote my own format","title","Show HN: Tired of the non-portability of my playlists, I wrote my own format","http:\u002F\u002Funiversalplaylist.stavros.io\u002F","universalplaylist.stavros.io","stavros",1488380684,2017,144,101,268,2242,12,"notable","languages","playlist file format","library",[24,25,26,27],"playlist format","portable playlists","m3u alternative","playlist interoperability","curious",-0.263,{"positive":31,"neutral":32,"mixed":33,"critical":34},6,60,1,21,88,{"design":37,"execution":40,"idea":41,"docs":43,"performance":44},{"positive":38,"critical":39},0,4,{"positive":38,"critical":33},{"positive":31,"critical":42},15,{"positive":38,"critical":38},{"positive":38,"critical":33},[46,46,46,46,46,47,46,33,46,46,48,47,46,46,46,46,46,46,33,33,46,46,47,46,48,46,46,33,48,33,33,46,47,46,33,33,46,46,46,47],3,2,5,null,{"problem":51,"audience":49,"pricing":49,"motivation":61,"time_to_build":49,"stack":65,"openness":74,"stage":75,"team_size":74},{"value":52,"source":53,"evidence":54},"Playlists break when files move or metadata changes; no portable playlist format","maker",[55,57],{"id":56},"post",{"id":58,"by":59,"text":60},"13767282","jstimpfle","If I understand correctly, you want to make playlists portable by associating each item with enough metadata to allow identification even when some metadata, such as filepath,…",{"value":62,"source":53,"evidence":63},"Frustration with non-portable playlists",[64],{"id":56},[66],{"value":67,"source":68,"evidence":69},"YAML","commenter",[70],{"id":71,"by":72,"text":73},"13765380","StavrosK","Not yet, but great idea, I've added it, thank you! YAML is a superset of JSON, so the file can look like JSON if you want, although that's not mandatory. I don't think there are…","unknown","prototype",{"praise":77,"objections":89,"requests":134,"questions":164,"alternatives":183},[78,85],{"value":79,"source":68,"evidence":80},"Good idea that could reduce duplicated effort for playlist transfer tools",[81],{"id":82,"by":83,"text":84},"13765613","ianwalter","This is such a good idea. If nothing else, third party tools that people make to transfer playlists between platforms could standardize on this and, in doing so, would reduce…",{"value":86,"source":68,"evidence":87},"Useful for consolidating playlists across music services",[88],{"id":82,"by":83,"text":84},[90,105,116,127],{"value":91,"source":68,"evidence":92},"XKCD 927: yet another standard adds to the mess",[93,97,101],{"id":94,"by":95,"text":96},"13765194","qntmfred","My own format = https:\u002F\u002Fxkcd.com\u002F927\u002F",{"id":98,"by":99,"text":100},"13765707","partycoder","XKCD predicted this. https:\u002F\u002Fxkcd.com\u002F927\u002F",{"id":102,"by":103,"text":104},"13768257","lutusp","Title: \"Tired of the non-portability of my playlists, I wrote my own format.\" Subtitle: \"The Universal Playlist Format\" Analysis: https:\u002F\u002Fxkcd.com\u002F927\u002F",{"value":106,"source":68,"evidence":107},"XSPF already exists and could be extended instead",[108,112],{"id":109,"by":110,"text":111},"13765288","discreditable","What's wrong with xspf? Couldn't you just extend that with more attributes (which legacy apps could ignore)? https:\u002F\u002Fen.m.wikipedia.org\u002Fwiki\u002FXML_Shareable_Playlist_Format",{"id":113,"by":114,"text":115},"13765987","jbk","Yes, please! We have enough playlists formats to support already (and most of them are half-baked\u002Fhalf-broken already). There is no good reason to not reuse and extend xspf.…",{"value":117,"source":68,"evidence":118},"YAML is too complex and causes interoperability problems",[119,123],{"id":120,"by":121,"text":122},"13765516","masklinn","> I don't think there are many languages that don't support YAML these days YAML is a big and complex format though, libyaml's header is bigger than the entirety of libtoml. I…",{"id":124,"by":125,"text":126},"13766277","TazeTSchnitzel","Another consideration is that yaml's sheer complexity creates more possibilities for interoperability issues. No two parsers for JSON behave identically, let alone for something…",{"value":128,"source":68,"evidence":129},"Music players and services have no incentive to support it",[130],{"id":131,"by":132,"text":133},"13765195","a2tech","I'd love something like this, but I don't see any upside for iTunes or Spotify to support it. Anything that makes it easier for a customer to switch to a competitor is something…",[135,146,153,160],{"value":136,"source":68,"evidence":137},"Use JSON instead of YAML",[138,142],{"id":139,"by":140,"text":141},"13765339","hawski","Are relative paths supported? Probably in this day and age it would have better chance at adoption if it would be a JSON file. It's just network effects.",{"id":143,"by":144,"text":145},"13767345","zeveb","> Probably in this day and age it would have better chance at adoption if it would be a JSON file. It's just network effects. And here I was feeling badly for thinking that it'd…",{"value":147,"source":68,"evidence":148},"Support multiple tracks in one file such as DJ mixes",[149],{"id":150,"by":151,"text":152},"13769905","joshka","One of the key things I've looked for in a playlist format for many years is the ability to handle files that contain multiple tracks. My main example of this is continuous DJ…",{"value":154,"source":68,"evidence":155},"Add converters from other playlist formats",[156],{"id":157,"by":158,"text":159},"13765212","supermdguy","This looks interesting. Do you have any plans to create converters to convert to UPL from other formats?",{"value":161,"source":68,"evidence":162},"Support relative paths",[163],{"id":139,"by":140,"text":141},[165,172],{"value":166,"source":68,"evidence":167},"Why MD5 and SHA1 in the example",[168],{"id":169,"by":170,"text":171},"13765254","enimodas","why does the example have md5 and sha1?",{"value":173,"source":68,"evidence":174},"Why not standardize on an audio fingerprint",[175,179],{"id":176,"by":177,"text":178},"13767289","derefr","That sounds like a noble goal, but in a \"modern\" format designed for the same thing, I'd expect the role of the \"identification key\" for the files to be played by a…",{"id":180,"by":181,"text":182},"13767306","TTPrograms","I think a few people have open-sourced various audio fingerprinting algorithms. Perhaps we should standardize around one and enable real UUID for audio files? That seems to be…",[184,191,195,199,206],{"value":185,"source":68,"evidence":186},"XSPF",[187,188],{"id":109,"by":110,"text":111},{"id":189,"by":72,"text":190},"13765350","Nothing's wrong per se (and it has roughly the same goals as mine), it's just that it's pretty much the XML equivalent of M3U, and doesn't have any provisions for stronger…",{"value":192,"source":68,"evidence":193},"M3U",[194],{"id":189,"by":72,"text":190},{"value":196,"source":68,"evidence":197},"Cue sheets",[198],{"id":150,"by":151,"text":152},{"value":200,"source":68,"evidence":201},"m-Tags",[202],{"id":203,"by":204,"text":205},"13785231","MobesMobes","It's not trying to solve the exact same problem, but m-Tags is also using metatags stored in a seperate file. http:\u002F\u002Fwww.m-tags.org\u002F",{"value":207,"source":68,"evidence":208},"Magnet URI",[209],{"id":210,"by":211,"text":212},"13768030","geocar","Do you know about magnet uri[1]? magnet:?dn=Anciients%2FFollowing%20the%20Voice&xt.1=urn:sha1:…",{"comments":38,"answered":38,"key":214},[],{"commenters":216,"max_depth":217,"maker_replies":38,"first_comment_mins":218,"lifespan_hours":219},48,9,92,52,[221,223,226,229,232,236,238,241,245,247,248,249,252,253,256,259,261,263,266,269,270,273,275,278,279,282,284,288,291,294,297,300,302,304,306,308,310,312,314,316,320,322,324,326,327,328,330,332,333,335,338,340,342,344,346,348,350,353,355,356,358,360,362,366,368,371,373,375,377,379,383,385,389,390,392,394,396,398,402,405,407,409,413,416,418,420,422,425,428,430,433,436,439,441,443,445,448,450,453,455,457],[58,38,46,222,59,38],"project\u002Fneutral\u002Fdesign",[224,38,46,225,72,38],"13768168","project\u002Fmixed\u002Fdesign",[227,33,46,222,228,38],"13766519","autocracy",[230,33,46,231,72,38],"13766634","project\u002Fneutral\u002Fexecution",[233,33,46,234,235,38],"13767572","project\u002Fneutral\u002Fidea","nbadg",[237,33,46,234,72,38],"13768200",[239,33,46,234,240,38],"13773626","FractalNerve",[242,33,38,243,244,38],"13767953","commenter\u002Fneutral\u002Fnone","rout39574",[246,33,38,243,72,38],"13768388",[109,47,46,234,110,38],[189,47,46,234,72,38],[250,47,46,234,251,38],"13766729","lucasgonze",[176,47,46,234,177,38],[254,47,46,231,255,38],"13767621","nosuchthing",[257,47,33,258,251,38],"13768044","project\u002Fcritical\u002Fexecution",[260,47,46,231,255,38],"13768234",[262,47,46,234,177,38],"13768905",[264,47,46,265,72,38],"13769142","project\u002Fneutral\u002Fnone",[267,47,33,268,251,38],"13768017","project\u002Fcritical\u002Fidea",[113,47,33,268,114,38],[271,47,46,272,72,38],"13766018","project\u002Fneutral\u002Fdocs",[274,47,38,243,251,38],"13766805",[276,47,38,243,277,38],"13766837","jcoffland",[150,46,46,234,151,38],[280,46,46,234,281,38],"13771153","jason_s",[283,46,46,222,72,38],"13773290",[285,39,48,286,287,38],"13765921","project\u002Fpositive\u002Fidea","woodruffw",[289,39,46,290,72,38],"13765971","maker\u002Fneutral\u002Fnone",[292,48,33,268,293,38],"13768185","rsync",[295,48,46,234,296,38],"13768323","choward",[298,48,46,234,299,38],"13775454","ibizaman",[301,48,46,265,72,38],"13768365",[303,48,46,265,299,38],"13775431",[305,31,46,222,144,38],"13767431",[307,31,46,234,251,38],"13768102",[309,31,46,234,72,38],"13768352",[311,31,46,234,144,38],"13769301",[313,31,46,234,72,38],"13770353",[315,31,48,286,72,38],"13768598",[317,318,33,268,319,38],"13767968",7,"djrogers",[321,318,38,243,72,38],"13768274",[180,323,46,234,181,38],8,[325,323,46,234,72,38],"13768301",[139,217,46,222,140,38],[71,217,46,222,72,38],[120,217,33,329,121,38],"project\u002Fcritical\u002Fdesign",[331,217,46,222,72,38],"13766066",[124,217,33,329,125,38],[334,217,46,222,72,38],"13773297",[336,217,33,329,337,38],"13766131","hammerandtongs",[339,217,46,222,72,38],"13766167",[341,217,46,222,337,38],"13766332",[343,217,46,222,72,38],"13766538",[345,217,46,222,337,38],"13766682",[347,217,46,222,72,38],"13782691",[349,217,46,222,121,38],"13766745",[351,217,33,329,352,38],"13768751","bostonvaulter2",[354,217,46,222,72,38],"13773387",[143,217,46,222,144,38],[357,217,46,222,72,38],"13768307",[82,359,48,286,83,38],10,[361,359,48,286,72,38],"13766516",[363,364,46,222,365,38],"13765598",11,"chadlavi",[367,18,46,231,72,38],"13768869",[369,18,46,231,370,38],"13769038","adamdecaf",[372,18,38,243,72,38],"13770345",[374,18,46,231,370,38],"13774535",[376,18,46,231,72,38],"13774734",[131,378,33,268,132,38],13,[380,378,38,381,382,38],"13765263","other\u002Fneutral\u002Fnone","snissn",[384,378,48,286,72,38],"13765397",[386,387,38,381,388,38],"13768603",14,"skookumchuck",[210,42,46,234,211,38],[391,42,33,268,72,38],"13768402",[393,42,33,268,211,38],"13773492",[395,42,33,268,72,38],"13773827",[397,42,46,234,211,38],"13781215",[399,400,33,268,401,38],"13765619",16,"rocky1138",[403,400,46,265,404,38],"13766023","Moru",[406,400,38,243,401,38],"13766108",[203,408,33,268,204,38],17,[410,411,46,272,412,38],"13765743",18,"cmpb",[414,411,46,415,72,38],"13766059","maker\u002Fneutral\u002Fdocs",[157,417,46,231,158,38],19,[419,417,46,290,72,38],"13765409",[102,421,33,268,103,38],20,[423,34,33,268,424,38],"13766350","_pmf_",[426,34,33,427,228,38],"13766535","project\u002Fcritical\u002Fperformance",[94,429,33,268,95,38],22,[431,429,38,381,432,38],"13765338","rafaelgarrido",[434,429,38,243,435,38],"13765426","bb88",[437,429,48,286,438,38],"13765491","alnitak",[440,429,33,268,277,38],"13766902",[442,429,38,381,435,38],"13768015",[444,429,46,234,72,38],"13765438",[446,429,46,272,447,38],"13765507","pavel_lishin",[449,429,46,290,72,38],"13765631",[451,429,38,381,452,38],"13772938","Jaruzel",[169,454,46,272,170,38],23,[456,454,46,415,72,38],"13765432",[98,458,33,268,99,38],24,[],[461,466,471,475,480,485],{"id":462,"name":463,"points":464,"category":465},"13763469","Gutenberg",305,"dev_tools",{"id":467,"name":468,"points":469,"category":470},"13729301","PDFLayoutTextStripper",283,"data",{"id":472,"name":473,"points":474,"category":465},"13762077","BootShellCredentialProvider",264,{"id":476,"name":477,"points":478,"category":479},"13762032","Lumix Engine",260,"games",{"id":481,"name":482,"points":483,"category":484},"13724118","Hasura",259,"infrastructure",{"id":486,"name":487,"points":488,"category":470},"13738051","PumpkinDB",190,false,"v2",{"id":492,"name":5,"line":6,"ai":489,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":493,"top":18,"kw":494,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":495,"url":9,"mix":496,"praise":79,"objection":91,"sub":21},13764173,-0.26,[24,25,26,27],"3333323133523333331133235331511323113332",[31,32,33,34],1794036553137]