Please add support for https://veeps.com/  <--high quality live concert streams

Checklist

[x] I'm reporting a new site support request
[x] I've verified that I'm running youtube-dl version 2<IP_ADDRESS>
[x] I've checked that all provided URLs are alive and playable in a browser
[x] I've checked that none of provided URLs violate any copyrights
[x] I've searched the bugtracker for similar site support requests including closed ones

Example URLs

Single video: https://www.youtube.com/watch?v=BaW_jenozKc
Single video: https://youtu.be/BaW_jenozKc
Playlist: https://www.youtube.com/playlist?list=PL4lCao7KL_QFVb7Iudeipvc2BCavECqzc

Description

WRITE DESCRIPTION HERE
I'm trying to Download Streaming Video that's Divided into Parts in XHR Format.
I don't see any files that end with .m3u8
The concert I'm trying to download has sequential files that run from 0.ts to 2452.ts  (the concert runs 2:43:28)
Here are some example URLs that's I've tried to add to youtube-dl.exe
https://jessemalin.veeps.com/stream/80d09cea10f9
https://fn0pgvgj5615mhof01jc9652a.litix.io/
blob:https://jessemalin.veeps.com/c82b2f01-5915-49a9-8e4f-b66ec7ca04e4
Here are the first, "middle" and last files from the sequence:
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/ipAtw008lecNKzC6Y02jZh38jhCShD01F00BKu5v2Kdq3zN5AwRSA2stzinYxKlUtmdShoKDFYfH5e9dtJRdgqQzpGmhfXfNdAOF/0.ts?skid=default&signature=NWVmNThlZTBfNGUzN2VlOTdkNzBiOTZlODg3OTJhNzc2NGI4MzMwMzMyYjYyNDliN2ZiMzE0NjcxMjMwMTc0Nzk1YzhkZGE3Mg==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/ipAtw008lecNKzC6Y02jZh38jhCShD01F00BKu5v2Kdq3zN5AwRSA2stzinYxKlUtmdShoKDFYfH5e9dtJRdgqQzpGmhfXfNdAOF/1226.ts?skid=default&signature=NWVmNWI5MTBfODU2MDlkZTY5OWZlMDdiZWNiOGEyYmQ3MDExZWY3ZWNhNjNkMjBhNWY1MTZkMmNiNWI2NzhjZjkzZDYxYmRlMQ==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/ipAtw008lecNKzC6Y02jZh38jhCShD01F00BKu5v2Kdq3zN5AwRSA2stzinYxKlUtmdShoKDFYfH5e9dtJRdgqQzpGmhfXfNdAOF/2452.ts?skid=default&signature=NWVmNThlZTBfYTZiMzgwMWFhZTE5Mzg3OTljMDZiMjM2ZmVmYjRmNzBjNzE1ZTllYTczNGYzOTI0ZGQ3ZmVlYWY1ODE3YjgwNg==
This was a paid concert, but I paid for it, so I'd like to be able to download it, not just watch it. Thanks!

Those last URLs 403 now due to an expired signature; removing the signature from the URL also causes a 403. None of the urls that you have added to youtube-dl contain this signature, so I imagine the signature is user-specific and created when a user requests the video, with a finite lifetime. I'll try to take a deeper look into this tomorrow and see if it is possible, but it looks like there needs to be some way of generating a valid signature in order to be able to request the stream.

I'm a fan of musician Jesse Malin, but many other artists use this "veep" platform, including Brandi Carlile. Jesse has been performing concerts live on Thursday evenings, and the replay is available to stream until late Saturday evenings. The average size of each file in the live stream is approx. 1100 KB, but the the average file size of the replay files are only 725 KB. There's a noticeable drop in quality. I'd love to know how to grab the higher quality stream from the replay. The cost for access is as low as $10 per concert. By the time you "take a deeper look," the stream will be gone, so I took the liberty of grabbing a string of URLs from the most recent concert for you to see. To my laymen's eyes, they all seem to have unique signatures...making grabbing them much more difficult. Until a bulk download method is perfected, I've been double-clicking on each URL (.ts file) and downloading them individually. Each concert contains approx. 2000 .ts files, so as you can imagine, this is not fun. Then I join them using TSSplitter (Joiner). During the last concert, I grabbed nearly all of the files during the live broadcast, except for 3 groups of 50. I wasn't happy when I went back to grab them during the replay and I noticed the smaller file sizes...which don't match perfectly to the larger files (the audio is seamless, but the video skips). I haven't checked, but I'm guessing it's the difference between 1080p and 720p. Also, this video can't be played with most of my standard video players, but it does play with VLC media player. What's up with that?
Here's the URL:
https://jessemalin.veeps.com/stream/75193060dd58
Here's are some sample sequential files:
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/260.ts?skid=highwinds&e=1593882000&st=031d9a3bd68892b4bfc12a770fb8e598
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/261.ts?skid=highwinds&e=1593882000&st=222a210ce6d8cfb6cf5f0660ac6fdeaa
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/262.ts?skid=highwinds&e=1593882000&st=27c5ebfe92d8cc749212a13d69406e0b
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/263.ts?skid=highwinds&e=1593882000&st=aff881c1c679967fb54da4ce550042cf
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/264.ts?skid=highwinds&e=1593882000&st=2ce38fd18d6ed5344a1544c859d62000
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/265.ts?skid=highwinds&e=1593882000&st=726e6a8aeb5e04e155e9481f17a5bca0
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/266.ts?skid=highwinds&e=1593882000&st=fc7160f6c72a4957bab6db4ed4109ba4
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/267.ts?skid=highwinds&e=1593882000&st=e8a844bc5dc2209e9e251cd14017faf9
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/268.ts?skid=highwinds&e=1593882000&st=4b45340fa732002bcdbe81fcbe675f47
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/269.ts?skid=highwinds&e=1593882000&st=6944fab671f30080ed76223bc0a80add
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/270.ts?skid=highwinds&e=1593882000&st=efd4bfd7f0a0ec87dd4ed4c73a36e5b4
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/271.ts?skid=highwinds&e=1593882000&st=fe6414e42e4dedc2478a5457ee057bea
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/272.ts?skid=highwinds&e=1593882000&st=e8695494b9f74dc07a0e2b60f40da9e5
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/273.ts?skid=highwinds&e=1593882000&st=5a8bf24536ca327a764dd05729b42a73
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/274.ts?skid=highwinds&e=1593882000&st=eaa6c177d5d6aaeb6980c60d2e2439f6
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/275.ts?skid=highwinds&e=1593882000&st=a67907a92cef33e1dc4b8d7e8c91aca4
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/276.ts?skid=highwinds&e=1593882000&st=1e5729182a973019b431ed4905332bc6
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/277.ts?skid=highwinds&e=1593882000&st=574ac5ba4db94e1ba5ed22789831c0a7
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/278.ts?skid=highwinds&e=1593882000&st=9a2f7ab71f1b8828afb4807669230fb8
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/279.ts?skid=highwinds&e=1593882000&st=641e3f65b645d1096505a441af43df01
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/280.ts?skid=highwinds&e=1593882000&st=df6e69b8ff9abfdf296fa38231a00357
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/281.ts?skid=highwinds&e=1593882000&st=bf98312c02c2be3c2da8cda45fd78a95
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://ps8.pndsn.com/v2/subscribe/sub-c-84ee6f14-961d-11ea-a94f-52daec260573/jessemalin_75193060dd58%2Cjessemalin_75193060dd58_artist/0?heartbeat=300&tt=15932771060886169&tr=2&uuid=c666329bd069&pnsdk=PubNub-JS-Web%2F4.27.6&l_hist=227
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/282.ts?skid=highwinds&e=1593882000&st=b246a5e0ef13fffd7abe8555e1b7ac24
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/283.ts?skid=highwinds&e=1593882000&st=dcb0381eac7c696960daa5e250d7149d
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/284.ts?skid=highwinds&e=1593882000&st=4a1954479320fc1b4b8c10752dd433ef
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://c9q7k6z9.map2.ssl.hwcdn.net/v1/chunk/KsANdJ8ZZ02g9DtlGrZa02dqTDwBvHLK1GjQwDObj7KL2gzJvyZCBIEKmwjgYmIqLsbtLXii02PcFTrURZIZBPU6pvGpgaSoaP01/285.ts?skid=highwinds&e=1593882000&st=508732489964bb766571770f049377a5
Be sure to notice the 2nd URL (bold) after 281.ts
Let me know if I can provide any additional info for your research. Thanks!

Are these the URLs that get requested by the web browser upon viewing? The litix.io URLs seem to just be 1x1 GIF images for some reason. All of the URLs with .ts files appear to work.
Also, as for why VLC can play it and other media players can't - I'm not 100% sure, but it is probably something to do with the container format and the codecs used. VLC, in my experience, is more tolerant to weird formats than the default windows media player, for example. If you want to make it play on more video players, I would try re-encoding it to something like H.264 video with AAC audio on a .mp4 container (a pretty standard combination IIRC) using ffmpeg or a similar tool.
When I go to https://jessemalin.veeps.com/stream/75193060dd58, it asks to me to login. I've tried creating an account, and after logging in it takes me to the webpage to buy tickets without showing any info about the stream. It seems that it serves a different page depending on if you have purchased tickets already or not, so it looks like we need to figure out how to authenticate a user on that site. I can't find anything relating to the .ts URLs on my version of the page. I'm not sure how the youtube-dl community normally goes about site support requests that require authentication due to the sensitivity of information; while I've been developing software for a while, this is one of my first issues on GitHub, so I'm not entirely sure how these types of things are handled.
Finally, I'm still puzzled at how the signatures are determined; it might be some client-side code that runs when you are viewing the stream live, or it might send another HTTP request to some server to get the signatures.

