A Go package for resolving HLS streaming URLs from IMDb IDs via vidsrc.me / vidsrc.net without ads. Extract direct playback links for movies and TV shows with multiple quality variants.
- 🎬 Support for both movies and TV shows
- 🎯 Resolve HLS master playlists from IMDb IDs
- 📺 Extract multiple quality variants (resolution, bandwidth, direct URLs)
- ⚡ Simple and straightforward API
- 🔒 Built-in timeout handling for HTTP requests
go get github.com/lestwastaken/lestresolverThis package requires:
go get github.com/PuerkitoBio/goquerypackage main
import (
"fmt"
"log"
"github.com/lestwastaken/lestresolver"
)
func main() {
opts := lestresolver.ResolveOptions{
IMDBID: "tt1300854", // Iron Man 3
Type: lestresolver.Movie,
}
streams, err := opts.ResolveStreams()
if err != nil {
log.Fatalf("failed to resolve: %v", err)
}
for _, s := range streams {
fmt.Printf("Resolution: %s | Bandwidth: %s\n", s.Resolution, s.Bandwidth)
fmt.Printf("URL: %s\n\n", s.URL)
}
}package main
import (
"fmt"
"log"
"github.com/lestwastaken/lestresolver"
)
func main() {
opts := lestresolver.ResolveOptions{
IMDBID: "tt0944947", // Game of Thrones
Type: lestresolver.TV,
Season: 1,
Episode: 1,
}
streams, err := opts.ResolveStreams()
if err != nil {
log.Fatalf("failed to resolve: %v", err)
}
for _, s := range streams {
fmt.Printf("Resolution: %s | Bandwidth: %s\n", s.Resolution, s.Bandwidth)
fmt.Printf("URL: %s\n\n", s.URL)
}
}Represents the type of content to resolve.
const (
Movie MediaType = "movie"
TV MediaType = "tv"
)Configuration for resolving streams.
type ResolveOptions struct {
IMDBID string // IMDb ID (e.g., "tt1300854")
Type MediaType // Movie or TV
Season int // Required for TV shows
Episode int // Required for TV shows
}Represents a single quality variant of a stream.
type StreamVariant struct {
Resolution string // e.g., "1920x1080"
Bandwidth string // e.g., "5000000"
URL string // Direct HLS stream URL
}Returns the HLS master playlist URL.
opts := lestresolver.ResolveOptions{
IMDBID: "tt1300854",
Type: lestresolver.Movie,
}
masterURL, err := opts.ResolveVariants()
if err != nil {
log.Fatal(err)
}
fmt.Println("Master Playlist URL:", masterURL)Fetches the master playlist and returns all available stream variants.
opts := lestresolver.ResolveOptions{
IMDBID: "tt1300854",
Type: lestresolver.Movie,
}
streams, err := opts.ResolveStreams()
if err != nil {
log.Fatal(err)
}
for _, stream := range streams {
fmt.Printf("%s: %s\n", stream.Resolution, stream.URL)
}IMDb IDs can be found on IMDb.com:
- Search for your movie or TV show
- The URL will contain the ID:
https://www.imdb.com/title/tt1300854/ - Use the
ttID (e.g.,tt1300854)
The resolved URLs are standard HLS streams and can be used with any HLS-compatible player:
vlc "https://example.com/stream.m3u8"ffplay "https://example.com/stream.m3u8"mpv "https://example.com/stream.m3u8"The package returns descriptive errors for common issues:
streams, err := opts.ResolveStreams()
if err != nil {
switch {
case strings.Contains(err.Error(), "imdbId is empty"):
log.Fatal("IMDb ID is required")
case strings.Contains(err.Error(), "season and episode must be set"):
log.Fatal("Season and episode required for TV shows")
case strings.Contains(err.Error(), "unexpected status"):
log.Fatal("Network error or content unavailable")
default:
log.Fatalf("Error: %v", err)
}
}If you only need the master playlist URL without parsing variants:
opts := lestresolver.ResolveOptions{
IMDBID: "tt1300854",
Type: lestresolver.Movie,
}
masterURL, err := opts.ResolveVariants()
if err != nil {
log.Fatal(err)
}
// Use masterURL directly
fmt.Println(masterURL)streams, err := opts.ResolveStreams()
if err != nil {
log.Fatal(err)
}
// Find highest quality
var best StreamVariant
var maxBandwidth int
for _, s := range streams {
if bandwidth, _ := strconv.Atoi(s.Bandwidth); bandwidth > maxBandwidth {
maxBandwidth = bandwidth
best = s
}
}
fmt.Printf("Best quality: %s (%s)\n", best.Resolution, best.URL)- Requires active internet connection
- HTTP requests have a 10-second timeout
- Depends on external service availability
- Some content may be geo-restricted
Contributions are welcome! Please feel free to submit issues or pull requests.
This project is created by lestwastaken.
This tool is for educational purposes only. Users are responsible for ensuring their use complies with applicable laws and terms of service. The authors are not responsible for any misuse of this software.
- GitHub: github.com/lestwastaken
- Discord: lestwastaken
Made with ❤️ by lestwastaken