Giter Site home page Giter Site logo

junkfood02 / seal Goto Github PK

View Code? Open in Web Editor NEW
7.9K 91.0 377.0 10.19 MB

🦭 Video/Audio Downloader for Android, based on yt-dlp, designed with Material You

License: GNU General Public License v3.0

Kotlin 100.00%
android jetpack-compose youtube-dl material-design f-droid kotlin youtube-downloader yt-dlp

seal's Introduction

Seal

Video/Audio Downloader for Android

English   |    简体中文   |    繁體中文   |    العربية   |    Portuguese   |    Українська   |    ภาษาไทย   |    فارسی   |    Italiano   |    Azərbaycanca   |    Русский   |    Српски   |    日本語   |    Indonesia

F-Droid GitHub release (latest by date) GitHub release (latest by date including pre-releases) Keep a Changelog GitHub all releases GitHub Repo stars Supported-Sites Telegram Channel Matrix

📱 Screenshots


📖 Features

  • Download videos and audio files from video platforms supported by yt-dlp (formerly youtube-dl).

  • Embed metadata and video thumbnail into extracted audio files supported by mutagen.

  • Download all videos in the playlist with one click.

  • Use embedded aria2c as external downloader for all your downloads.

  • Embed subtitles into the downloaded videos.

  • Execute custom yt-dlp commands with templates.

  • Manage in-app downloads and custom command templates.

  • Easy to use and user-friendly.

  • Material Design 3 style UI, with dynamic color theme.

  • MAD: UI and logic written with pure Kotlin. Single activity, no fragments, only composable destinations.

⬇️ Download

For most devices, it is recommended to install the arm64-v8a version of the apks

  • Download the latest stable version from GitHub releases

    • Install the pre-release versions to help us test out new features & changes
  • Stable releases are also available on F-Droid

💬 Contact

Join our Telegram Channel or Matrix Space for discussion, announcements, and releases!

💖 Sponsors

GordonzubleDaniel

Seal will be always free and open source for everyone. If you like it, please consider sponsoring me!

🤝 Contributing

Contributions are welcome!

You can help translate Seal on Hosted Weblate.

Translate status

Note

For submitting bug reports, feature requests, questions, or any other ideas to improve, please read CONTRIBUTING.md for instructions and guidelines first.

⭐️ Star History

Star History Chart

🧱 Credits

Seal is a simple GUI of yt-dlp, based on youtubedl-android

Some of the UI designs and codes are borrowed from Read You and Music You

dvd

Material color utilities

Monet

📃 License

GitHub

Warning

Except for the source code licensed under the GPLv3 license, all other parties are prohibited from using Seal's name as a downloader app, and the same is true for Seal's derivatives. Derivatives include but are not limited to forks and unofficial builds.

seal's People

Contributors

alirezax5 avatar anispwyn avatar bobbyesp avatar chiyi4488 avatar comradekingu avatar fnfunfunc avatar girshcatt avatar jingfelix avatar jonathansutton1 avatar juhaotao avatar junkfood02 avatar kukuruzka165 avatar licaon-kter avatar maboroshin avatar marco-9456 avatar mumu12641 avatar nexirs avatar nitrogenez avatar p3g4asus avatar poussinou avatar pumpa0 avatar qaz-7 avatar s4velyeva avatar sanao1006 avatar serenov7 avatar shuvashish76 avatar weblate avatar

Stargazers

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

Watchers

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

seal's Issues

Download Video List

Hello,
Can you add download video lists like in (Snaptube) to pause / resume / cancel a download from the list. Thanks

Threaded Download Parts

Hello,
Can you add threaded downloads like in (ADM & 1DM) to enhance the download speeds. Thanks

How to build the code source.

Hi! I wanted to contribute to the project but i don't know how to build the source in Android Studio because i need the keystore.properties file. I don't know if you have something to build without it.

Override fields

I used seal to download album/playlist from soundcloud it seperates each tracks to their own albums. I would like that fixed or maybe add the option to override fields. I used --parse-metadata in dvd before, but its for giving tracks their own track number (seal doesnt number the tracks with the native downloader). I think that command can be used in this case too. Either way this is a great feature to have.