Yes, these are the URLs that get requested by the web browser.
You would know better than me why the 1x1 gif images alternate with the .ts files (but their pattern seems more random).
I'm guessing that the 1 odd file (after 281.ts) re-verifies my subscription?
I'm assuming it's too late to buy a ticket for the previous Jesse Malin concert, and I'm not expecting you to buy one. Tickets for next Thursday's show go on sale on Sunday (again, I'm not asking you to buy one). On the other hand, you might find an artist/band with an upcoming concert for whom you would like to buy a ticket:
https://veeps.com/#livestreams
Some artists leave their streams on the site indefinitely.

I would gladly share my login info with you, but not here in a public forum. Just promise me that you won't change my password and lock me out of my own account :-)  (I can always change my password later after you've finished your investigation). How can I contact you privately? Maybe you could setup a temporary gmail account, post the address here, and then discard later?
Like you, I'm puzzled at how the signatures are determined, but this is really over my head. I can follow instructions to use software you've developed, but I don't possess the knowledge to design the software myself.
Thanks for your help!
poochbeast57

Alright. If you feel comfortable with doing that, I've created a temporary email address at dunnousernametmp00 (at) gmail.com.
The address is brand new and there isn't a recovery email or phone number associated with it; I generated a fresh password for it, but I'll be sure to delete the account later anyway. I won't change your password.
After I get an email I'll probably edit the address out of this post.
Thanks,
dunnousername

OK. I just replied to you at your temporary gmail address. Let me know if you received my reply (either here or directly).
Thank you!
poochbeast57

Yes, I've gotten it. I'll take a look at it now. Thanks

Okay, update - I don't know how, but after adding breakpoints on XHR requests using console, I was able to get it to request an M3U8 file. I opened the file with VLC and it appears to contain the entire stream, with all of the signatures. Right now I'm trying to figure out how the file was requested.
https://manifest-gce-us-east1-production.global.ssl.fastly.net/vEskNnyPa9go9GOoiPWjkkzIiXk8fRNZ01VhyDpuQRTygRaxVTteLtM8KLYEeBim0002VFxvx7q02ZGir8htZ2LlO7mdbm6rrGUX/rendition.m3u8?cdn=highwinds&expires=1593907200&skid=default&signature=NWYwMTE4MDBfMjJmZDQzNGE0NTZjZjM4YzUzYjM5NTU0OTVkMDNmZTQ4ZGVmZDM4NjI5YjRmMDdkNWY3ZmI4ODE3ZTQ1M2JiYw==

Alright, I think I've figured it out, minus only the authentication. I'm putting it here in case I am unable to figure this out for some reason, so that someone else can build off of this.
If I take the _veeps_session_production cookie from the browser and download the page using wget or any other tool, I can get the same page, but without evaluating js (it ignores user agents as well). Then, one of the div elements (div[data-react-class="containers/StreamEvent"] should select it) contains a ton of html-escaped json in the data-react-props attribute. If I unescape and parse that json object as, say, obj, then obj.event.stored_stream_asset is the m3u8 file. This file is hosted on stream.mux.com, and inside of it are links to nested m3u8 files containing the actual ts files. You can actually run the stream.mux.com m3u8 file from VLC, too. The only challenge now is getting a session cookie.

I'm having trouble with figuring out how getting a session token works; I can't replicate it with wget exactly the way it would work in a browser. It's getting kind of late here, however I can probably figure out how this part of the process works with my own account later/tomorrow.
To recap:

I haven't figured out how to log in to veeps yet, but this part most likely doesn't require you to have purchased tickets
logging into veeps yields a session cookie stored in _veeps_session_production.
requesting a stream page with this session token when tickets have been purchased gives a page with a video player
on this page with the player, a div element given by css selector div[data-react-class="containers/StreamEvent"] has an attribute data-react-props that contains an html-escaped json object
inside this json object, object['event']['stored_stream_asset'] contains a url to an m3u8 playlist containing several more playlists, most likely for different resolutions.

Okay, update - I don't know how, but after adding breakpoints on XHR requests using console, I was able to get it to request an M3U8 file. I opened the file with VLC and it appears to contain the entire stream, with all of the signatures. Right now I'm trying to figure out how the file was requested.
https://manifest-gce-us-east1-production.global.ssl.fastly.net/vEskNnyPa9go9GOoiPWjkkzIiXk8fRNZ01VhyDpuQRTygRaxVTteLtM8KLYEeBim0002VFxvx7q02ZGir8htZ2LlO7mdbm6rrGUX/rendition.m3u8?cdn=highwinds&expires=1593907200&skid=default&signature=NWYwMTE4MDBfMjJmZDQzNGE0NTZjZjM4YzUzYjM5NTU0OTVkMDNmZTQ4ZGVmZDM4NjI5YjRmMDdkNWY3ZmI4ODE3ZTQ1M2JiYw==

I'm glad I was able to play a small role (albeit very small) in helping you to figure out help this works. I understand about half of your explanation. ;-)
I'm sure you know this already, but the video stream produced by this link is only 480x270. I'm assuming the higher resolution files are there. My questions are "where?" and "how do we find them?"

I'm having trouble with figuring out how getting a session token works; I can't replicate it with wget exactly the way it would work in a browser. It's getting kind of late here, however I can probably figure out how this part of the process works with my own account later/tomorrow.
To recap:

I haven't figured out how to log in to veeps yet, but this part most likely doesn't require the user to have purchased tickets
logging into veeps yields a session cookie stored in _veeps_session_production.
requesting a stream page with this session token when tickets have been purchased gives a page with a video player
on this page with the player, a div element given by css selector div[data-react-class="containers/StreamEvent"] has an attribute data-react-props that contains an html-escaped json object
inside this json object, object['event']['stored_stream_asset'] contains a url to an m3u8 playlist containing several more playlists, most likely for different resolutions.

I should have read all of your comments before responding to your first comment. I'm glad you were able to find playlists for different resolutions. I don't mind supporting the artists and buying a ticket. I just want to know how to capture the stream. I don't fully understand all of your instructions. If you're seeing this before you go to bed, is there any chance you could share a link to the highest resolution file, so I can download it before they remove it (if indeed they really do remove it). Also, I wonder if there's a way to find the stream(s) from the previous concert(s)?
Thanks again for all your help!
Poochbeast
PS - Is it too much to ask for you to create a tutorial video? Just askin'? ;-)

I'm planning on adding this to youtube_dl through a pull request; I think I can get this done relatively quickly (next few days likely). A video tutorial won't be necessary, as it'll be available in a youtube_dl update once I get it sorted out. It's also somewhat hard to do by hand, so it'd be easier to do through youtube_dl.
The M3U8 is https://stream.mux.com/wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.m3u8
However, when I play it in VLC, it seems to be low resolution; This version is supposed to be 1920x1080; I can't tell if it actually is or not: https://manifest-gce-us-east1-production.global.ssl.fastly.net/9VnfMCJ02WjWwgOS01hZWkYM89ZCO00T8sWZ2WYzdAfEwqysblWuDfu47eXHkgUV31sXDmPHzYqwW5Ae02DZbDXEA7m0200uQVsOnW/rendition.m3u8?cdn=fastly&expires=1593914400&skid=default&signature=NWYwMTM0MjBfNmY0ZTMyMzc5YmRhNGE2MTFjNTNhYjJjODViNGIxNGViMjNjZTkwMGZjNTUzOGJkM2FmOTFjNGEyMzA2OGE1MQ==

Excellent! (re: your plan to add it to youtube-dl). I can't wait! Yes, this version is definitely 1920x1080. It will be terrific to be able to download all of the .ts files in bulk rather than one-at-a-time! LOL! I wish I could figure out how to do that now. It's really sleazy of veeps to stream the concert in 1080p and then replay it in only 720p. Thanks again!

I know I said I was going to bed like 3 hours ago, but I realized it'd be much harder to test the script after tonight (and I also had nothing better to do); I wrote a module so that youtube_dl could login and download a stream from veeps. (I'm actually, 100% going to bed now). I'm currently testing it on the 1920x1080 version; it's downloading all the .ts files and re-encoding them, so needless to say it is taking a while and I'm going to leave it running overnight. Tomorrow, if all is well, I'll push the code back to github and try to get it merged into the official repo. A few things of note, which are probably non-issues but might be significant to contributors reading this that are more knowledgeable on youtube_dl than I am:

I'm willing to revise my code if it doesn't meet style guidelines; this is the first contribution I've made to a project of this size, so I'm pretty new to this.
By default, it tries to download im 480x270, as it believes this is the best quality for some reason. I'm not sure if there is anything I can do about this; however, other resolutions can be listed with -F and then selected with -f. I think -f 4755 worked for me but I can't remember the exact number and I'm not on my desktop.
You'll need to provide --username and --password to youtube-dl. Make sure if your password contains special characters, such as exclamation points, you prepend them with a backslash.
When I create the pull request I'll reference it in this issue.

If you want to continue working on this, some artists (like Brandi Carlile) leave their streams on the site to be viewed "On Demand" with no expiration date.
If you would like, I could buy a ticket for one of her past concerts, and you can view it through my account. I'm sure it would be best to try other artists just to be sure there aren't any anomalies between artists' streams.
Also, since my password contains no special characters, I can create one that does.  Let me know if you want me to do this.
As I suspected, even though the link to the Jesse Malin concert has now been removed from the front end of veeps, we can still download it because we know the server address. I wonder if it's possible to use a "list" command to find other hidden concerts on the server? I'd love to get his previous show (as well as some shows by some other artists).

I don't think different channels will cause issues; however, if you'd like, I can try additional channels.
A password containing special characters isn't an issue with youtube_dl or my addition; it is an issue with the command line shell, so it is the case for every program. You don't need to create a password with special characters.
It wouldn't be possible to list other concerts on the server; if that were possible, anyone could download any streams without buying tickets, and this is certainly something veeps developers have considered.

