Build Status Maven Central

Module that extracts downloadable video and audio streams from youtube. Basically you want exactly one you YouTubeQuery instance across all your application, as decipher engine may be somewhat costly to create and keep around in multiple instances. Sometimes streams are protected by different signature type and in some cases for very new player.js or obfuscation methods this implementation may be unable to decrypt signature. in that case appropriate message will be logged and stream will be omitted from output map.

Usage: To use the grabber, you'll need to provide any biased container, or anything for what MonadError typeclass implementation exists / may be implemented.

  import cats.implicits._
  val result = new YouTubeQuery[Try]().getStreams(args.head)

videoOnly = true will return just two or three streams of video paired with audio. Otherwise all the available streams will be returned. Youtube does not provide 1080+audio anymore (may be it is temporary decision).

YouTubeConstants.scala holds a dictionary of known stream types, use it to render basic information to user if needed.

Adding things to projects:


libraryDependencies += "ru.shubert" %% "youtubegrabber" % "2.8"


implementation "ru.shubert:youtubegrabber_{scala_version}:2.8"


  <scala.major>%put your version here%</scala.major>


Existing image

$ docker pull lure/grabber:v2.8
$ docker run --rm lure/grabber:v2.8

Or rebuild from sources

$ docker run --rm lure/grabber:v2.8