Skip to content

A Beautiful and Feature-rich Music & Video Player with Youtube Support, Built in Flutter

License

Notifications You must be signed in to change notification settings

namidaco/namida

Repository files navigation

Namida

A Beautiful and Feature-rich Music & Video Player with Youtube Support, Built in Flutter

Hits-of-Code Translation status

Sections:

🎉 Features

  • Everything you might expect from a music player, in addition to the following:

Library & Indexing

  • Powerful Indexer & Tag Editor, powered by @jaudiotagger.
  • Artists and Genres Separators.
  • Prevent Duplicated Tracks.
  • Set Minimum File Size & Duration.
  • Folders-based Library system, with the ability to exclude folders as well.
  • Sort by almost any property of the track or the album.. etc.

Look & Feel

  • Material3-like Theme.
  • Dynamic Theming, Player Colors are picked from the current album artwork.
  • Home, Tracks, Albums, Artists, Genres, Playlists, Queues and Folders Pages.
  • Waveform Seekbar.
  • Lots of customizations (check out customization section).

Streaming & Youtube

  • Best Video & Audio Quality
  • Audio Only Mode
  • Support Downloads, Caching & Offline Playback
  • Video View with gestures support (swipe to control volume, double tap to seek, swipe up/pinch in to enter fullscreen, etc)
  • Edit tags for downloads
  • Optional Auto title/artist/album extraction for downloads and scrobbling
  • Downloads output filename builder (similar to yt-dlp)
Available formats & example
  • Formats:

    • video_id, id: video identifier
    • video_url, url: video full url (https://www.youtube.com/watch?v=`id`)
    • video_title, fulltitle: video full title
    • title: extracted music title from video title (Navjaxx - Fading Light (Slowed))
    • artist: extracted music artist from video title (Navjaxx - Fading Light (Slowed)) or else channel
    • genre: music genre. automatically set to Nightcore when the video title contains "nightcore".
    • ext: format container extension (mp4, m4a, webm). this is not necessary as it would be added automatically
    • channel_fulltitle: channel full name
    • channel, uploader: channel name (excluding - Topic)
    • channel_id, uploader_id: channel id
    • channel_url, uploader_url: channel url
    • timestamp: UNIX timestamp of the video (milliseconds since epoch)
    • upload_date: upload date of the video, converted to local time (yyyyMMdd)
    • view_count: view count of the video
    • like_count: like count of the video
    • description: video description. links are wrapped in a markdown style
    • duration: video duration in seconds (204)
    • duration_string: video duration formatted (3:24)
    • playlist_title: title of the playlist containing the video
    • playlist_id: id of the playlist containing the video
    • playlist: playlist_title if available or else playlist_id
    • playlist_count: total videos count in the playlist
    • playlist_index: index of the video in the playlists (starts at 0)
    • playlist_autonumber: position of the video in the playlists (starts at 1)
    • none: empty field. useful for tags to override any other settings
  • Example:

# [04] music title [(channel name)]
[%(playlist_autonumber)s] %(title)s [(%(channel)s)]

# saving to separate folders
# music playlist/02. music title.m4a
%(playlist)s/%(playlist_autonumber)s. %(title)s.%(ext)s

Others:

  • Sleep Timer (Tracks or Minutes)
  • Crossfade, Play/Pause Fade Effect, along with Skip Silence.
  • Replay Gain (Normalize Audio)
  • Control pausing scenarios (calls, notifications, volume 0, etc..)
  • Define parameters to use for filtering tracks in search lists.
  • Global Tracks Selection
    • allows u to select from multiple places into the same list.
  • Never miss your sessions!
    • persistent and reliable queue system, your sessions are saved for later usage.
  • Reliable History System
    • despite being a flexible system (easily modified, manipulated, imported), it lets u specifiy minimum seconds/percentage to count a listen.
  • Most Played Playlist
    • find out your top tracks based on your history record.

Some additional cool features:

  • Smort Tracks Generation:
    • uuh.. with dis advanced algorithm brought for you, u can generate tracks related to one you currently listening to, typically the ones that you often listened to in the same period. based on your history.
    • also u can generate tracks released around the same time, or from specific range of time, from ratings, from available moods, or randomly.
  • Animating Thumbnail:
    • A thumbnail that animates with the current audio peak, looks cool.
  • Miniplayer Party Mode:
    • Applies an edge breathing effect, colors can be static or dynamic (all the colors extracted from the artwork)
  • Particles Effect
    • they speed up with the audio peak too
  • Track Play Mode
    • when playing from search, you can selected wether to play: selected track only, search results, album, first artist or first genre.
  • Insert after latest inserted
    • Want to insert multiple tracks one after each other? this will get your back.
  • Repeat for N times
    • in addition to normal repeat modes (all, none, one), this one lets you repeat the track for number of times before playing the next track.
  • Extract feat. & ft. artist
    • u won't miss the featured artists in the title, they'll have their own entry inside artists tab.
  • CAN IMPORT YOUTUBE HISTORY

  • LASTFM TOO AND MAYBE MORE IN FUTURE

  • you gonna find decent amount of options/customizations in the settings and inside dialogs so make sure to check them out.

Video Integration

  • For Local Library, Namida is capable of playing videos related to the music, Video can be found either locally or fetched from youtube
How locally?
typically looks (inside the folders you specificed) for any matching title, matching goes as following:
-- Alan walker - Faded.m4a
-- video alAn WaLkER - faDed (480p).mp4
the video filename should contain at least one of the following:
1. the music filename as shown above.
2. title & first artist of the track.
note: some cleanup is made to improve the matching, all symbols & whitespaces are ignored.
How youtube?
  • looks up in the track comment tag (as they are mostly done by @yt-dlp) or filename for any matching youtube link, if found then it starts downloading (and caches) and plays once it's ready, streaming here isn't a good idea as the priority goes for the music file itself.
    • for comment tag, any url format should get matched normally.
    • for filenames, it should contain v=video_id or id=video_id in order to get matched.
  • Since v4.0.0, full video library indexing & playback is supported, videos can now be played independently, as well as dedicated videos folder view.

Screenshots

Customization Settings

YouTube Miniplayer


Usage Preview

Animating Thumbnail Recommends & Listens
animating_thumbnail_breathing.mp4
recommended_listens_history.mp4

Installation

Permission Note:

the following actions require all_files_access permission (requested when needed)
  • editing audio tags
  • creating or auto-restoring backups
  • saving artworks
  • compressing images
  • downloading youtube content
  • playing tracks from a root folder

Special Thanks:

  • @MSOB7YY for their youtube client, which powers youtube section.
  • @cameralis for their awesome miniplayer physics.
  • @alexmercerind for helping me out a lot.
  • @lusaxweb for their awesome Iconsax icon pack.
  • All packages' maintainers which made namida possible.

© Logo by @midjourney

thanks @sujxl24 for the monet version

Contribute

Donate

  • Donation will help improve namida and will show appreciation.

Buy Me A Coffee

ko-fi

Bitcoin: bc1ql802k98ml3aum4v2cm9am4kg2lm5w8w6w2xlhh

ETH/MATIC: 0x13f1a519228C83BBbDE11BAF804515672f9C6c2A

  • Don't forget to 🌟 star the repo if you like the project.

Social

LICENSE

Project is licensed under EULA License.

© Copyright (C) 2023-present Namidaco <namida.coo@gmail.com>
- You may read/compile/modify the code for your personal usage, or for the purpose of contribution for the software.
- Redistributing the program as a whole under different name or license without permission is not allowed.
Star History Chart