I bought a ticket to the Brandi Carlile concert from June 1. It's in my account if you want to check it out.
PS - I used VLC to stream and record the Jesse Malin concert in real time using the 1920x1080 link you provided, but doesn't VLC re-encode the stream? While it looks good, I'm sure it's still even better to be able to download and join the .ts files (which youtube-dl should provide for this site when you've completed your update).

VLC doesn't re-encode the stream; in fact, it uses the raw .ts files to play the video. If you are recording it, though, it might re-encode it, but it is most likely set to be visually lossless by default. In short, it shouldn't make a difference.
I'll test the June 1st stream to make sure everything works. I'll also include the logs, minus sensitive data, in the pull request.

Yes, I was referring to recording with VLC. I'm just learning Python, but I still don't understand it well enough to add your Veeps extractor. I guess I'll wait for the update.

Well, if you want to try using my branch, and you have python installed, you can download my branch here before it merges, so you don't have to wait to update: https://github.com/dunnousername/youtube-dl/tree/veeps
Make sure to git checkout veeps afterwards in that directory to get the right branch.
Once you download it, you can change directory into the folder and run python -m youtube_dl and it should run my version. If it doesn't detect stream URLs it might be conflicting with the one installed through pip, so try uninstalling the pip version of youtube_dl.
You can use it like you would with downloading any other stream, except pass --username [email] --password [password] too.
For the June 1st stream for example, run python -m youtube_dl --username [email] --password [password] https://brandicarlile.veeps.com/stream/e5ccef3d7eba -f 2516 to download the highest resolution version (720p)

(Occasional Veeps user here.)
Just some technical stuff to explain: Once you have the link to a working m3u8 playlist (or youtube-dl does), the rest can be handled by youtube-dl. Download the m3u8 and check its text contents, you will see links to new playlists with the various resolutions. Nothing more to worry about.
This is how yotube-dl already can handle it (if you don't need a login, or special cookies/links):
[barsnick@paradise youtube-dl]$ youtube-dl -F https://stream.mux.com/wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.m3u8                                             [generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Requesting header
WARNING: Could not send HEAD request to https://stream.mux.com/wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.m3u8: HTTP Error 405: Method Not Allowed
[generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Downloading webpage
[generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Downloading m3u8 information
[info] Available formats for wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig:
format code  extension  resolution note
697          mp4        480x270     697k , avc1.64001e, mp4a.40.2
994          mp4        640x360     994k , avc1.64001f, mp4a.40.2
1640         mp4        960x540    1640k , avc1.640020, mp4a.40.2
2516         mp4        1280x720   2516k , avc1.640020, mp4a.40.2
4755         mp4        1920x1080  4755k , avc1.64002a, mp4a.40.2 (best)

youtube-dl of course still requires explicit veeps support to figure out the playlist URI, the title, and so on (which is what @dunnousername programmed, I guess - if so, good job!).
Regarding re-encoding: Like your manual downloading of the .ts segments, you can let youtube-dl do that for you, and even correctly assemble them in the correct order without any reencoding or even remuxing:
[barsnick@paradise youtube-dl]$ youtube-dl --hls-prefer-native --fixup never https://stream.mux.com/wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.m3u8
[generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Requesting header
WARNING: Could not send HEAD request to https://stream.mux.com/wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.m3u8: HTTP Error 405: Method Not Allowed
[generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Downloading webpage
[generic] wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig: Downloading m3u8 information
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 1843
[download] Destination: wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig-wKk6rMRgprh44VympfJo9jHxI4q01mcuod01UCavzPPig.mp4
[download]   0.1% of ~3.71GiB at  4.86MiB/s ETA 17:48

(Ignore the warning here.)
The resulting file is am MPEG-TS file, which many players won't support (especially if you leave the extension ".mp4", which is incorrect, but shouldn't matter for smart tools). You can re-mux (like repackage) that into an actual MP4 without any loss by reencoding, e.g. with ffmpeg (as youtube-dl also does internally for merging, fix-upping, and so on):
ffmpeg -i blabla.mp4 -c copy proper_file.mp4

(assuming the first file is actually not an MP4, but MPEG-TS).

Is it my imagination, or has veeps changed their streaming protocols? Here are some samples from this week's Jesse Malin concert. To my untrained eyes, every file looks identical:
https://fn0pgvgj5615mhof01jc9652a.litix.io/
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA=
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA=
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA=
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA==
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA==
https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA==

Request URL: https://manifest-gce-us-east1-production.global.ssl.fastly.net/lAI8saZoyEJZ02FRghxdRIlP1dYHt22ZepaKA007ind9xPN902CzBuHoHSVCJPPn6F7iD9n2FB2029ou02pCvsjuHB0129Nu6OmQt7/rendition.m3u8?cdn=fastly&expires=1594940400&skid=default&live=1&signature=NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA==
Request Method: GET
Status Code: 200 OK
Remote Address: <IP_ADDRESS>:443
Referrer Policy: strict-origin-when-cross-origin
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Age: 0
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 922
Content-Type: application/x-mpegURL
Date: Thu, 09 Jul 2020 23:16:56 GMT
Grpc-Metadata-Content-Type: application/grpc
Vary: Accept-Encoding
Via: 1.1 varnish
X-Cache: MISS
X-Cache-Hits: 0
X-CDN: fastly
X-Request-ID: 07a81dae-542b-4f67-b776-bfefd31f0e5b
X-Served-By: cache-bos4650-BOS
X-Timer: S1594336617.886909,VS0,VE26
Accept: /
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,it;q=0.8,it-IT;q=0.7,it-CH;q=0.6,ru;q=0.5,es;q=0.4,es-419;q=0.3,de;q=0.2
Connection: keep-alive
Host: manifest-gce-us-east1-production.global.ssl.fastly.net
Origin: https://jessemalin.veeps.com
Referer: https://jessemalin.veeps.com/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
cdn: fastly
expires:<PHONE_NUMBER>
skid: default
live: 1
signature: NWYxMGRiZjBfZmQ0MDYxMmQ3YjYxMWE4MDljMjE1ZDVlNTE2ZTI0MGE1MGU3MGM5NzkyZmVhNzhlYjk1Njk1MzE5MmJkZGNhNA==

Weird! Now it's back on track...
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/733.ts?skid=default&signature=NWYxMGRiZjBfM2QwNThiOGQyNjQ4NzU4YmJlYWViYTMwODkyMzE5YTNiYTE1MWQzOWQyMTJkYzU2YTMyN2M5ZmFhMmMyMTIxMQ==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/734.ts?skid=default&signature=NWYxMGRiZjBfZjRkYjM0MDg4NmRhZmFlZWYzNDI4N2Q2ZTMyZWE1ZjYxOWY3ZDlmZjUyYTc4ODIxNTBjNDg5ODAxMzJjZjQ3ZQ==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/735.ts?skid=default&signature=NWYxMGRiZjBfMWEzNzhhYjYyNzExMzE5YjNlMDdjY2U4Njk1OTZjNWIwOTc2MjI1ZTRmMDZiZjdlOTIxMjViZDY0MWVhNWE0Ng==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/736.ts?skid=default&signature=NWYxMGRiZjBfZWM0OGYxYzI4ZTI5YmNjOWY4NDUzMmFkNTBiNThlNTQ3Yjc5ZmUyZmM3Y2NiZDc4MTNhMmVjMjdjMDg0NmE0OA==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/737.ts?skid=default&signature=NWYxMGRiZjBfZTZiYjI4Nzg5MjhhYmE2YmUxMTgwOGFjNTRkMWVlY2E0ZGIzMzY0ZTU0MDI1NzJmMjg3MWJkM2I3OGI5YzlhYw==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/738.ts?skid=default&signature=NWYxMGRiZjBfMGZiNGZjZDE4MTIyNGMyMDQ2NTUxYmQ1MTBjMzNjOTYwNjIzZDQ3N2Q1NDQ4MjBiYjJhY2U4ZGQxOTJlYjZiOA==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/739.ts?skid=default&signature=NWYxMGRiZjBfZDEyNDg0ZjNiYTM4NTc0M2Y0ZTJiMTgzYjI1Nzc4ZmNkNDdkMmQ2ZmUzNTFhYjMxMTZlNjM0MTJjMTZjNzJhMQ==
https://chunk-gce-us-east1-production.global.ssl.fastly.net/v1/chunk/scPBjCZCxWg8024i86L3o8eaBFHdBeGW7eBlZRC0086dZ00Fs1aYj0027ViNvKwhRarTCzf9hxR00bkdivToWYpW8fabp02VoAf1oT/740.ts?skid=default&signature=NWYxMGRiZjBfZjA3YjYzM2RkMThiMzIxOWZlMGVlZDBmY2FmZmJjNmNiNTBlYzgyNTQ2MjgwNDdjNjg5MTk3NzY5MzY0NTMzZA==

Hi dunnousername,
Unfortunately, installing your branch is above my skill level. I've tried several times, but I keep screwing it up. I had hoped by now it would have been merged into a new update, but no such luck.
I want to capture Jesse Malin's 7/9/2020 concert before it disappears. It was an "off-the-charts" performance. Can you give me a hand? I would be most appreciative. Thank much!

Jesse Malin veeps livestream URL:
https://jessemalin.veeps.com/stream/1fd5fa819d0d

Hey - sorry, I totally forgot about this issue and haven't been checking github for a while. The pull request is still open, but it is unclear what needs to be fixed. All that was said about the pull request was "You must provide account credentials for review." and "Read coding conventions." How does the review process work, and what specifically needs to be changed? I've looked over the coding conventions and it passes the necessary tests on travis.

Hey, I apologize for my delayed reply too. It was all I could do to figure out how to download and install your branch. As far as what youtube-dl requires before merging your branch, it's a bit over my head. However, I would like to see an official merge, so please try to figure it out what they still need. Thanks again for all the work you put into this. It's much appreciated!
One more favor... while you still had access to my veeps account, by any chance did you happen to download the Jesse Malin show from 7/9/2020? That was a really hot show, and at the time I was still trying to figure out how to install your branch, so I missed downloading it. If you got it, I'd love to get a copy. Maybe you could share it via Google Drive or wetransfer or the file sharing platform of your choice? Thanks in advance!
PS - I'm still kicking myself for not realizing how easy it is to find the m3u8 playlist. D'oh!

Has anyone tried this recently? I tried this today on an Armored Saint stream and I'm getting the following:
[Veeps] obtaining initial session
[Veeps] logging in
[Veeps] 2cb98b6421e4: downloading stream page
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/pi/youtube-dl/youtube_dl/main.py", line 19, in
youtube_dl.main()
File "youtube_dl/init.py", line 474, in main
_real_main(argv)
File "youtube_dl/init.py", line 464, in _real_main
retcode = ydl.download(all_urls)
File "youtube_dl/YoutubeDL.py", line 2019, in download
url, force_generic_extractor=self.params.get('force_generic_extractor', False))
File "youtube_dl/YoutubeDL.py", line 797, in extract_info
ie_result = ie.extract(url)
File "youtube_dl/extractor/common.py", line 530, in extract
ie_result = self._real_extract(url)
File "youtube_dl/extractor/veeps.py", line 74, in _real_extract
m3u8_location = re.search(self._M3U8_RE, stream_page).group('url')
AttributeError: 'NoneType' object has no attribute 'group'

Has this been added to youtube-dl?  If not, anyone figure out a way to dl from Veeps?

I'd love to see this feature as well, or at least a more complete guide about how to use the existing version for this.

@dunnousername It seems your branch and fork were taken down with the RIAA DMCA shenanigans last year, and it wasn’t restored when the original youtube-dl repository was. Could you repost it?

@dunnousername It seems your branch and fork were taken down with the RIAA DMCA shenanigans last year, and it wasn’t restored when the original youtube-dl repository was. Could you repost it?

In the corresponding pull request https://github.com/ytdl-org/youtube-dl/pull/25822, @dunnousername pointed to the commit. Check out some detals there. Such as that I forward-ported the commit onto a branch of my own, and added a fix on top. And someone reported that this patch no longer worked.
Here's my branch which includes the original commit:
https://github.com/barsnick/youtube-dl-1/tree/veeps.01

Cool thread

Can anyone confirm if this still works or not?

Can anyone confirm if this still works or not?

As this requires both a Veeps account and a purchase of a viewing, this is usually a bit tough. Old shows expire, so you need to wait for something to actually spend money on.
That said, I plan to test on Sunday!

Any chance you could test on the following stream on Saturday as well?
https://iheartradioalterego.veeps.com/events/72adef5c-60c3-4880-a8da-f146753d17fd
I am wanting to get the Jack White performance. But am unsure if this will work or not. Any help would be super appreciated.

https://iheartradioalterego.veeps.com/events/72adef5c-60c3-4880-a8da-f146753d17fd
I am wanting to get the Jack White performance. But am unsure if this will work or not. Any help would be super appreciated.

That's the one I'm planning, :) I haven't understood whether it will only be available live, or to watch after the event.

I don't know if it works directly, but I've always had success with grabbing the initial .m3u8 URL from stream.mux.com using developer tools in the browser, then just feeding that URL to youtube-dl.  Unfortunately the event you have linked is live-only so there's no second chance to get it.

@barsnick according to this page under the count-down it says that "This event is live only. There will be no rewatch period"
https://iheartradioalterego.veeps.com/events/72adef5c-60c3-4880-a8da-f146753d17fd?event_id=72adef5c-60c3-4880-a8da-f146753d17fd

Ah, okay. Live streams are always a totally different thing. Let's see what happens.
I agree with @ssnodgra's experience: Instead of missing the event or some of the acts while experimenting, it may be most effective to just grab the (live) m3u8 URL.
But perhaps we can get around to some real-time debugging and experimenting. I do notice that the CET event time is 4 AM. I may or may not be awake at that time. ;)

But perhaps we can get around to some real-time debugging and experimenting. I do notice that the CET event time is 4 AM. I may or may not be awake at that time. ;)

