Skip to content

feat(extractors): add StreamRuby extractor - #3206

Closed
mehdigm4life wants to merge 2 commits into
recloudstream:masterfrom
mehdigm4life:feat-streamruby-extractor
Closed

mehdigm4life wants to merge 2 commits into
recloudstream:masterfrom
mehdigm4life:feat-streamruby-extractor

Conversation

@mehdigm4life

Copy link
Copy Markdown

Adds support for the StreamRuby / rubyvidhub.com embed hosts, which are used as a video source by a number of streaming sites.

The extractor:

  • fetches the embed page first to seed the session cookie required by the site
  • posts to the /dl endpoint to get the player script
  • unpacks the packed JS and pulls the HLS stream out of the jwplayer sources

Also ships a StreamRubyCom variant that targets the streamruby.com mirror domain. The file code is parsed so that both /e/{code} and /embed-{code}.html URLs work.

Includes a library abi dump refresh so the binary compatibility check matches the JDK 17 toolchain used by CI.

}

@Prerelease
open class StreamRuby : ExtractorApi() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like the same logic as LuluStream, please inherit from that one if possible

@fire-light42

Copy link
Copy Markdown
Collaborator

No, I mean literally:

class StreamRuby : LuluStream() {
    override val name = "StreamRuby"
    override val mainUrl = "https://rubyvidhub.com"
}

Does that not work?

@mehdigm4life

Copy link
Copy Markdown
Author

It can't be a plain subclass because the site needs more than LuluStream's flow: the filecode comes from URLs like /embed-{code}.html (and /e/{code}), the embed page has to be fetched first to seed the session cookie before posting to /dl, and the /dl response is packed JS that has to be unpacked before the stream URL can be pulled out. That's why the extractor overrides just those three steps while reusing LuluStream's overall flow (getFileCode → getPlayerScript → parsePlayerScript).

Happy to drop it down to a plain subclass if it turns out the plain flow works on the live sites.

@fire-light42

Copy link
Copy Markdown
Collaborator

Okay I understand 👍

Please share a demo video link for testing and to see if any other extractor implements the required logic

@mehdigm4life

mehdigm4life commented Sep 22, 2026 •

Copy link
Copy Markdown
Author

Here are some working demo links to test with — they cover both URL formats the extractor parses:

https://streamruby.com/e/sp03sbfzp0tc (filecode sp03sbfzp0tc)
https://streamruby.com/embed-sp03sbfzp0tc.html

Both work fine, and the extractor grabs the HLS stream correctly.

@mehdigm4life

Copy link
Copy Markdown
Author

@fire-light42

@mehdigm4life mehdigm4life closed this by deleting the head repository Sep 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants