Giter VIP home page Giter VIP logo

dorian25 / otakuapuri Goto Github PK

View Code? Open in Web Editor NEW
18.0 2.0 0.0 430.78 MB

Otakuapuri is a manga downloader and anime streaming application that provides an easy and convenient platform for manga and anime enthusiasts. Users can download their favorite manga in PDF format and stream their favorite anime series.

License: MIT License

Python 83.07% HTML 16.93%
manga-downloader manga-scraper mongodb python3 tkinter-gui webscraper manga otaku pdf-generation anime

otakuapuri's Introduction

Generic badge GitHub release (latest by date including pre-releases) Github All Releases GitHub issues made-with-python CodeFactor GitHub license

The ultimate app for all anime and manga enthusiasts

Welcome to the presentation page of my manga download and anime streaming application project!

The goal of this application is to provide an easy and convenient platform for manga and anime enthusiasts, allowing them to download their favorite titles in PDF format and watch them via streaming.

In developing this application, I wanted to fill a gap in the current offering of anime streaming sites, by offering a simple and efficient solution for downloading and viewing manga in high quality. I also wanted to provide an optimal user experience by offering features such as the ability to watch anime openings/endings to add an immersive touch to the world of manga and anime.

This application was designed for manga and anime fans who are looking for a reliable and user-friendly platform to discover and enjoy their favorite works. I am confident that this application will meet the expectations of even the most demanding users and I am excited to see the community grow around this project.

Thank you for your interest in this project and I hope you enjoy the experience offered by this manga download and anime streaming application.

Dear Otaku, I hope you are ready ツ

Features

  • 🔍 Search engine - search your favorite manga (through more than 800 series available)
  • 📖 Manga Reader - read manga smoothly and enjoyably, zooming in or adjusting the size of dialogue bubbles to suit your preferences.
1️⃣ 2️⃣ 3️⃣
p1 p2 p3
  • 📥 Manga-Downloader - download the whole volume or the last chapter in pdf

  • 📺 Anime Streaming - Users can stream their favorite anime series directly from the Otakuapuri platform.

  • ⏯️ Anime Openings and Endings - Users can also watch anime openings and endings from the Otakuapuri platform.

  • 💬 Codec - Users can chat directly with his favorite manga characters using ChatGPT with an interface similar to the Metal Gear Solid Codec!"

  • 📻 Live Radio - listen to the cream of the crop of the most popular anime OST via live radio ANISON.FM
  • 🏆 Top 100 - best manga according to MyAnimeList
  • Random manga - if you want to discover a new manga, you can choose one at random
  • 📊 Dashboard - access multiple information about the database here

Sources

Source Content Language
Sushi-scan Manga fr
Anime-sama Anime en en
Manganato Manga fr

Dependencies

⚠️ You need to install the latest version of VLC to be able to watch video.

🌐 A GOOD AND STABLE INTERNET CONNECTION IS NEEDED

Library Usage Link
img2pdf Merge images into a pdf file https://gitlab.mister-muffin.de/josch/img2pdf
mtTkinter MultiThreading with TKinter https://github.com/RedFantom/mtTkinter
cloudscraper Scraping with bypassing Cloudfare https://github.com/VeNoMouS/cloudscraper
pytube Download Youtube videos https://github.com/pytube/pytube
python-vlc Play video with VLC https://github.com/oaubert/python-vlc
youtube-dl Download MP4 videos (not youtube) https://github.com/ytdl-org/youtube-dl
tkwebview2 Display pywebview in Tkinter Frame widget https://github.com/Smart-Space/tkwebview2

Contributing

Pull requests are welcome. Please do not hesitate to contribute to the development of the application by proposing improvements, reporting bugs or providing constructive feedback. It is through collaboration and sharing that this project will continue to evolve and improve over time.

For major changes, please open an issue first to discuss what you would like to change.

Credits

  • Thanks to @MitchellMason for his Gameboy-Intro-Generator which allowed me to make the splash screen of the application with the style of the Gameboy Color
  • requirements.txt was generated with the library pipreqs
  • .exe was generated with the library pyinstaller

Disclaimer

💖 Please support the publishers and authors by purchasing their works 💖

License

MIT

otakuapuri's People

Contributors

dorian25 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

otakuapuri's Issues

MangaReader : Using tkwebview2 to bypass Cloudflare

tkwebview2 is an integration of the pywebview library into a tk.Frame widget of Tkinter.

  • display of the manga cover
  • creation of a manga reader to read all pages (from left to right)

in the future

  • why not use it to display the video players we see on some sites, it would avoid downloading the video

Several downloads at the same time

Scenario

  • The user clicks on a volume to download. The download begins.
  • During the download, he can click on another volume to download it.

Solution

  • Disable the mouse click as long as the current download is not finished, so as not to download several volumes at the same time

Cursor shape (mediaplayer)

Scenario

  • When the user moves the mouse cursor over the Mediaplayer buttons, the cursor does not change shape.

Solution

  • When the user hovers the mouse over one of the Mediaplayer buttons, the cursor will change to the shape of a hand.

Information of the downloading

