youtube-innertube-kotlin

Implement InnerTube API calls for YouTube metadata and download URLs in Kotlin.

Updated Mar 20, 2026
One-click install
npx skills add https://github.com/hightemp/offline_tube --skill youtube-innertube-kotlin
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: youtube-innertube-kotlin
Source: https://github.com/hightemp/offline_tube/tree/main/.github/skills/youtube-innertube-kotlin
Command: npx skills add https://github.com/hightemp/offline_tube --skill youtube-innertube-kotlin

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Eliminates reliance on Python or yt-dlp by guiding Kotlin developers to speak to YouTube's InnerTube API, surfacing metadata and download-ready streams for offline viewing on Android.

Core Features & Use Cases

  • InnerTube API requests: Provides the ANDROID_VR headers, JSON body, and constant values needed to reach the player endpoint without browser automation.
  • Metadata and format selection: Explains how to parse playabilityStatus, stream formats, and thumbnails, then choose the best combined or adaptive stream up to the desired resolution.
  • Resilient downloading: Walks through progress-capable downloads, resume support, rate limiting, retries, and storage checks so the app can download safely even under flaky networks.

Quick Start

Use the guide to craft a Kotlin client that calls the InnerTube player endpoint, selects the best format, and downloads the video with progress and resume support.

Frequently Asked Questions about youtube-innertube-kotlin

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I download YouTube videos in Kotlin without using yt-dlp?

You can download YouTube videos in Kotlin by directly calling the InnerTube API using ANDROID_VR client headers, which eliminates yt-dlp dependencies. This approach provides access to video metadata and download-ready stream URLs for offline viewing on Android.

What's the best way to handle playabilityStatus errors when requesting YouTube streams?

Handling playabilityStatus errors involves checking the JSON response from the InnerTube player endpoint and applying retry logic with backoff. This ensures reliable downloads even when YouTube returns temporary access restrictions or rate limits for ANDROID_VR client requests.

Can I mimic the ANDROID_VR client to fetch YouTube download URLs natively in Android?

Yes, you can mimic the ANDROID_VR client by sending specific headers and a structured JSON body to the InnerTube player endpoint. This native Kotlin approach surfaces download-ready stream URLs without requiring browser automation or external Python scripts.

How do I implement resume support and progress tracking for YouTube video downloads in Kotlin?

Implementing resume support and progress tracking requires parsing the streaming data from InnerTube to acquire format URLs, then managing chunked downloads with rate limiting and storage checks. This approach ensures safe, resumable downloads even under flaky network conditions.

Why does my InnerTube API request fail to return downloadable video formats?

InnerTube API requests fail to return formats when the JSON body lacks correct ANDROID_VR client constants or when playabilityStatus indicates an error. Applying proper retry and backoff strategies while validating request headers resolves these streaming data parsing issues.