Your luck is: Jack White is up last! Three hours to figure it out.

I'm on PST so I will try an grab it that way. Hopefully, I can get it all okay.

@barsnick @ssnodgra FYI I found a Firefox and Chrome add-on/extension that will find the m3u8. URLs can either be copied as they are or transformed into readymade youtube-dl, FFmpeg or Streamlink commands, including the User-Agent, Cookie, and Referer headers.
https://www.videohelp.com/software/The-Stream-Detector

@barsnick Just wanted to let you know that using the addon helped find the m3u8 file but I had to plug that directly into yt-dlp and at the following to get the livestream properly:
--downloader ffmpeg --hls-use-mpegts

Then just CTRL-C to stop the recording. I was left with a ".mp4.part" file that I just changed the extension to ".TS" because it is a mpeg-TS and then remuxed to mp4 using ffmpeg.
I assume this command uses ffmpeg to download the stream and then ytdlp attempts to mux it to mp4, which is why it has the ".mp4.part". So if you try and use this in the future you will need ffmpeg installed and added to path. Hope this helps someone down the line.

Can you guys provide your usernames on veeps?

Just came here to say that with the extension @JPHFanedits suggested I managed to download a past video from Veeps using their m3u8 link. Thank you everyone!

Hi! I'm a security researcher @TruffleSecurity. I found a valid API key leaked in a comment in this Issue. I highly recommend rotating the API key immediately (not just deleting the comment). Here's a blog post I wrote on remediating these types of vulnerabilities: https://trufflesecurity.com/blog/remediate-leaked-api-keys-with-key-rotation.If you can't find the leaked API key, you can use the following TruffleHog command to automatically scan for it:trufflehog github --repo https://github.com/<your_username>/<your_reponame> --issue-comments --only-verifiedIf it's not clear where/what the security issue is, please let me know. I'd be happy to help. Please note that the API key might be in the past edit of a comment.(cc @poochbeast57)

If you think this is important and still relevant, you should be contacting the admins at veeps.com. There are no API keys in this project.

poochbeast57's comment on Jun 27, 2020 exposes a PubNub API Key. They should rotate that key.

After 3 years I expect that key is no longer valid. In any case the URL list where you found this, AIUI, comes from data sent by the veeps.com site in 2020 and the URLs are not under the control of contributors to this issue.

Can confirm that the method suggested by @david-ortiz works. I used the Stream Detector Add-on for Firefox to grab the stream links and in the options, I had selected "Copy URL as yt-dlp command".
Ran it using yt-dlp and got the video from Veeps.

Can somebody grab a stream of Pentatonix concert? I tried but I was unsuccessful. I can give you login access. The concert is available until January 6th.

@Zeze-s I can help you if you still need help and don't mind to share the account information. contact my email<EMAIL_ADDRESS>

Just came here to say that with the extension @JPHFanedits suggested I managed to download a past video from Veeps using their m3u8 link. Thank you everyone!

Do you have example of what worked for you?
When I try it the video is greyed out and the audio is distorted

Any updates on how to get this to work properly? I was able to download the video, but there's no audio.
https://veeps.com/mayerhawthorne/7a294423-6e2f-4c1f-b19e-3c5f03cb39b9

Just came here to say that with the extension @JPHFanedits suggested I managed to download a past video from Veeps using their m3u8 link. Thank you everyone!

