aimi_lib

A Dart library for interacting with anime APIs and playing videos.

Features

  • Metadata Provider: Search for anime metadata using Kuroiru.
  • Stream Provider: Search and fetch episodes from AllAnime, AnimePahe, and Anizone.
  • Fetch Episodes: Retrieve available episodes for a selected anime.
  • Get Stream Sources: Extract video stream URLs (HLS/MP4) for episodes.
  • Play Video: Launch external video players (MPV, VLC, IINA) or open in browser.
  • Cross-Platform: Works on Windows, macOS, Linux, and Android.

Getting started

Add this package to your pubspec.yaml:

dependencies:
  aimi_lib: ^2.0.0

If you plan to use the built-in Player class to play videos, ensure you have a supported video player installed:

  • MPV (Recommended)
  • VLC
  • IINA (macOS)

Note: This is optional. You can implement your own player logic or use other packages to handle video playback using the URLs provided by StreamSource.

Usage

You can run the example script to see the library in action. The CLI demonstrates the full workflow:

dart run example/aimi_lib_example.dart

Full Workflow (Metadata + Stream)

Use this if you want to display anime details (image, synopsis, score) before playing.

import 'package:aimi_lib/aimi_lib.dart';

void main() async {
  // 1. Search in Metadata Provider
  final db = Kuroiru();
  final results = await db.search('Naruto');
  final searchResult = results.first;
  
  // 2. Get Details (Optional)
  final details = await db.getDetails(searchResult.id);
  print('Title: ${details.title}');

  // 3. Initialize Stream Provider
  final stream = AllAnime(); // or AnimePahe(), Anizone()

  // 4. Search in Stream Provider using the title from metadata
  final streamResults = await stream.search(details.title);
  final streamAnime = streamResults.first;

  // 5. Get Episodes
  final episodes = await streamAnime.getEpisodes();
  final episode = episodes.first;

  // 6. Get Stream Sources
  final sources = await episode.getSources();
  print('Stream URL: ${sources.first.url}');

  // free memory
  stream.close();
}

If you don't need metadata, you can search directly on the stream provider.

import 'package:aimi_lib/aimi_lib.dart';

void main() async {
  // 1. Initialize Stream Provider
  final stream = AllAnime(); // or AnimePahe(), Anizone()

  // 2. Search directly
  final streamResults = await stream.search('Naruto');
  final streamAnime = streamResults.first;

  // 3. Get Episodes
  final episodes = await streamAnime.getEpisodes();
  final episode = episodes.first;

  // 4. Get Stream Sources
  final sources = await episode.getSources();
  print('Stream URL: ${sources.first.url}');

  // free memory
  stream.close();
}

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Credits

  • Special thanks to ani-cli for providing the base logic and inspiration.
  • Special thanks to animepahe-dl for the AnimePahe source logic.
  • Special thanks to Kuroiru for providing the anime database.

Libraries

aimi_lib
A library for interacting with anime APIs and playing videos.