base on A Beautiful and Feature-rich Music & Video Player with Youtube Support, Built in Flutter <link rel="stylesheet" href="styles.css" />
# <div style="margin-right: 18px; margin-top: 18px; display:flex; vertical-align: middle; align-items: center; max-width: 100%;"><img src="some stuff/namida.png" width="82" style="margin-right: 18px;">Namida</div>
A Beautiful and Feature-rich Music & Video Player with Youtube Support, Built in Flutter
<a href="https://github.com/flutter/flutter">![](https://img.shields.io/badge/Built%20in-Flutter-%23369FE7)
</a>
<a href="https://t.me/namida_official">![](https://img.shields.io/badge/Channel-blue?link=https%3A%2F%2Ft.me%2Fnamida_officialt&logo=telegram&logoColor=white)
</a>
<a href="https://t.me/+FmdfsgKoGmM1ZGFk">![](https://img.shields.io/badge/Chat-blue?link=https%3A%2F%2Ft.me%2F%2BFmdfsgKoGmM1ZGFk&logo=telegram&logoColor=white)
</a>
<a href="https://discord.gg/WeY7DTVChT">![](https://img.shields.io/badge/Discord-7B55C1?link=https%3A%2F%2Fdiscord.gg%2FWeY7DTVChT&logo=discord&logoColor=white)
</a>
<a href="https://github.com/namidaco/namida/releases">
![](https://img.shields.io/github/downloads/namidaco/namida/total.svg)
</a>
<a href="https://github.com/namidaco/namida/releases">
[![Hits-of-Code](https://hitsofcode.com/github/namidaco/namida?branch=main)](https://hitsofcode.com/github/namidaco/namida/view?branch=main)
</a>
<a href="https://github.com/namidaco/namida/releases">
[![](https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/namidaco/namida/badge?style=flat&logo=dart&logoColor=aqua&label=Total%20Lines&color=darkturquoise)](https://ghloc.vercel.app/namidaco/namida?branch=main)
</a>
<a href="https://translate.codeberg.org/engage/namida-translations/">
<img src="https://translate.codeberg.org/widget/namida-translations/namicomp/svg-badge.svg" alt="Translation status" />
</a>
# Sections:
- [Features](#-features)
- [Library \& Indexing](#library--indexing)
- [Look \& Feel](#look--feel)
- [Streaming & Youtube](#streaming--youtube)
- [Others](#others)
- [Some additional cool features](#some-additional-cool-features)
- [Video Integration](#video-integration)
- [Screenshots](#screenshots)
- [Usage Preview](#usage-preview)
- [Installation](#installation)
- [Permission Note](#permission-note)
- [Special Thanks](#special-thanks)
- [Contribute](#contribute)
- [Donate](#donate)
- [Social](#social)
- [LICENSE](#license)
# š 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](#customization-settings)).
## 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)
<details>
<summary>Available formats & example</summary>
- 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 - **<ins>Fading Light</ins>** (Slowed)*)
- `artist`: extracted music artist from video title (***<ins>Navjaxx</ins>** - 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:
```bash
# [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
```
</details>
## 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.
- <p>CAN IMPORT YOUTUBE HISTORY <img src="some stuff/ong.png" width=16 height=16/></p>
- <p>LASTFM TOO AND MAYBE MORE IN FUTURE <img src="some stuff/yoowhat.gif" width=16 height=16/></p>
- 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
<details>
<summary>
###### How locally?
</summary>
typically looks (inside the folders you specificed) for any matching title, matching goes as following:
<br>
-- Alan walker - Faded.m4a
<br>
-- video alAn WaLkER - faDed (480p).mp4
<br>
the video filename should contain at least one of the following:
<br>
1. the music filename as shown above.
<br>
2. title & first artist of the track.
<br>
note: some cleanup is made to improve the matching, all symbols & whitespaces are ignored.
</details>
<details>
<summary>
###### How youtube?
</summary>
- 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.
</details>
- 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
<img src="screens/collection_light_1.jpg" class="imgbr"/>
<img src="screens/collection_light_2.jpg" class="imgbr"/>
<img src="screens/collection_dark_1.jpg" class="imgbr"/>
<img src="screens/collection_dark_2.jpg" class="imgbr"/>
<details>
<summary>
### Customization Settings
</summary>
<img src="screens/customization_settings.jpg" class="imgbr" width="50%">
</details>
<details>
<summary>
### YouTube Miniplayer
</summary>
<img src="screens/yt_miniplayer.png" class="imgbr" width="50%">
</details>
<br>
### Usage Preview
Animating Thumbnail | Recommends & Listens
:-------------------------:|:-------------------------:
<video src="https://github.com/namidaco/namida/assets/85245079/da47c270-9f45-4ff5-a08e-e99e4b7ebb7c.mp4"> | <video src="https://github.com/namidaco/namida/assets/85245079/72e978b3-6e15-4b4e-948a-03b470802b30.mp4">
# Installation
- Stable downloads: [stable-releases](https://github.com/namidaco/namida/releases)
- Beta downloads: [beta-releases](https://github.com/namidaco/namida-snapshots/releases)
- Available variants are `arm` & `arm64`
### Permission Note:
##### the following actions require <span>`all_files_access`</span> 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](https://github.com/MSOB7YY) for their youtube client, which powers youtube section.
> - [@cameralis](https://github.com/cameralis) for their awesome miniplayer physics.
> - [@alexmercerind](https://github.com/alexmercerind) for helping me out a lot.
> - [@lusaxweb](https://github.com/lusaxweb) for their awesome Iconsax icon pack.
> - All packages' maintainers which made namida possible.
> <br>
> ### Ā© Logo by @midjourney
> ###### thanks [@sujxl24](https://github.com/sujxl24) for the monet version
# Contribute
- You can help translating Namida to your language on [translation repo](https://github.com/namidaco/namida-translations)
- Building is not currently possible, see why on https://github.com/namidaco/namida/issues/37#issuecomment-1780341883
# Donate
- Donation will help improve namida and will show appreciation.
<a href="https://www.buymeacoffee.com/namidaco" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 42px;" ></a>
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/U7U0PF2L5)
> Bitcoin: bc1ql802k98ml3aum4v2cm9am4kg2lm5w8w6w2xlhh
> ETH/MATIC: 0x13f1a519228C83BBbDE11BAF804515672f9C6c2A
- Don't forget to š star the repo if you like the project.
# Social
- join us on our platforms for updates, tips, discussion & ideas
- [Telegram (Updates)](https://t.me/namida_official)
- [Telegram (Chat)](https://t.me/+FmdfsgKoGmM1ZGFk)
- [Discord](https://discord.gg/WeY7DTVChT)
# LICENSE
Project is licensed under [EULA](https://github.com/namidaco/namida/blob/main/LICENSE) License.
```
Ā© Copyright (C) 2023-present Namidaco <
[email protected]>
- 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.
```
<a href="https://star-history.com/#namidaco/namida&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=namidaco/namida&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=namidaco/namida&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=namidaco/namida&type=Date" />
</picture>
</a>", Assign "at most 3 tags" to the expected json: {"id":"9581","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"