I am trying to download the Hardy concert from December (https://veeps.com/hardy/365486c3-94f5-4f94-8198-9e262c63267e)
Do you have example of what worked for you?
When I try it the video is greyed out and the audio is an empty file
I have checked out/cloned both @dunnousername and @barsnick's branches... and have veeps added as machine + credentials in the netrc file too

Veeps using drm now, that's why your video and audio can't be played. You need to decrypt and then merge them to able to play it properly.

Is that universal on the site? If so, this issue can be closed.

Is that universal on the site? If so, this issue can be closed.

I can only confirm that vod contents uses drm, as in the case that happened to @theeaglesfan005. maybe someone can confirm about the live stream content

Is that universal on the site? If so, this issue can be closed.

I successfully downloaded one earlier today, so it’s not universal on the site.

Is that universal on the site? If so, this issue can be closed.

I successfully downloaded one earlier today, so it’s not universal on the site. It was a show that had been streamed live and is currently available on demand.

How did you download successfully? and which show specifically was it?
The one I been trying to download is Hardy's concert

@theeaglesfan005

Does anyone know how to decrypt veeps?

Not a subject for discussion in this tracker, please.
I've set up a burner account with a free show upcoming to investigate whether an extractor for yt-dl is possible.

I think I found out what might be the problem. Don't use stream detector because it'll only detect m3u8 with dr.m. use this command instead
yt-dlp --cookies cookies_file.txt veeps_url
example:
yt-dlp --cookies cookies_file.txt https://veeps.com/hardy/365486c3-94f5-4f94-8198-9e262c63267e
I haven't test it yet, but @theeaglesfan005 might want to try this
or simply changed the end of dr.m m3u8 url that you get from stream detector (delete all parentheses)
(wi)devine_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8
(fa)irplay_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8

I think I found out what might be the problem. Don't use stream detector because it'll only detect m3u8 with dr.m. use this command instead
yt-dlp --cookies cookies_file.txt veeps_url
example:
yt-dlp --cookies cookies_file.txt https://veeps.com/hardy/365486c3-94f5-4f94-8198-9e262c63267e
I haven't test it yet, but @theeaglesfan005 might want to try this
or you can also simply changed the end of dr.m m3u8 url that you get from stream detector (delete all parentheses)
(wi)devine_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8 (fa)irplay_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8

Thanks... tried both... using the terminal command  I got "ERROR: Unsupported URL:"
and changing the m3u8 to fairplay I get "ERROR: [generic] fairplay_cmaf_avc_2160: This video is DRM protected"

I think I found out what might be the problem. Don't use stream detector because it'll only detect m3u8 with dr.m. use this command instead
yt-dlp --cookies cookies_file.txt veeps_url
example:
yt-dlp --cookies cookies_file.txt https://veeps.com/hardy/365486c3-94f5-4f94-8198-9e262c63267e
I haven't test it yet, but @theeaglesfan005 might want to try this
or you can also simply changed the end of dr.m m3u8 url that you get from stream detector (delete all parentheses)
(wi)devine_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8 (fa)irplay_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8

Thanks... tried both... using the terminal command I got "ERROR: Unsupported URL:"
and changing the m3u8 to fairplay I get "ERROR: [generic] fairplay_cmaf_avc_2160: This video is DRM protected"

Can you send the m3u8 link so I can check it?

I think I found out what might be the problem. Don't use stream detector because it'll only detect m3u8 with dr.m. use this command instead
yt-dlp --cookies cookies_file.txt veeps_url
example:
yt-dlp --cookies cookies_file.txt https://veeps.com/hardy/365486c3-94f5-4f94-8198-9e262c63267e
I haven't test it yet, but @theeaglesfan005 might want to try this
or you can also simply changed the end of dr.m m3u8 url that you get from stream detector (delete all parentheses)
(wi)devine_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8 (fa)irplay_cmaf_avc(.)m3u8 changed into (ve)eps(.)m3u8

Thanks... tried both... using the terminal command I got "ERROR: Unsupported URL:"
and changing the m3u8 to fairplay I get "ERROR: [generic] fairplay_cmaf_avc_2160: This video is DRM protected"

Can you send the m3u8 link so I can check it?

Here's the original ones:
yt-dlp --no-part --restrict-filenames -N 4 --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" --cookies-from-browser chrome --referer "https://veeps.com/" "https://d1gf363n2c1czk.cloudfront.net/aa3320d6-d490-4bdb-9e51-37b77b67b9be/HLS/2ee06f52-410a-4181-9b40-c8ff8dbb8894/widevine_cmaf_avc_audio.m3u8"
yt-dlp --no-part --restrict-filenames -N 4 --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" --cookies-from-browser chrome --referer "https://veeps.com/" "https://d1gf363n2c1czk.cloudfront.net/aa3320d6-d490-4bdb-9e51-37b77b67b9be/HLS/2ee06f52-410a-4181-9b40-c8ff8dbb8894/widevine_cmaf_avc_2160.m3u8"
yt-dlp --no-part --restrict-filenames -N 4 --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" --cookies-from-browser chrome --referer "https://veeps.com/" "https://d1gf363n2c1czk.cloudfront.net/aa3320d6-d490-4bdb-9e51-37b77b67b9be/HLS/2ee06f52-410a-4181-9b40-c8ff8dbb8894/widevine_cmaf_avc.m3u8"

browser

You haven't changed the m3u8 link. Use this link, it'll works (delete all parentheses)
https://d1gf363n2c1czk.cloudfront.net/aa3320d6-d490-4bdb-9e51-37b77b67b9be/HLS/2ee06f52-410a-4181-9b40-c8ff8dbb8894/(ve)eps(.)m3u8

browser

You haven't changed the m3u8 link. Use this link, it'll works (delete all parentheses)
https://d1gf363n2c1czk.cloudfront.net/aa3320d6-d490-4bdb-9e51-37b77b67b9be/HLS/2ee06f52-410a-4181-9b40-c8ff8dbb8894/(ve)eps(.)m3u8

This worked!
thank you so much!

hey folks, had some issues with this as well.
this worked for me: https://www.reddit.com/r/youtubedl/wiki/cookies/
simply grabbed the cookies.txt file from the cookies downloader extension, throw it in the same folder as yt-dlp and used
yt-dlp --cookies cookies.txt {m3u8_URL_goes_here]

Hola, estoy intentando descargar el de Louis Tomlinson pero me da el siguiente error.
intente descargando otros conciertos y no me da el mismo error que con el de Louis alguien sabe como puedo solucionarlo?  lo compre ayer y se vence el miercoles 5/6/2024. De ahi en mas ya no puedo verlo hasta pagar  de nuevo
C:\Users\Codubi>yt-dlp --cookies cookies.txt "https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/veeps.m3u8"
[generic] Extracting URL: https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139...7c3f9c789/veeps.m3u8
[generic] veeps: Downloading webpage
ERROR: [generic] Unable to download webpage: HTTP Error 403: Forbidden (caused by <HTTPError 403: Forbidden>)

Pero aquí se discute yt-dl, no yt-dlp, y preferiblemente en inglés: ver #30839.

Hello, I'm trying to download Louis Tomlinson's but it gives me the following error.
I try to download other concerts and I don't get the same error as Louis's. Does anyone know how I can solve it? I bought it yesterday and it expires on Wednesday 6/5/2024. From then on I can't see it until I pay again.
C:\Usuarios\Codubi>yt-dlp --cookies cookies.txt " https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af 6c -2ee5-4e1a-8997-9ce7c3f9c789/veeps.m3u8 "
[genérico] Extrayendo URL: https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139...7c 3f9c789 /veeps.m3u8
[genérico] veeps:
ERROR al descargar la página web: [genérico] No se puede descargar la página web: Error HTTP 403: Prohibido (causado por <HTTPError 403: Prohibido>)

Hello, I'm trying to download Louis Tomlinson's but it gives me the following error. I try to download other concerts and I don't get the same error as Louis's. Does anyone know how I can solve it? I bought it yesterday and it expires on Wednesday 6/5/2024. From then on I can't see it until I pay again.
C:\Usuarios\Codubi>yt-dlp --cookies cookies.txt " https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af 6c -2ee5-4e1a-8997-9ce7c3f9c789/veeps.m3u8 " [genérico] Extrayendo URL: https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139...7c 3f9c789 /veeps.m3u8 [genérico] veeps: ERROR al descargar la página web: [genérico] No se puede descargar la página web: Error HTTP 403: Prohibido (causado por <HTTPError 403: Prohibido>)

I guess this is a new structure of m3u8 link from veeps. maybe you should try to search the non-drm m3u8 link on devtools.
before you open the stream/watch page click ctrl+shift+i or F12 then open the stream/watch page. click on network tab, click ctrl+f type m3u8 on the search bar to see if veeps has non-drm m3u8 url for that show.
I have check the m3u8 with drm and it is works but decryption key will be needed to watch the downloaded files
https://d1gf363n2c1czk.cloudfront.net/80b73105-(54d4)-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_2160.m3u8

Hello, I'm trying to download Louis Tomlinson's but it gives me the following error. I try to download other concerts and I don't get the same error as Louis's. Does anyone know how I can solve it? I bought it yesterday and it expires on Wednesday 6/5/2024. From then on I can't see it until I pay again.
C:\Usuarios\Codubi>yt-dlp --cookies cookies.txt " https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af 6c -2ee5-4e1a-8997-9ce7c3f9c789/veeps.m3u8 " [genérico] Extrayendo URL: https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139...7c 3f9c789 /veeps.m3u8 [genérico] veeps: ERROR al descargar la página web: [genérico] No se puede descargar la página web: Error HTTP 403: Prohibido (causado por <HTTPError 403: Prohibido>)

I guess this is a new structure of m3u8 link from veeps. maybe you should try to search the non-drm m3u8 link on devtools.
before you open the stream/watch page click ctrl+shift+i or F12 then open the stream/watch page. click on network tab, click ctrl+f type m3u8 on the search bar to see if veeps has non-drm m3u8 url for that show.
I have check the m3u8 with drm and it is works but decryption key will be needed to watch the downloaded files https://d1gf363n2c1czk.cloudfront.net/80b73105-(54d4)-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_2160.m3u8

Hello tbt000, I just did those steps and the only m3u8 URLs that appeared were the following
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc.m3u8
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_2160.m3u8
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_audio.m3u8
I'm new to these things, I learned how to download previous concerts on the VEEPS page thanks to you

Hello, I'm trying to download Louis Tomlinson's but it gives me the following error. I try to download other concerts and I don't get the same error as Louis's. Does anyone know how I can solve it? I bought it yesterday and it expires on Wednesday 6/5/2024. From then on I can't see it until I pay again.
C:\Usuarios\Codubi>yt-dlp --cookies cookies.txt " https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af 6c -2ee5-4e1a-8997-9ce7c3f9c789/veeps.m3u8 " [genérico] Extrayendo URL: https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139...7c 3f9c789 /veeps.m3u8 [genérico] veeps: ERROR al descargar la página web: [genérico] No se puede descargar la página web: Error HTTP 403: Prohibido (causado por <HTTPError 403: Prohibido>)

I guess this is a new structure of m3u8 link from veeps. maybe you should try to search the non-drm m3u8 link on devtools.
before you open the stream/watch page click ctrl+shift+i or F12 then open the stream/watch page. click on network tab, click ctrl+f type m3u8 on the search bar to see if veeps has non-drm m3u8 url for that show.
I have check the m3u8 with drm and it is works but decryption key will be needed to watch the downloaded files https://d1gf363n2c1czk.cloudfront.net/80b73105-(54d4)-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_2160.m3u8

Hello tbt000, I just did those steps and the only m3u8 URLs that appeared were the following
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc.m3u8
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_2160.m3u8
https://d1gf363n2c1czk.cloudfront.net/80b73105-54d4-45ce-b745-f7ae99a6f1d5/HLS/2df7c623-dffd-4139-bf5a-443f05ea4ca3/b193af6c-2ee5-4e1a-8997-9ce7c3f9c789/widevine_cmaf_avc_audio.m3u8
I'm new to these things, I learned how to download previous concerts on the VEEPS page thanks to you

I'm glad you could download them fine before. but unfortunately, this one is different. did you use the other search bar? the one that showed when you click ctrl+f. if you did and didn't find the non-drm m3u8 then you need decryption key to decrpyt the file.
one example from a free video
https://veeps.com/e/artistfriendly/3736d7b5-6327-4f1c-8132-a6ce2a894f66/cbe2bd6c-1fbe-4a27-9474-fae091bdf8ab

The above link doesn't play in Firefox without DRM enabled.
If someone can find non-DRM content on the site please open a new issue.


Doc/34_doc-update

:tada: This PR is included in version 1.6.1 :tada:
The release is available on:

GitHub release
npm package (@latest dist-tag)

Your semantic-release bot :package::rocket:


Updated __list to handle pools

This is working for me. I have three pools, and __list appears to be functioning correctly.

Thanks! Looks good to me on single pools!


updated 3D noise array function

given array coordinate inputs x,y,z, the function returns 3D array of shape (z,y,x) instead of 1D array.

Hi thank you for this. Would you be willing to update it further and match it with #25?
I'm asking you because your PR was smaller of the two.
In short:

Add docstring and type hints to to the public func noise3array (not _noise3array)
Add back the old input variable names and use x_i for the loop vars

Hope those two commits fix the issues and help. I've used the other PR for consistency.

Whoa hold up now mister. I appreciate your time and effort, thanks, but now you've started to add in partial code that's unrelated to your initial PR.
It's not my intention to sound like an ungrateful muppet, I just want to help you get it right while keeping things clean for everyone else :)
It's way easier to work with small and clean PRs that contains just a single feature/update/whatever. So your initial PR was good. But it would had been better to open up a new PR for that third commit instead.

Can you revert the commit with the new fractal noise func and add it as a separate PR? And please run the new formatter on your code.

I've removed the ident from the doc string.
I've reverted the final commit, adding the potential new feature. Instead added this as another PR, building on from this branch.

Thank you, looking better now! I don't have time during the week so I'll try to verify and merge this weekend 👍


Allow the type of RSpec test to be configurable (not just :request)

Current Behaviour
All OpenAPI requests get run on the type: :request.
Desired Behaviour
We would like to be able to run on one or more arbitrary types, e.g. type: :flow. This would mean changing file
hooks.rb to be configurable.
This will allow us to generate our schema.yaml from our flow specs as well as from our request specs.

I just submitted a PR to address this.

forgot closing this when I merged #32. Thank you!


Optimize ResultFlag

coverage: 86.693% (-0.01%) from 86.703% when pulling 49335ad0f84f256f890be3544cb52d67e7dcd10d on kang-hl:optimize-ResultFlag into ead5a1d62ea392008db528b8f070851f37976a10 on mybatis:master.

looks ok, not familiar with seeing |= but that may be ok.  I'm not familiar enough with the underlying usage to know if this is correct though.  @harawata What do you think here?

I am OK with the basic idea (i.e. use byte instead of List), but I may want to make some minor changes before we merge it.
Also, even though this is an internal change (in my opinion), it might be safer to wait for 4.0 (or 3.6) because it could break some third party extensions.


Error when creating NotionClient

I have serious doubts that this is even an active project anymore, but in case:
>>> client = NotionClient(token_v2="<notion token_v2>")

File /opt/homebrew/lib/python3.12/site-packages/notion/client.py:77, in NotionClient.__init__(self, token_v2, monitor, start_monitoring, enable_caching, cache_key, email, password, client_specified_retry)
     66 def __init__(
     67     self,
     68     token_v2=None,
   (...)
     75     client_specified_retry=None,
     76 ):
---> 77     self.session = create_session(client_specified_retry)
     78     if token_v2:
     79         self.session.cookies = cookiejar_from_dict({"token_v2": token_v2})

File /opt/homebrew/lib/python3.12/site-packages/notion/client.py:39, in create_session(client_specified_retry)
     37     retry = client_specified_retry
     38 else:
---> 39     retry = Retry(
     40         5,
     41         backoff_factor=0.3,
     42         status_forcelist=(502, 503, 504),
     43         # CAUTION: adding 'POST' to this list which is not technically idempotent
     44         method_whitelist=(
     45             "POST",
     46             "HEAD",
     47             "TRACE",
     48             "GET",
     49             "PUT",
     50             "OPTIONS",
     51             "DELETE",
     52         ),
     53     )
     54 adapter = HTTPAdapter(max_retries=retry)
     55 session.mount("https://", adapter)

TypeError: Retry.__init__() got an unexpected keyword argument 'method_whitelist'

I hit the same issue. Based on this discussion, it looks like a work-around is to downgrade urllib, i.e., run pip install 'urllib3<2'.
Can confirm after running this the repo works on Python 3.10!


Fix ColorPicker margin theme property

Fixes #62937
Supersedes #76567
Changing the base type would break compatibility, so instead I just added another VBoxContainer inside MarginContainer inside ColorPicker. This is the rare occurrence where node's internal structure changes.

Tested and seems to work, what is the margin theme override supposed to do after this PR?

margin adds a margin (padding?) around the ColorPicker. The previous implementation was supposed to do the same, but it wasn't implemented correctly.

Works correctly for me
https://github.com/godotengine/godot/assets/2223172/4624caae-e456-462a-aee3-9b6d1a9418be

Huh, I'll recompile and retest soon. If I get different results again I'll post a scene/project file, could you post yours?

Pretty sure it works in a fresh project.

Thanks!


Create DaskTaskRunnerConfig

Originally from Evgeny:
class DaskTaskRunnerConfig(Block):
    """Dask Task Runner Config.

    Attributes:
        address (str, optional): Address of a currently running dask scheduler;
            if one is not provided, a temporary cluster will be created in
            `DaskTaskRunner.start()`.  Defaults to `None`.
        cluster_class (str, optional): The cluster class to use when creating
            a temporary dask cluster. Should be the full class name
            (e.g. `"distributed.LocalCluster"`).
        cluster_kwargs (dict, optional): Additional kwargs to pass to the
            `cluster_class` when creating a temporary dask cluster.
        adapt_kwargs (dict, optional): Additional kwargs to pass to
            `cluster.adapt` when creating a temporary dask cluster. Note that
            adaptive scaling is only enabled if `adapt_kwargs` are provided.
        client_kwargs (dict, optional): Additional kwargs to use when creating a
            `dask.distributed.Client`,
            https://distributed.dask.org/en/latest/api.html#client.
    """
    _block_type_name = 'Dask Task Runner Config'

    address: str | None = None
    cluster_class: str | None = None
    cluster_kwargs: dict | None = None
    adapt_kwargs: dict | None = None
    client_kwargs: dict | None = None

    def create_task_runner(self) -> DaskTaskRunner:
        return DaskTaskRunner(
            address=self.address,
            cluster_class=self.cluster_class,
            cluster_kwargs=self.cluster_kwargs,
            adapt_kwargs=self.adapt_kwargs,
            client_kwargs=self.client_kwargs,
        )

However, I wonder how this would work, if it's inside a flow?

If you do @flow(task_runner=DaskTaskRunnerConfig.load("foo").create_task_runner()) it'll work since we execute the script at runtime.
We'll probably want to explore a real first-class pattern for this, maybe we can find a way to get this in people's hands without committing to it as the final pattern.

This is very interesting!
Definitely worth exploring a first-class pattern since it could make the configuration of task runners easier. Could we create a type of block similar to an infra block where it's job is to store config and create a specific type of task runner? If we could, it would probably involve creating a new block capability and adding a new task argument to accept those types of blocks.
Probably other ways to approach this, but this definitely worth exploring!

Could we create a type of block similar to an infra block where it's job is to store config and create a specific type of task runner?

I've talked about this before, but basically I think that task runners should become WorkerInfrastructure blocks. You'd then just specify @flow(worker_infrastructure="dask-cluster/foo")


[INTEL MKL] Changes to oneDNN build to remove binary blob when building with opensource components only.

The PR includes the following changes.

Changes to the mkl_threapool build so it doesn't depend on the MKL binary blob.
Added  the mkl_opensource_only config option that enables building of TF+oneDNN without the MKL binary blob.
Cleaning up obsolete code.

@agramesh1 Can you please check build failures. Thanks!

@gbaned thank you, I will take a look at it.


The exact number of update domains

[Enter feedback here]
The number of update domains should be 5 instead of 20:
"How do availability sets work?
Each virtual machine in your availability set is assigned an update domain and a fault domain by the underlying Azure platform. Each availability set can be configured with up to 3 fault domains and 20 update domains"

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 7342d51a-4565-df38-ec28-03c140464e73
Version Independent ID: 78938f56-dc65-055c-a238-015f1de5b900
Content: Availability sets overview - Azure Virtual Machines
Content Source: articles/virtual-machines/availability-set-overview.md
Service: virtual-machines
GitHub Login: @mimckitt
Microsoft Alias: mimckitt

Just ignore the change, tested in the lab and the doc is correct, we can have up to 20 update domain

Resolved by customer.


Dealabs bridge is broken

Dealabs is out, and already broken.
The website has changed and needs to be fixed, sorry.
I'm working on it.

The pull request #595 fix this issue :)


Scripts stored as plain text in android export

Godot version
v4.0.beta2.official [f8745f2f7]
System information
Windows 10, Vulkan
Issue description
Exporting for android resulted "apk" package contains plain text scripts regardless of selecting "Compiled Bytecode" on GDScript export mode menu.
Steps to reproduce
1- Create a simple project including a scene and attach a script with some line of codes.
2- In Export dialog add android export preset and from Resources tab select "Compiled Bytecode" on GDScript export mode menu.
3- Export the project to apk package.
4- Extract resulted apk to a folder and locate your script file in extracted files.
5- Your script is stored as plain text.
Minimal reproduction project
No response

See https://github.com/godotengine/godot/issues/66091


"App error" should be changed to "add-in error" in "Common errors and troubleshooting steps" section

I've noticed that the actual error is "Add-in error", not "App error".
Here's one of error messages:

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: b6cb5f52-dfc5-4fa2-6508-194d6f1c674a
Version Independent ID: 8f3caf2d-fba3-166f-43bc-1d3e4007abab
Content: Troubleshoot user errors with Office Add-ins - Office Add-ins
Content Source: docs/testing/testing-and-troubleshooting.md
Product: non-product-specific
Technology: add-ins
GitHub Login: @o365devx
Microsoft Alias: o365devx

Hi @modestfake - I will go ahead and look into this to repo and then update the docs as necessary. Thanks for writing in and letting us know, we appreciate it!

Hi @modestfake - just wanted to let you know that as this is on our backlog I am closing this issue. :) Thanks! You are welcome to re-comment on this thread at any time should you need anything else.