Request for Android 6 Compatibility

Hi,

I would Request Lowering App's Minimum Sdk Requirement to 23. It would be useful to many users like me who are stuck on Android 6 & can't upgrade due to various reasons and use this app.

Thank You & Cheers for this Wonderful Open Source Project.

[BUG] Downloading mp4 no matter what I tell Seal to download?

(First github post, sorry if it's formatted weird or something)

So, it seems like no matter what I tell Seal to download, it downloads mp4 files and translates them once they're downloaded. I've got two experiences.

Last night, I told it to download an in-progress youtube stream as audio, specified as m4a. The final file is 153 MB. But when downloading, it was downloading an mp4 file. I don't know what resolution because I didn't get an option, but the mp4 ended up being about 4.1 GB . Once the stream ended, I tried playing the mp4, and it worked. When I left the player and went back to the file manager, the mp4 was inexplicably cloned, one of them was cut to m4a, and the other was deleted. But what I was expecting to take up 150 MB took up, at one point, 8 GB .

Right now, I'm downloading another in-progress youtube stream, this time specified as 480p webm. But it's still downloading an mp4. Once it's done, I'll go watch the file manager and see if it clones the file again before spitting out a webm file.

(UPDATE: I watched it for 15 minutes after the stream ended, and it never said it was done downloading, cloned the mp4, or converted it to webm. I'll check in the morning if it's said it's done downloading or if it's converted to webm. The file is 1.37 GB and the stream was about 3 hours long, so I'm guessing it is 480p since the last 3 hour stream was 4.1 GB)

Idk if this is a bug or if this is just how it's supposed to work? This isn't how youtube-dl works on my pc, and if this is intended behavior, maybe it should be in the app description on F-Droid?

Oh, and in case it's relevant. I'm running version 1.0.0 , and am on an Andorid version 12 phone.

(Bug report's over, but I just wanted to say that this is a very nice app. It's more polished than I expected, and really easy to use. Thanks for all your work!)

Share sheet style download option

When i share a video file from to seal using seal instead of opening the app.. it would be great if we can have an option similar to how powertube does it... A simple overlay card to Change any download option..

Suggestion

Add Planned and Rejected stuff to README so that people don't duplicate the same issues and suggestions
and maybe a Discord server so that users can share there Custom Commands and help with the project.

Download file in foreground service

Hi
Are you thinking about placing download task in a foreground service so that it is more unlikely to be killed by android OS? If you like the idea and you are not already working on it, I can work to do it. I am thinking about placing the download task in a foreground service, so that, if the app is killed, the downloads continues. If the app is manually restarted after being killed while the service is still alive, the app connects to the service and shows the download progress.
What do you think?

[ Improvement Request ] UI/UX Improvements

Hello again.

I've thought about UI/UX design, and made this.
It'll be better if app will have a little bigger and more rounded interface.

I've separated thumbnail and title sections to make separated floating cards, and also moved buttons to the center, also as card.
And one small improvement I see - make progress bar floating, like on picture.

Hope that helps.

Forever your's
vicsave XOXO :)

Extract only url's

Hello, i just installed your app and im wondering is it possible to add function to just extract url of video or audio stream and display it so that then this direct url can be used in something else

Download error

So I'm getting the following error message:

Usage: __main__.py [OPTIONS] URL [URL...]

__main__.py: error: --parse-metadata '%(album|Album - Operation: Doomsday (Complete))s:%(meta_album)s' is invalid; incomplete format key

I wanted to download this Album

I tried downloading some other albums and it worked but this one didn't

°Show Screenshots°

Screenshot_20220811-054047_Seal

Support device rotation

Is your feature request related to a problem? Please describe.
I'm using this app on my android Tablet & most of the times I use landscape mode by default for all apps.

Steps to reproduce the behavior:

  1. Turn on device "Auto-rotate"
  2. Open Seal app & rotate your device to landscape / reverse-landscape / reverse-portrait mode
  3. App remains in Portrait mode

Describe the solution you'd like
App should support device "Auto-rotation" feature.

Describe alternatives you've considered
There are other apps which can force any app to device rotation for ex: Tap 'n' Turn.
But in my opinion it would be nice if the app itself support device rotation than being forced by another app.

Album art cover isn’t cropped right when downloading YouTube audio

Hello,

I discovered Seal and I would like to use it to download audio from YouTube. The auto tagging feature is really fantastic, however album art cover are not cropped right and have large stripes on the right and left, such as :

signal-2022-08-12-202042_002

(which was downloaded from https://www.youtube.com/watch?v=ddYW119vHP4)

I don’t know if yt-dlp is providing the right album cover, or if it should be cropped manually by Seal, but that feature would be really appreciated to have a squared album cover !

Thank you very much for the app,

cyxae

[Feature Request]

Hello 👋
Since you have added a bug report template, what about adding a feature that let's users copy a few information of their device by long pressing on version in about page ?
This would make a bug report much easier.

Maybe something like this:

Seal Version: 1.0.4
Device: Samsung Galaxy S21
Architecture: aarch64
OS Version: REL 12 (31)

Spotify support

I think that we could add support for Spotify to the app. Like spotdl phyton library does. It think that it gets the song name, searches it in YouTube and then it downloads the song from YouTube

[Improvement request] Split a video with chapters

I think that will be a pretty good idea if we have an option to split a video/music according to his chapters.

There are a repo that already do this for yt-dl (yt-splitter). The code is simple so it can be translated and implemented in the app.

I can try to do this but I'm not very good in Kotlin

Remux not working

I tried using --remux "wav>opus/mp3" on a soundcloud playlist that contains few .wav files using custom command. It gives me this error

ERROR: Postprocessing: Stream #0:0 -> #0:0 

Link : https://m.soundcloud.com/anthonyrusso/sets/covers

my command -o "Soundcloud/%(uploader)s/%(playlist_title|YT-DLP)s/%(playlist_autonumber)02d - %(title)s.%(ext)s" --remux "wav>opus/mp3" --embed-thumbnail --parse-metadata "playlist_index:%(track_number)s" --add-metadata --embed-metadata

UI bug ?

This bug appears first in release 1.0.4 It's also happening sometimes in the command template menu.

Screenshot & Screen record

Screenshot_20220813-192414_Seal

Screen_Recording_20220813-191500_Seal.mp4

[Improvement Request]

Add a function to highlight multiple downloads so users can delete or remove multiple files at once.

Maybe something like this
SmartSelect_20220731-151345_Seal

Custom output

I used to configure dvd to seperate downloads to their own playlist name when downloading songs using -o %(playlist_title). It would be great if that or maybe the feature to add custom output when #34 is done to get custom directories without the default video/audio option greyed out. Thanks for the great app 👍

Storage Selection

If I use the "downloads" button it says "SD card not supported", but if I manually go to downloads from the root of storage it works. Why is this?

Am using 1.0.4

Screenshot_20220817-220240_Files

Audio quality

And option to select audio quality
Example: 320kbps | 256 kbps

My experience with Seal! One of the best!

Hello @JunkFood02 !

First of all thank you for your time in this project!
Beautiful, clean, user-friendly
and more importantly it is suggestable to others!
(Dark mode, custom colors, download personalisation ...
)

  1. One suggestion to be more noob friendly, think about renaming:
    Extract audio to save as audio.

  2. Would it be possible to save audios in separate folder (I don't want to mix it with video files for podcast reasons)

  3. In the downloaded playlist.
    When I select to remove a file, add an option to always remember to delete files.

  • It works with Twitch too!

Thank you again!

Custom command is broken using 1.0.3

I am using the same custom commands from previous versions but now they are broken, showing error ERROR: Fixed output name but more than one file to download: -o but fixed it by removing - from o option and it didn't show any error also removed " at the start and end of field o %(extractor)s/%(uploader)s/%(title)s(%(id)s).%(ext)s also didn't give error. Even when removing the o but they are not working it instead using the default template not my template even though my template is clearly selected.

Every download goes to the Seal folder, not the one specified by the commands.

RedGIFs User

[Improvement Request] Show file size for every downloadable resolution

I was actually pretty amazed opening the app, but one big feature that I really need that isn't there is the file size of the file you are trying to download. For instance, sometimes there is a file size upload limit where I would like to upload the video, so before uploading I want to see what resolution to download the video at to be below that limit. So for instance:
"Original (100MB)
1080p (100MB)
720p (50MB)
480p (12MB)"

Maybe it's even possible to add an option to choose a maximum file size, instead of just video format and video resolution.

Question

Is it possible to have the specify playlist and custom commands work together?

HUGE size on F-droid

For some reason, Seal's download size on F-droid seems to be around 120 MB, when the actual APK size on GitHub is no more than 30 MB.

This makes it a little too expensive to download/update it from F-droid.

Reliable playlist background downloads

2 suggestions to do that:

  1. Add a reminder somewhere in the app to set battery optimization to "unrestricted" for Seal in system settings
  2. Create a separate notification for the playlist progress to track how many videos were downloaded out of the total videos

Thanks for creating Seal, it's already the best GUI of yt-dlp and I'm sure that when it goes to stable releases, it's going to be amazing!

Capture streams from a website URL

There are many cases where the link to a video stream is difficult to get during casual mobile browsing. It would be cool if Seal could grab video URLs itself just from a link to the website you can watch the video on. LM videodownloader already does this, but it's abandoned, unfortunately. I don't believe why Seal wouldn't be able to do it, what do you think?

[Feature Request]

Is it possible to add the following;

  1. Mkv format
  2. Save and embed subtitles to the video.

I know that it's possible with a custom command but it would be great if these futures appear at the (configure before downloading) menu

Universal design, and the reason why UI changes are not the focus of current development

Discussed in #93

Originally posted by JunkFood02 August 3, 2022
As I mentioned in the release announcement for v1.0.0 (#77), Seal is not even intended to be a video downloader at first. But now, we got a large variety of users and contributors. Thank you!

A month earlier, I received an issue (#27) requesting to downgrade the minSdkVersion to 23. At first, I was a bit surprised because both devices I'm currently using are running the latest version of Android. And I can fully use the dynamic color theme of Material You without any extra codes, a new system feature introduced in API 31.

After some investigation and Ctrl+C/V, dark mode and custom color themes work on devices running even Android 6. Hope you like it! (credits to the compatibility of Android and Jetpack Libraries)

Later, I received another issue regarding "device rotation" (#43). But sooner I found out that the real problem is the size or the DPI of the screen.

In short, we can't assume that all users use regular-sized screens, latest systems, and widely spoken languages. Here are some screenshots showing several corner cases we handle.


Screen size: 1280*720, API 23


Tablet, Landscape, API 33


Arabic, RTL layout, mirrored icons


French, the text of the "Start download" button is wrapped into two lines (now fixed)

Retrieve videos from url

Make it possible for a user to paste a link of a website with many videos, let seal detect all videos on the website and show them (thumnnail, name and duration) and allow the user to select one (or more) to download.

App Crash

The app crashed after hitting download. The log file is given below.

java.lang.IllegalArgumentException: Service not registered: com.junkfood.seal.MainActivity$a@46d0c31
at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1759)
at android.app.ContextImpl.unbindService(ContextImpl.java:1786)
at android.content.ContextWrapper.unbindService(ContextWrapper.java:751)
at com.junkfood.seal.MainActivity$b.a(SourceFile:2)
at com.junkfood.seal.ui.page.download.DownloadViewModel$d.j(SourceFile:2)
at s8.a.B(Unknown Source:8)
at h9.k0.run(Unknown Source:86)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Suppressed: h9.i0: [w1{Cancelling}@eaea756, Dispatchers.Main.immediate]

Prevent user from attempting to download more videos at once

A set simple GUI enhancements

  1. Use regular buttons instead of FABs. To my knowledge, the app does not display so much content that scrolling would be necessary, so normal text+icon buttons should be used.
  2. Hide the text field and the buttons when download starts.
  3. Kind of unrelated, but a way to cancel one download similarly to how you can cancel a playlist download would be useful

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.