
Kotlin Multiplatform library simplifies interaction with the Cobalt API for media downloading. Offers wrapped and raw API implementations, customizable request settings, and specific builders for streamlined media requests.
Kotlin Multiplaform wrapper library for media downloader Cobalt API (cobalt.tools)
Gradle (kotlin)
implementation("me.darefox:cobaltik:2.0.0")Gradle
implementation 'me.darefox:cobaltik:2.0.0'Apache Maven
<dependency>
<groupId>me.darefox</groupId>
<artifactId>cobaltik</artifactId>
<version>2.0.0</version>
</dependency>Difference between Wrapper (Cobalt) and Raw API implementation (CobaltRaw) is:
| Cobalt | CobaltRaw |
|---|---|
Returns response in sealed class. To get data you need to use when(response)
|
Returns response unwrapped so you don't need to identify class, but it contains a lot of possible nulls |
You can request with just url, general builder, specific builder, your own custom builder or CobaltRequest
|
You can only request with CobaltRequest
|
import me.darefox.cobaltik.wrapper.Cobalt
suspend fun simpleRequest(): WrappedCobaltResponse {
val cobaltApiUrl = " https://co.wuk.sh/" // or other url of api instance
val cobaltClient = Cobalt(cobaltApiUrl)
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
// request download url with default settings
return cobaltClient.request(youtubeVideo)
}// convert generic response to specific
suspend fun getSpecificResponse() {
val response: WrappedCobaltResponse = simpleRequest()
when (response) {
is ErrorResponse -> println("error: ${response.text}")
is RedirectResponse -> println("redirect: ${response.redirectUrl}")
is StreamResponse -> println("cobalt stream: ${response.streamUrl}")
else /* PickerResponse, RateLimitResponse, SuccessResponse */ -> println(response)
}
}suspend fun overrideDefaultRequest(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url with overriding default settings
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
return cobaltClient.request(youtubeVideo) {
videoQuality = VideoQuality.MAX
videoCodec = VideoCodec.AV1
muteAudio = true
}
}suspend fun useSpecificBuidler(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url with specific builders
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
val audioBuilder = AudioRequestBuilder(youtubeVideo)
cobaltClient.request(audioBuilder) {
// AudioRequestBuilder create only-audio requests
// so you can edit only audio related settings
audioFormat = AudioFormat.MP3
useDubLang = false
// videoCodec = VideoCodec.AV1 - ERROR
}
val tiktokVideo = "https://www.tiktok.com/@rooroo01636/video/7284682918864145696"
val tiktokBuilder = TikTokRequestBuilder(tiktokVideo)
return cobaltClient.request(tiktokBuilder) {
// TikTokRequestBuilder configures TikTok-specific settings,
// but Cobalt may handle other supported media (e.g., YouTube) if the URL provided is different
downloadFullTikTokAudio = true
removeTikTokWatermark = true
muteAudio = false
}
}suspend fun useRequestObject(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url using request object
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
val request = CobaltRequest(
url = youtubeVideo,
videoCodec = VideoCodec.AV1,
videoQuality = VideoQuality.MAX,
useDubLang = true,
isAudioMuted = false
)
return cobaltClient.request(request)
}fun getServerInfo(cobaltClient: Cobalt): CobaltServerInfo {
return cobaltClient.getServerInfo()
}fun createRawClient(): CobaltRaw {
val cobaltApiUrl = "https://co.wuk.sh/" // or other url of api instance
return CobaltRaw(cobaltApiUrl)
}suspend fun rawRequest(rawClient: CobaltRaw): CobaltResponse {
val request = CobaltRequest(
url = "https://www.youtube.com/watch?v=qWNQUvIk954",
videoCodec = VideoCodec.AV1,
videoQuality = VideoQuality.MAX,
useDubLang = true,
isAudioMuted = false
)
return rawClient.request(request)
}suspend fun getServerInfoRaw(rawClient: CobaltRaw): CobaltServerInfo {
return rawClient.getServerInfo()
}Kotlin Multiplaform wrapper library for media downloader Cobalt API (cobalt.tools)
Gradle (kotlin)
implementation("me.darefox:cobaltik:2.0.0")Gradle
implementation 'me.darefox:cobaltik:2.0.0'Apache Maven
<dependency>
<groupId>me.darefox</groupId>
<artifactId>cobaltik</artifactId>
<version>2.0.0</version>
</dependency>Difference between Wrapper (Cobalt) and Raw API implementation (CobaltRaw) is:
| Cobalt | CobaltRaw |
|---|---|
Returns response in sealed class. To get data you need to use when(response)
|
Returns response unwrapped so you don't need to identify class, but it contains a lot of possible nulls |
You can request with just url, general builder, specific builder, your own custom builder or CobaltRequest
|
You can only request with CobaltRequest
|
import me.darefox.cobaltik.wrapper.Cobalt
suspend fun simpleRequest(): WrappedCobaltResponse {
val cobaltApiUrl = " https://co.wuk.sh/" // or other url of api instance
val cobaltClient = Cobalt(cobaltApiUrl)
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
// request download url with default settings
return cobaltClient.request(youtubeVideo)
}// convert generic response to specific
suspend fun getSpecificResponse() {
val response: WrappedCobaltResponse = simpleRequest()
when (response) {
is ErrorResponse -> println("error: ${response.text}")
is RedirectResponse -> println("redirect: ${response.redirectUrl}")
is StreamResponse -> println("cobalt stream: ${response.streamUrl}")
else /* PickerResponse, RateLimitResponse, SuccessResponse */ -> println(response)
}
}suspend fun overrideDefaultRequest(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url with overriding default settings
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
return cobaltClient.request(youtubeVideo) {
videoQuality = VideoQuality.MAX
videoCodec = VideoCodec.AV1
muteAudio = true
}
}suspend fun useSpecificBuidler(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url with specific builders
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
val audioBuilder = AudioRequestBuilder(youtubeVideo)
cobaltClient.request(audioBuilder) {
// AudioRequestBuilder create only-audio requests
// so you can edit only audio related settings
audioFormat = AudioFormat.MP3
useDubLang = false
// videoCodec = VideoCodec.AV1 - ERROR
}
val tiktokVideo = "https://www.tiktok.com/@rooroo01636/video/7284682918864145696"
val tiktokBuilder = TikTokRequestBuilder(tiktokVideo)
return cobaltClient.request(tiktokBuilder) {
// TikTokRequestBuilder configures TikTok-specific settings,
// but Cobalt may handle other supported media (e.g., YouTube) if the URL provided is different
downloadFullTikTokAudio = true
removeTikTokWatermark = true
muteAudio = false
}
}suspend fun useRequestObject(cobaltClient: Cobalt): WrappedCobaltResponse {
// request download url using request object
val youtubeVideo = "https://www.youtube.com/watch?v=qWNQUvIk954"
val request = CobaltRequest(
url = youtubeVideo,
videoCodec = VideoCodec.AV1,
videoQuality = VideoQuality.MAX,
useDubLang = true,
isAudioMuted = false
)
return cobaltClient.request(request)
}fun getServerInfo(cobaltClient: Cobalt): CobaltServerInfo {
return cobaltClient.getServerInfo()
}fun createRawClient(): CobaltRaw {
val cobaltApiUrl = "https://co.wuk.sh/" // or other url of api instance
return CobaltRaw(cobaltApiUrl)
}suspend fun rawRequest(rawClient: CobaltRaw): CobaltResponse {
val request = CobaltRequest(
url = "https://www.youtube.com/watch?v=qWNQUvIk954",
videoCodec = VideoCodec.AV1,
videoQuality = VideoQuality.MAX,
useDubLang = true,
isAudioMuted = false
)
return rawClient.request(request)
}suspend fun getServerInfoRaw(rawClient: CobaltRaw): CobaltServerInfo {
return rawClient.getServerInfo()
}