Workaround problems with hardened runtime, needed for notarization

On macOS 10.15 Catalina and later applications need to be Notarized where notarization is an Apple malware- and security-check of the released binaries.
As part of the notarization process, Apple require that hardened runtime is enabled. This prevents

code injection into running processes
attaching debuggers
allocating writable + executable memory

Currently hyperkit uses valloc to allocate memory for the VM and then grants the VM READ, WRITE and EXECUTE, which will fail if the hardened runtime is enabled.
One workaround is to grant the hyperkit binary the Allow Unsigned Executable Memory Entitlement which disables the writable+executable check for all allocations done by the process.
This patch proposes another workaround, which is to switch from using valloc to mmap with the special flag MAP_JIT. This allows us to use the weaker Allow Execution of JIT-compiled Code entitlement, so that only the VM memory allocation is writable+executable, other allocations are not.
Note that, according to the mono project https://github.com/mono/mono/commit/a502768b3a24f4251de6a48ba78a27c898968e63 the MAP_JIT flag causes problems with older version of macOS, so they recommend only enabling it for Mojave and later.
Note that enabling the hardened runtime and adding entitlements is done at the codesign stage which means we can't easily test this from the current CI as the binaries are unsigned.

This seems reasonable to me. Have you tested that it works with this?

FWIW alternatively one can use the following entitlement:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
</dict>
</plist>