Shows which episode is currently being downloaded.

  • Downloading:
  • Version/Season/Episode
  • (percentage %)

Downloading: VF/Saison 1/EPISODE 1 (48%)

[BUG] Bad episode redirection

class : VideoPlayerFrame
function : onChangeEpisode
code : numero_episode = int(self.var_episode.get().split(" ")[1]) - 1

Example if we select EPISODE 394 of the season 6 of One piece (Season 6 includes episodes 390 à 516 i.e. 126 episodes)

numero_episode = 393

IndexError: list index out of range

Solution :

Redefine the data structure schema to have directly a dictionary with the episode number as key and the url as value

Tutorial

Add a complete tutorial on how to start the software !

IFrame original videoplayer for Anime

Thanks to the fabulous tkwebview2 library, you can integrate parts of any website into a Tkinter application (like an HTML iframe).

In the site that broadcasts the animations, it uses iframes.

An inline frame (iframe) is a HTML element that loads another HTML page within the document. It essentially puts another webpage within the parent page.

It stores virtually no video. It simply integrates video players from various sites that host these videos.

When extracting the videos (Webscraping ETL), we take the url of the original video player located in the src attribute of the iframes so that we can directly load the video player into the tkinter application via the tkwebview2 library.

HTML code of the iframe
image

original website
image

otakuapuri app
image

[BUG] Download pages of a manga

Problem

  • Use of concurrent download with a thread pool (class ThreadPoolExecutor) sometimes causing some pages to fail to download.

Solution

  • Download sequencially (in a for loop) each page and add a random float delay (between 0 and 1 second) between download

[TODO] Installer + Auto Update

  • Use of InstallForge to create an installer that will add the files necessary for the application to function properly into C:\Program Files (x86)
  • Have a permanent storage.
  • Be able to automatically download the last update using a script.

Stream Music

Instead of using mp3 files which can take up storage space and increase the size of the application.

We preferred a streaming link.

The python-vlc library allows to stream music from a url.

So I found a link to an Anison.FM radio.

Chat with a character

Chat with a character via the codec of metal gear solid

image

  • UI having aspect of the codec introduced in the game Metal Gear Solid
  • Sound effect (call sound)
  • The user has the choice to ask questions to the character according to different themes (evolution, adventure, hobbies, relationships with other characters...)
  • the characters are played by ChatGPT
  • Change of interlocutor with directional arrow
  • Animated GIF

Stop the music during a redirection

On the search page, the user can listen to music.

While the music is playing, the user chooses to go to a manga page, the music does not stop.

If he decides to go back to the search page, the mediaplayer is paused while the music is still playing.

Display bug : this is confusing.

[TODO] Signature of .exe

Signature of the .exe with a digital certificate so that the anti-virus does not block the launching of the application and does not consider it as a virus

Update of MALRankingFrame

  • Possibility to browse the MyAnimeList ranking with the Next 50 and Prev 50 buttons
  • Web scraping in realtime of the webite MAL
  • Ajout du logo MAL
  • Linked to the database of Manga (MongoDB -> suhsiscan -> manga fr)

Get Data from Data API (MongoDB)

Problem:

The data extracted from the sushi scan site is not up-to-date in the application. Indeed, they are stored in a sql file which is not up to date. No function has been implemented to update the relational database.

Solution:

Create a data pipeline ETL or EL, using Apache Airflow, which will extract and load the data from the sushi-scan site into a MongoDB database (collection). Then, generate an access to the Data API that MongoDB

Optimization the downloading of covers

Scenario

  • The user searches for the series "Spy x Family".
  • He is redirected to the page of the series and sees all the available volumes
  • The covers are uploaded to the tmp/covers/.
  • The user decides to return to the search page
  • The previously downloaded covers are then directly deleted from the tmp/covers/ folder
  • If the user decides to come back to the 'Spy x Family' series, it is necessary to re-download again

Optimization

  • Instead of deleting the covers as soon as the user returns to the search page, we keep them stored to avoid re-downloading them.

Placeholder Entry (Search Page)

Scenario

  • The user wants to search a manga
  • He clicks in the search bar but the placeholder "Search a manga" is not removed

Mediaplayer buttons display bug

Scenario

  • When the music is playing, the button has the "play" icon
  • When the music is paused, the button has the "pause" icon

Solution

  • When the music is launched, the "pause" button is displayed.
  • When the music is paused, the "play" button is displayed

[BUG] Stop video and downloading

TODO

  • Delete youtube-dl.log

PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: youtube-dl.log'

  • Delete video mp4 file

PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: 'file.mp4'

[BUG] Binding of the videoplayer's commands

Problem

  • Currently no key is binded to the video player (pause, play, forward, backward, full screen...)
  • When we associated keys, this binding was still present in the other pages
    • for example, the F key is associated with full screen, so when we were searching a serie's title that contained an F, the application went to full screen.

Solution

  • Unbind all keys when the user leaves the video player (SerieFrame)

The display size of the synopsis

Problem

  • if the synopsis is too long, it takes up the whole height of the page, which does not leave enough space for the list of volumes/chapters.

Solution

  • Allow to reduce the synopsis if it is too long or put a fixed size with a scrollbar.