This is working for us in Multipass for a while now.


Revert "[Enhancement] Enlarge the value of config hive_max_split_size (backport #28209)"

Reverts StarRocks/starrocks#28260

[FE PR Coverage Check]
:heart_eyes: pass : 1 / 1 (100.00%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/common/Config.java
1
1
100.00%
[]


[BUG] Function Fails to Load with PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 and newrelic dependency

Investigative information
We have a couple of Azure Functions on the Python linux consumption plan that have been running well. On October 26th around midnight UTC it seems as if a new version of the runtime was released and this caused the functions to stop working completely. To the point where the functions were not being loaded - in one case giving a python exited with code 139 (0x8B) error.
We were also unable to deploy the function successfully using a GitHub Action workflow or through the CLI.
We were able to narrow it down to the import of the newrelic python module - if all code was commented out then the function was able to deploy and run.
We then realised that the setting of PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 was the culprit. If this was removed then the function could load with the newrelic module still in use.
Repro steps
Please see this repo for a minimal example: https://github.com/ajstewart/azure-function-python-isolate-workers-error/tree/main.
If the PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 is set then the function fails to deploy through the CLI:
Deployment successful. deployer = Push-Deployer deploymentPath = Functions App ZipDeploy. Extract zip. Remote build.
Remote build succeeded!
[2023-10-31T11:44:55.112Z] Syncing triggers...
[2023-10-31T11:45:05.241Z] Syncing triggers...
[2023-10-31T11:45:24.763Z] Syncing triggers...
[2023-10-31T11:45:31.699Z] Syncing triggers...
[2023-10-31T11:45:37.215Z] Syncing triggers...
[2023-10-31T11:45:41.595Z] Syncing triggers...
Error calling sync triggers (BadRequest). Request ID = '354f9cec-793e-4d74-beaa-070b3dd6e767'.

Workarounds:

Removing the PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 setting enables the function to deploy again.

OR

Removing the import newrelic.agent import line (leaving the PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 in place).

Of course this seems to be specific to the newrelic module for us but it was working up until last week, and caused a complete outage of our functions.
Extra
I was also able to replicate a failing function using the docker function image and an integration test. Though interestingly the function did load when running in the CLI with func start.

I had an issue like this, when the PYTHON_ISOLATE_WORKER_DEPENDENCIES = 1, the python function deployment is failed. So, I've decided to solve it in this way:

Before running the deployment command:

$ az webapp config appsettings delete --name MyWebApp --resource-group MyResourceGroup --setting-names PYTHON_ISOLATE_WORKER_DEPENDENCIES

After deployment is done:

az webapp config appsettings set -g MyResourceGroup -n MyUniqueApp --settings PYTHON_ISOLATE_WORKER_DEPENDENCIES=1

Thanks @KeyvanArj. I tried this however as soon as the PYTHON_ISOLATE_WORKER_DEPENDENCIES is set the function fails to load again after the restart.
So with this particular problem the function fails to load at all with that setting in place. When it had been working fine for almost a year up to this point.

I can add that the log stream shows this when the setting is applied.
2023-11-02T09:26:06Z   [Verbose]   Received request to drain the host
2023-11-02T09:26:06Z   [Information]   DrainMode mode enabled
2023-11-02T09:26:06Z   [Information]   Calling StopAsync on the registered listeners
2023-11-02T09:26:06Z   [Information]   Call to StopAsync complete, registered listeners are now stopped
2023-11-02T09:26:22Z   [Information]   Host lock lease acquired by instance ID '0000000000000000000000007F4883CB'.
2023-11-02T09:26:36Z   [Verbose]   Received request to drain the host
2023-11-02T09:26:36Z   [Information]   DrainMode mode enabled
2023-11-02T09:26:36Z   [Information]   Calling StopAsync on the registered listeners
2023-11-02T09:26:36Z   [Information]   Call to StopAsync complete, registered listeners are now stopped
2023-11-02T09:26:36Z   [Verbose]   Received request to drain the host
2023-11-02T09:26:36Z   [Information]   DrainMode mode enabled
2023-11-02T09:26:36Z   [Information]   Calling StopAsync on the registered listeners
2023-11-02T09:26:36Z   [Information]   Call to StopAsync complete, registered listeners are now stopped
2023-11-02T09:26:54Z   [Information]   Host lock lease acquired by instance ID '000000000000000000000000F71781ED'.
2023-11-02T09:27:10Z   [Verbose]   Received request to drain the host
2023-11-02T09:27:10Z   [Information]   DrainMode mode enabled
2023-11-02T09:27:10Z   [Information]   Calling StopAsync on the registered listeners
2023-11-02T09:27:10Z   [Information]   Call to StopAsync complete, registered listeners are now stopped

@ajstewart - Could you please share the function app name using this mechanism - https://github.com/Azure/azure-functions-host/wiki/Sharing-Your-Function-App-name-privately

@ajstewart - Could you please share the function app name using this mechanism - https://github.com/Azure/azure-functions-host/wiki/Sharing-Your-Function-App-name-privately

Hi @vrdmr, sure. The demo one where I'm replicating the error is running at funcdatanrtest and it is in a working state at the moment.
We had two other functions go down because of this problem around midnight UTC on October 25th going into October 26th.
Function 1 the last successful invocation id before we had to act was 3cca06a7-22f9-4ccd-b2eb-9c13cd869965 (10:54 pm UTC 25/10)
Function 2 the last successful invocation id before we had to act was cfa79493-c79c-4a12-bec9-bd5d16d0ad92 (10:15 pm UTC 25/10)
Both these functions are in a running state again now after removing the app setting.
Is this enough information?

Hello, I wondered if there would be any further investigation into this? We're evaluating whether Functions can remain in critical workflows, but if the runtime can break like this through no changes of our own we are inclined to move away. Interested in what caused this issue to to help understand. Thanks.

Hey @ajstewart , apologies for the delay. I'm currently looking into this issue right now. Here's what I can see so far:

There aren't any exceptions or errors being thrown. Through Docker, I only see an exited with code 139 message. I'm leaning towards a potential segfault being the cause, but not confirmed yet.
This seems specific to the newrelic module (or other packages that depend on grpc or protobuf), which is why changing PIWD causes the function to work / fail. Those are also packages that we depend on.
I can see from logs on our end that there was an update to the worker version for your functions, and they started failing after this update. I'm reviewing our changes to see what happened to make the dependencies incompatible.

Thanks for your patience with this issue. In the meantime, please continue to set PIWD=0, and I'll continue investigating why this update caused your functions to break.

Hi @hallvictoria, many thanks for your reply!
Yes the lack of exceptions very much looked like segfault to me as well.
Thanks for the extra information, I'll be interested to see what you find!
Is there a way to freeze the worker versions on the functions? It seems non-ideal to perhaps have the rug pulled out from under you like this, like what happened here.

This is an interesting issue. I found that we updated the protobuf and grpcio version dependencies (from 3.19.3 to 4.22.0 and 1.43.0 to 1.54.2 respectively), and this update seems to be the cause of this issue. Reverting to the previously installed versions worked as expected.
From this, it looks like we're installing dependencies that the newrelic module also depends on, and these dependencies are incompatible. Somewhere newrelic is using these packages as well but expects an older (or at least different) version than what we're installing. The weird thing is that, since these packages aren't defined in the sample requirements.txt file, the same versions should be installed whether or not PIWD is true.
Just curious, is there a specific reason you're setting PIWD=1?
Freezing worker versions isn't possible on consumption plans, only on dedicated. It's generally not recommended to pin versions, as this can cause unexpected dependency issues as well. I agree this was a miss on our end. For future releases involving dependency updates, we do plan on giving more notice and thoroughly testing it to ensure issues like this don't occur again.

This is an interesting issue. I found that we updated the protobuf and grpcio version dependencies (from 3.19.3 to 4.22.0 and 1.43.0 to 1.54.2 respectively), and this update seems to be the cause of this issue. Reverting to the previously installed versions worked as expected.
From this, it looks like we're installing dependencies that the newrelic module also depends on, and these dependencies are incompatible. Somewhere newrelic is using these packages as well but expects an older (or at least different) version than what we're installing. The weird thing is that, since these packages aren't defined in the sample requirements.txt file, the same versions should be installed whether or not PIWD is true.

Right, thanks for the explanation!

Just curious, is there a specific reason you're setting PIWD=1?

I naively thought that this setting would avoid this exact situation, the note on the docs says:

If your package contains certain libraries that might collide with worker's dependencies (for example, protobuf, tensorflow, or grpcio), configure PYTHON_ISOLATE_WORKER_DEPENDENCIES to 1 in app settings to prevent your application from referring to worker's dependencies.

So am I misunderstanding something, as the above seems like it would be a good idea, and thought it would avoid conflicts.
I was also having trouble with this issue: https://github.com/Azure/azure-functions-python-worker/issues/1245 where I was getting thread locking with the same function that had this problem. Now and then I would be getting random function timeouts because the process just hung, but wasn't consistent. Once I realised how the function runs with the pool I figured something must be conflicting in that environment and sure enough changing the number of threads to 1 fixed the issue. So I had also tried the PIWD setting here to combat that and had ended up leaving it.

Freezing worker versions isn't possible on consumption plans, only on dedicated. It's generally not recommended to pin versions, as this can cause unexpected dependency issues as well. I agree this was a miss on our end. For future releases involving dependency updates, we do plan on giving more notice and thoroughly testing it to ensure issues like this don't occur again.

Ok I wondered if that would be the case with the consumption. Are there preview releases of the runtime to test? As if the runtime is updated alongside a release there might not be time to test a function. It would seem that the only way to get a definite environment that will remain working is to upgrade the plan (which I don't really need to at the moment).

We recommend setting PIWD=1 mainly if your app uses any of these libraries: Python Worker Dependencies. These are our worker dependencies.
I agree with your reasoning, and I'll see if we can make our docs more specific. We don't set PIWD to true by default because of a case where a package (dotenv, for example) uses a main.py file -- PIWD=1 plus this file overrides our worker's main.py file, which caused issues in importing modules and starting the worker successfully.
We don't have any way to preview upcoming releases. The one thing I could recommend for this is to have a duplicate function running in one of our early release regions: Central US EUAP, East US 2 EUAP, France Central, West Central US, North Europe, or West US 2.
Again, I'm really sorry for this issue and I'll keep investigating. I've narrowed it down to our internal protos module. It seems like that the reference to this module is being changed, and when our code tries to access the module it segfaults.

Ok, though I'm still a bit confused - should setting PIWD=1 should be used here if I know my dependencies are using one of those, e.g. protobuf?
I guess I'm not clear on the installation and package management method used in the runtime. With PIWD=1 it is prioritising loading the app's requirements first - are these installed independently of the workers modules? As it says with PIWD=0 that some modules may be shadowed, what does this mean in practise? Just attempting to understand the inner workings a bit better.
Thanks for your updates and responses, it's very much appreciated!

There are two main cases we recommend setting the dependency isolation flag:
(using protobuf as an example here, but I'm referring to any of the python worker dependencies mentioned before)
1. If your app is using protobuf
2. If you know that one of the packages you depend on has a dependency on protobuf
These are the cases where your app depends on a specific version of protobuf that might be different from what we use in the worker. If your app doesn't fit into those scenarios, enabling the flag isn't needed.
newrelic here is an odd case. newrelic on its own doesn't depend on protobuf or grpcio, but newrelic[infinite-tracing] does. seen here . I'd say in this case, just using newrelic, PIWD doesn't need to be set. If you were using newrelic[infinite-tracing], it would need to be set.
The main thing setting PIWD does is changing which dependencies should be prioritized. With PIWD=1, packages from the app will be prioritized. These packages are independent from the worker's -- the worker will run using its own dependencies. I'm not quite sure what you mean by shadowed modules?
For example, the worker depends on protobuf==4.22.0.
If PIWD=0, 4.22.0 will be used by the worker and app (if it's needed in the app)
If PIWD=1 and protobuf==3.19.3 is in requirements.txt, the app will run using 3.19.3 and the worker will use 4.22.0. If protobuf==3.19.3 isn't in requirements.txt, the app will also run using 4.22.0.
Does that help? Please let me know if you have any other questions! :)

Ah ok that's clearer - thanks!
On the shadowed comment I'm not sure, it's the wording from the docs page here: https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#python_isolate_worker_dependencies I guess it just means you'll potentially be using an unexpected version when set PIWD=0 if it happens to be a worker module.
It seems like setting it to 1 would always be safer when you have pinned requirements (though I suppose the modules the worker uses is limited). But saying that I'm probably just about to add dotenv as a requirement to a function so from what you said earlier, it seems like I should avoid it where possible.

Hey, sorry for the delay. I figured out what happened here.
While newrelic doesn't install protobuf, protobuf is part of its infinite-tracing module and during setup newrelic checks if protobuf has been installed. Depending on the version it finds, it imports the appropriate pb2 file. If protobuf isn't found, newrelic assumes the version to be <4 and imports the v3 pb2 file.
TLDR;
PIWD=0 means that newrelic's import also searches for modules from the worker dependencies. When trying to import protobuf, newrelic searched and found it from the worker dependencies and imported the appropriate pb2 file.
PIWD=1 means that newrelic searched for protobuf only from the app dependencies. Because the app dependencies didn't have protobuf (protobuf not in requirements.txt), newrelic assumed a specific protobuf version (<4). However, protobuf was brought through the worker, and when the version the worker brought didn't fit the assumption (the worker brought >= 4), newrelic's import failed and caused the worker to crash.

Before the segfault issue occurred: PIWD=1, protobuf not in req.txt, and the worker brings 3.19
The import statement checks user dependencies (per PIWD=1), doesn't find protobuf installed, and imports the v3 pb2 file (assumes protobuf version < 4). Protobuf is brought through the worker side, but newrelic is only checking for it from the user side. We then find protobuf v3.19 (brought as a worker dependency). This is compatible with the v3 pb2 file newrelic imported.
After the segfault: PIWD=1, protobuf not in req.txt, and the worker brings 4.22
The same thing happens on the newrelic side when trying to import protobuf -- it's not found as part of the user dependencies and the v3 pb2 file is imported. However, on the worker side, we updated to protobuf v4.22. Again, newrelic was checking if protobuf was installed only from the user dependencies and making an import based on that. So here newrelic was assuming protobuf v3 and importing a file based on that, but protobuf v4 was actually brought by the worker. Here is where the incompatibility happened, and the worker crashed.
Working case #1: PIWD=0 (worker dependencies are prioritized)
Having PIWD=0 worked when the worker was bringing both protobuf v3.19 and v4.22. What happens here is that, since worker dependencies are prioritized, newrelic's import statement checks if protobuf has been installed and finds it from the worker (vs. PIWD=1 where it was only checking for it from the user dependencies). When the worker brought 3.19, newrelic imported the v3 pb2 file. When it brought 4.22, newrelic imported the v4 pb2 file. It didn't matter which version was brought, because PIWD=0 meant that newrelic's import found the protobuf module from the worker dependencies and makes a compatible import.
Working case #2: PIWD=1 and protobuf in req.txt
The import statement checks user dependencies, finds protobuf, and imports the appropriate pb2 file. The worker and app are each bringing their own protobuf version, and the each side uses the version that they respectively bring. There's no conflict because even if the app brings protobuf v<4 and the worker uses v>=4, newrelic will use the version from the app side.
The main takeaway here imo is that PIWD changes where newrelic looks for protobuf in its import statement. I think newrelic's version assumption is an odd case -- protobuf isn't a direct dependency of newrelic and this scenario where protobuf wasn't found yet was still brought is probably rare. Regardless, this app setting does need more documentation and we will work on fixing that.
Hopefully this clears things up, but please let me know if you have any questions :)


[Bug] Does not compile on Zig 0.13.0

The release version of Hexdump does not compile on 0.13.0 (or the master branch) of Zig.
To Reproduce
Steps to reproduce the behavior:
git clone https://github.com/KeithBrown39423/Hexdump
cd Hexdump
zig build

Expected behavior
A compiled binary of Hexdump using zig 0.13.0 (or master)
Additional context
This issue is not the cause of Hexdump but it's dependency, Clap. This issue is directly related to the path field in LazyPath being deprecated as of 0.13.0.

I would like to note Clap 0.9.1 will fix compiling on 0.12.0 and 0.13.0
The slight issue is the master branch isn't supported to any degree. Well I don't really see that as an issue.

This is fixed in the dev branch, it just hasn't been merged into release yet.