[BUG] youtube-dl does not work when the console attribute of pyinstaller is False

Problem

  • Downloading an anime with the youtube-dl library does not start when the executable generated by pyinstaller has the console mode disabled (console=False in App.spec)
  • This is because youtube-dl uses the standard output to display information about downloads and the standard output is redirected to the console when the console parameter is set to True.

Solution

  • We can use youtube-dl by redirecting the output to a file using the Logger method
  • We will write the download information directly to a temporary file youtube-dl.log. This way we can leave the console attribute at False.

Access to chapters of a Manga

When the user lands on the page of a manga, he will have the choice to view the list of volumes AND/OR chapters.

This will be presented in the form of tabs: a "Volumes" tab and a "Chapters" tab.

Redesign SerieFrame

  • Dark mode
  • Single type of cover for manga (red)
  • Single type of cover for chapter (blue)
  • New back button
  • Notebook with multiple tabs :
    • "Details",
    • "Volumes"|"Chapitres",
    • "Statistics" & "Personnages" if the serie is in the top 1000 of MAL

Ideas of new features

  • Author Page : if the user clicks on the author of a series, he will be redirected to a page where there will be information about the author and all the works he has created or participated in
  • Ranking Page : a button will be present in the search page to display the ranking (top 50 for example) of top mangas according to myanimelist.net
  • Search Page : numbers/stats concerning the local database (sqlite) will be present in the search page (e.g.: total number of series, total number of volumes, ...)

Update OptubeFrame

  • Added a 3 second splash screen
  • Improved video display
  • Added a control bar with play, pause, next, prev, fullscreen buttons
  • Appearance / Disappearance of the control bar depending on the mouse position
  • Authentication via YoutubeTV to avoid a pytube bug

Add a filter to sort the elements

Goal

  • For Volumes/Chapters => sort by number (ASC / DESC)
    • instead of scrolling to the end, the user will be able to sort the volumes of a serie by volume number
  • For Characters => sort by name (A-Z / Z-A), sort by number of likes (ASC / DESC)

Error 403 Forbidden : Cloudflare on sushiscan

image

The site sushiscan.net has set up a protection via Cloudflare to block the scrapers robots (non-human user)

Impossible to download images / pages of a manga via the module cfscrape or cloudscraper which are supposed to bypass the Cloudflare challenge because it is the v2

Some methods are possible:

  • connect via a proxy
  • try to solve the challenge by sending a request with a header containing a cookie that has the variables cf_clearance and cf_chl2.
  • use an undetected embedded browser undetected_chromedriver but requires xvfb to be invisible (not compatible with Windows)
  • use an integrated browser like pywebview / tkwebview2 but impossible to download images only look at them.

Download Anime

The user can download an anime by choosing the audio version, episode and season.

the user can choose where to download the .mp4 file.

Screenshots of the feature

default navbar
image

choice of the episode to download
image

dialog message
image

choice of location and filename
image

downloaded video and proprieties (size, duration, type of file...)
image

video playback
image

Error Displaying Cover Series

To obtain the cover of a manga series, we take the first page of volume 1.

However, if the series has no volumes but only chapters, an error occurs, as there is no page for volume 1 (because it doesn't exist).

Solution

Take the first page of the first chapter or take a default image for the cover.

Results Box (Search Page)

  • Change the width and position of the results box to coincide with the search bar
  • Change of colors when you move the mouse over an item in the list of search results

Otakuapuri User Account

Users can access certain functions by creating an account:

  • Like / Unlike series
  • track his progress in reading manga or watching anime
  • discuss in the forum section of each series.

Watch Openings / Endings of Anime

Allow the user to play videos like on Youtube. A design accordingly will be proposed to resemble as much as possible the Youtube platform.

I found a playlist of more than 1000 videos with openings / endings of anime.
It is proposed by the channel Crunchyroll on Youtube.

The pytube library is essential to get information about the videos + download them one by one.
The python-vlc library allows to use the vlc player directly in the TKinter application.

Authentification Page (email-only)

Step 1 : click on login button

Step 2 : enter a valid email address

To connect to his profile or to create one, the user must provide a valid e-mail address (respecting the conventional format and not exceeding a length of 62 characters).

Step 3 : enter the verification / authentification code

Once the address has been entered and validated, to authenticate, the user must enter the 6-digit numerical code sent to his e-mail address.

MAL Tops and information in real time

Get the latest MAL rankings in real time. Also concerning stats (number of users, number of likes, ranking, notes, etc...)

That is to say, webscraping the site of MAL in the TKinter application instead of relying on a past ranking saved in a CSV file.

Random manga

A button will allow the user to "discover" a new manga.
We draw randomly from the list of available mangas.

Add Anime Tab on Serie Frame

An additional tab will be available to list the manga adaptation in anime:

  • The name of the tab will be "Anime".
  • The source site will be Anime-Sama
  • Mainly VF or VOSTFR (see another source site for VOSTEN)
  • List of the different seasons/episodes/films published on the Anime-Sama website
  • The user will be able to download videos in mp4 or directly view the video on the application

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.