25 Commits
1.1.3 ... 1.2.2

Author SHA1 Message Date
MasterAcnolo
cab177e8a7 Merge pull request #14 from MasterAcnolo/build-branch
Build branch
2025-09-20 17:53:59 +02:00
MasterAcnolo
f7244a69ac ReadME Update 2025-09-20 17:42:15 +02:00
MasterAcnolo
c6ed79ed1d Title Window 2025-09-20 17:41:27 +02:00
MasterAcnolo
00e5358bbb Asar 2025-09-20 17:21:38 +02:00
MasterAcnolo
598c35eb54 Asar 2025-09-20 17:00:33 +02:00
MasterAcnolo
00c74ea6c6 Package Update + Notif Fix Issues#13 2025-09-20 16:51:46 +02:00
MasterAcnolo
0c415c9106 Merge pull request #12 from MasterAcnolo/build-branch
1.2.1
2025-09-17 12:29:53 +02:00
MasterAcnolo
b0495d033d FFMPEG Location 2025-09-17 11:10:48 +02:00
MasterAcnolo
d72cc6e0ca Correct Log Folder Name 2025-09-17 10:32:53 +02:00
MasterAcnolo
b59cb9f57f Fix Server.js Path 2025-09-17 10:30:48 +02:00
MasterAcnolo
af743be5b0 GitIgnore Fix 2025-09-13 16:18:17 +02:00
MasterAcnolo
024d039701 Package Updated for 1.2.1 + ReadME Fix 2025-09-13 15:41:19 +02:00
MasterAcnolo
e9a91656bc Package JSON Updated for 1.2.1 2025-08-31 18:09:16 +02:00
MasterAcnolo
3505606b44 ADD Licence 'discordRPC.js' 2025-08-31 18:04:07 +02:00
MasterAcnolo
815abae0a0 YT-DLP Moove 2025-08-31 16:30:54 +02:00
MasterAcnolo
004271241e Merge pull request #11 from MasterAcnolo/1.2
Update 1.2
2025-08-29 13:57:11 +02:00
MasterAcnolo
8295967ff2 ReadME Update 2025-08-29 13:45:52 +02:00
MasterAcnolo
053dca365c Package Update 2025-08-29 13:45:02 +02:00
MasterAcnolo
62110b1a5b Package Update 2025-08-29 13:38:20 +02:00
MasterAcnolo
aae9b2866c Discord RPC 2025-08-29 13:36:36 +02:00
MasterAcnolo
0d8bddbc20 ReadME Update 2025-08-29 12:17:46 +02:00
MasterAcnolo
2a7d61bab7 Inversion ReadME Principal 2025-08-29 12:16:12 +02:00
MasterAcnolo
de71035fa0 NF Theme + Ajustement Other Themes 2025-08-29 10:31:13 +02:00
MasterAcnolo
5368fb9311 Update YT-DLP 2025-08-28 10:37:14 +02:00
MasterAcnolo
3d583a9b6f Retrait '--Restrict Filenames' 2025-08-22 12:23:41 +02:00
28 changed files with 1190 additions and 631 deletions

8
.gitignore vendored
View File

@@ -1,6 +1,10 @@
/node_modules
/downloads
/dist
/out
/ressources/ffmpeg.exe
/ressources/ffprobe.exe
logs/*.json
logs/*.log
/out
logs/*.log

View File

@@ -1,113 +0,0 @@
# Freedom Loader
<!-- Release -->
![Static Badge](https://img.shields.io/badge/Release-1.1.3-blue?style=flat&logo=Test)
<!-- Build (Next Release) -->
![Static Badge](https://img.shields.io/badge/Build-1.2--beta-yellow?style=flat&logo=Test)
> This project aims to enable free, open-source, and unrestricted downloading of Video/Audio content. Eventually, it will allow users to choose
## 🚀 Features
- ✅ Video download with metadata(MP4)
- ✅ Audio-only download with thumbail and metadata(MP3)
- ✅ Full playlist support
- ✅ Automatic metadata retrieval (title, duration, etc.)
- ✅ Detailed logs: console and rotating files (7 days)
- ✅ Custom output path selection with saving
- ✅ Multiple graphical themes available for interface customization
- ✅ Simple, intuitive, and responsive interface
- ✅ Notification system when download finished (Click = Open Output Folder)
---
## 🔧 Installation
To install the application, simply download the installer from the releases section. Take the latest version and run it.
---
## ❓ Frequently Asked Questions
### _Where are my downloaded files located?_
In your computer's Downloads folder (**C:\Users\YOUR NAME\Downloads**), inside a folder named **Freedom Loader Output**
<br>
### _After installing and running the program, I get an error_
Try restarting the application, checking the logs, or opening the browser's developer console by pressing `CTRL + SHIFT + I` or by going to `View > Toggle Developer Tools`
<!-- ![Example Path](build/example-developertools.png) -->
<p align="center">
<img src="build/example-developertools.png" alt="Example Developer Tools" />
</p>
## 🏗️ Upcoming Features (Roadmap)
- [ ] More format options
- [ ] Subtitle support
- [ ] Improved UI / UX
- [ ] Language selection
- [ ] Download a specific part of the video
- [ ] Rename output file
- [ ] Extract / Split video using native chapters
- [ ] Parallel downloads
- [ ] Skip sponsored parts of videos
- [x] ~~Custom output path selection (default **C:\Users\Username\Downloads** with a **Freedom Loader Output** folder created)~~
---
## 🖼️ Preview
<p align="center">
<img src="build/apercu1.0.1.png" alt="Exemple d'application" />
</p>
> Here is an example of the app after launch and entering a URL
---
## About
This project was built using [![yt-dlp](https://img.shields.io/badge/yt--dlp-Visit%20Repo-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/yt-dlp/yt-dlp)
Thanks to them for providing a free and open-source API.
This project is open-source and welcomes your contributions.
Here is how to get involved:
- **🪲 Bug Reporting**
Please use the [GitHub issues system](https://github.com/MasterAcnolo/Freedom-Loader/issues) to report any bugs you encounter.
Try to provide clear reproduction steps and logs if possible. Logs are located in the installation folder of the program. Example path:
`C:\Users\[YOUR NAME]\Desktop\Freedom Loader\resources\app\logs`
The log file will be named something like `combined-20xx-xx-xx.log`
<br>
- **🛠️ Contribution**
Pull Requests are welcome! Please fork the repo and submit your PR after ensuring you meet the contribution guidelines (tests, style, etc.).
<br>
- **💡 Feature Suggestions**
You can propose new ideas via a [feature request issue](https://github.com/MasterAcnolo/Freedom-Loader/issues).
Any clear and detailed proposal will be reviewed.
<br>
- **💰 Support the Project**
<p>
If you'd like to support me, you can donate via
<a href="https://paypal.me/axelnicolas25">
<img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal">
</a>
</p>
---
## 📄 License
This project is licensed under the **MIT License** — see the [LICENSE](./LICENSE) file for details.
---
## ⚠️ Disclaimer
I have obviously used AI assistance for some parts of this project. Use AI sparingly and always be aware of what you are doing.

114
README-FR.md Normal file
View File

@@ -0,0 +1,114 @@
# Freedom Loader
<!-- Release -->
![Static Badge](https://img.shields.io/badge/Release-1.2.2-blue?style=flat&logo=Test)
<!-- Build (Next Release) -->
![Static Badge](https://img.shields.io/badge/Build-1.2.3--beta-yellow?style=flat&logo=Test)
> Ce projet a pour but de permettre le téléchargement de contenu Vidéo/Audio de manière gratuite, open source et libre. Il permettra à terme de choisir
## 🚀 Fonctionnalités
- ✅ Téléchargement de vidéos avec les métadonnées (MP4)
- ✅ Téléchargement audio uniquement, avec la couverture ainsi que les métadonnées (MP3)
- ✅ Support des playlists complètes
- ✅ Récupération automatique des métadonnées (titre, durée, etc.)
- ✅ Logs détaillés : console et fichiers rotatifs (7 jours)
- ✅ Choix du chemin de sortie personnalisé avec sauvegarde
- ✅ Plusieurs thèmes graphiques au choix pour personnaliser linterface
- ✅ Interface simple, intuitive
- ✅ Notification quand le téléchargement est fini (Click = Ouverture Dossier Output)
- ✅ Discord Rich Presence
---
## 🔧 Installation
Pour installer l'application, il vous suffit de télécharger l'installateur dans la section releases, de prendre la dernière version et de l'exécuter.
---
## ❓ Questions fréquentes
### _Où se situent mes fichiers une fois téléchargés ?_
Dans le dossier Téléchargements (**C:\Users\VOTRE NOM\Downloads**) de votre ordinateur, dans un dossier nommé **Freedom Loader Output**
<br>
### _Une fois le programme installé et lancé, j'ai une erreur_
Essayez de relancer l'application, de consulter les logs ou d'ouvrir la console de développement du navigateur en faisant le raccourci `CTRL + SHIFT + I` ou via `View > Toggle Developer Tools`.
<!-- ![Exemple Chemin](build/example-developertools.png) -->
<p align="center">
<img src="build/example-developertools.png" alt="Exemple Developer Tools" />
</p>
## 🏗️ Fonctionnalités à venir (Roadmap)
- [ ] Plus de choix de formats
- [ ] Support des sous-titres
- [ ] Meilleure UI / UX
- [ ] Choix des langues
- [ ] Téléchargement dune partie de la vidéo
- [ ] Renommage du fichier de sortie
- [x] ~~Extraction / découpage de la vidéo via chapitrage natif~~
- [ ] Téléchargements parallèles
- [ ] Suppression automatique des parties sponsorisées (skip sponsor)
- [x] ~~Choix personnalisé du chemin de sortie (par défaut **C:\Users\Utilisateur\Downloads**, où un dossier **Freedom Loader Output** sera créé)~~
---
## 🖼️ Aperçu
<p align="center">
<img src="build/apercu1.0.1.png" alt="Exemple d'application" />
</p>
> Voici un exemple de lapplication lancée après avoir saisi une URL.
---
## À propos
Ce projet a été réalisé en utilisant [![yt-dlp](https://img.shields.io/badge/yt--dlp-Visit%20Repo-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/yt-dlp/yt-dlp)
Merci à eux de nous permettre dutiliser leur API gratuitement et en open source.
Ce projet est open source et accueille volontiers vos contributions.
Voici comment participer :
- **🪲 Signalement de bugs**
Merci dutiliser le [système dissues GitHub](https://github.com/MasterAcnolo/Freedom-Loader/issues) pour remonter les bugs rencontrés.
Essayez de fournir une reproduction claire et les logs si possible. Les logs se trouvent dans le dossier dinstallation du programme. Exemple de chemin :
`C:\Users\[VOTRE NOM]\Desktop\Freedom Loader\resources\app\logs`
Le fichier aura un nom du type `combined-20xx-xx-xx.log`.
<br>
- **🛠️ Contribution**
Les Pull Requests sont les bienvenues ! Merci de forker le repo et de soumettre votre PR après avoir vérifié le respect des guidelines (tests, style, etc.).
<br>
- **💡 Suggestions de fonctionnalités**
Vous pouvez proposer de nouvelles idées via une [issue de type feature request](https://github.com/MasterAcnolo/Freedom-Loader/issues).
Toute proposition claire et détaillée sera étudiée.
<br>
- **💰 Soutenir le projet**
<p>
Si vous souhaitez mencourager, vous pouvez faire un don sur
<a href="https://paypal.me/axelnicolas25">
<img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal">
</a>
</p>
---
## 📄 Licence
Ce projet est sous licence **MIT** — voir le fichier [LICENSE](./LICENSE) pour plus dinformations.
---
## ⚠️ Disclaimer
Jai bien évidemment eu recours à lIA pour maider sur certaines parties du projet. Utilisez lIA avec parcimonie et soyez toujours conscient de ce que vous faites.

113
README.md
View File

@@ -2,99 +2,100 @@
<!-- Release -->
![Static Badge](https://img.shields.io/badge/Release-1.1.3-blue?style=flat&logo=Test)
![Static Badge](https://img.shields.io/badge/Release-1.2.2-blue?style=flat&logo=Test)
<!-- Build (Next Release) -->
![Static Badge](https://img.shields.io/badge/Build-1.2--beta-yellow?style=flat&logo=Test)
![Static Badge](https://img.shields.io/badge/Build-1.2.3--beta-yellow?style=flat&logo=Test)
> Ce projet a pour but de permettre le téléchargement de contenu Vidéo/Audio de manière gratuite, open source et libre. Il permettra à terme de choisir
> This project aims to enable free, open-source, and unrestricted downloading of Video/Audio content. Eventually, it will allow users to choose
## 🚀 Fonctionnalités
## 🚀 Features
-Téléchargement de vidéos avec les métadonnées (MP4)
-Téléchargement audio uniquement, avec la couverture ainsi que les métadonnées (MP3)
-Support des playlists complètes
-Récupération automatique des métadonnées (titre, durée, etc.)
-Logs détaillés : console et fichiers rotatifs (7 jours)
- ✅ Choix du chemin de sortie personnalisé avec sauvegarde
-Plusieurs thèmes graphiques au choix pour personnaliser linterface
-Interface simple, intuitive
- ✅ Notification quand le téléchargement est fini (Click = Ouverture Dossier Output)
-Video download with metadata(MP4)
-Audio-only download with thumbail and metadata(MP3)
-Full playlist support
-Automatic metadata retrieval (title, duration, etc.)
-Detailed logs: console and rotating files (7 days)
- ✅ Custom output path selection with saving
-Multiple graphical themes available for interface customization
-Simple, intuitive, and responsive interface
- ✅ Notification system when download finished (Click = Open Output Folder)
- ✅ Discord Rich Presence
---
## 🔧 Installation
Pour installer l'application, il vous suffit de télécharger l'installateur dans la section releases, de prendre la dernière version et de l'exécuter.
To install the application, simply download the installer from the releases section. Take the latest version and run it.
---
## ❓ Questions fréquentes
## ❓ Frequently Asked Questions
### _Où se situent mes fichiers une fois téléchargés ?_
### _Where are my downloaded files located?_
Dans le dossier Téléchargements (**C:\Users\VOTRE NOM\Downloads**) de votre ordinateur, dans un dossier nommé **Freedom Loader Output**
In your computer's Downloads folder (**C:\Users\YOUR NAME\Downloads**), inside a folder named **Freedom Loader Output**
<br>
### _Une fois le programme installé et lancé, j'ai une erreur_
### _After installing and running the program, I get an error_
Essayez de relancer l'application, de consulter les logs ou d'ouvrir la console de développement du navigateur en faisant le raccourci `CTRL + SHIFT + I` ou via `View > Toggle Developer Tools`.
Try restarting the application, checking the logs, or opening the browser's developer console by pressing `CTRL + SHIFT + I` or by going to `View > Toggle Developer Tools`
<!-- ![Exemple Chemin](build/example-developertools.png) -->
<!-- ![Example Path](build/example-developertools.png) -->
<p align="center">
<img src="build/example-developertools.png" alt="Exemple Developer Tools" />
<img src="build/example-developertools.png" alt="Example Developer Tools" />
</p>
## 🏗️ Fonctionnalités à venir (Roadmap)
## 🏗️ Upcoming Features (Roadmap)
- [ ] Plus de choix de formats
- [ ] Support des sous-titres
- [ ] Meilleure UI / UX
- [ ] Choix des langues
- [ ] Téléchargement dune partie de la vidéo
- [ ] Renommage du fichier de sortie
- [ ] Extraction / découpage de la vidéo via chapitrage natif
- [ ] Téléchargements parallèles
- [ ] Suppression automatique des parties sponsorisées (skip sponsor)
- [x] ~~Choix personnalisé du chemin de sortie (par défaut **C:\Users\Utilisateur\Downloads**, où un dossier **Freedom Loader Output** sera créé)~~
- [ ] More format options
- [ ] Subtitle support
- [ ] Improved UI / UX
- [ ] Language selection
- [ ] Download a specific part of the video
- [ ] Rename output file
- [x] ~~Extract / Split video using native chapters~~
- [ ] Parallel downloads
- [ ] Skip sponsored parts of videos
- [x] ~~Custom output path selection (default **C:\Users\Username\Downloads** with a **Freedom Loader Output** folder created)~~
---
## 🖼️ Aperçu
## 🖼️ Preview
<p align="center">
<img src="build/apercu1.0.1.png" alt="Exemple d'application" />
</p>
> Voici un exemple de lapplication lancée après avoir saisi une URL.
> Here is an example of the app after launch and entering a URL
---
## À propos
## About
Ce projet a été réalisé en utilisant [![yt-dlp](https://img.shields.io/badge/yt--dlp-Visit%20Repo-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/yt-dlp/yt-dlp)
Merci à eux de nous permettre dutiliser leur API gratuitement et en open source.
This project was built using [![yt-dlp](https://img.shields.io/badge/yt--dlp-Visit%20Repo-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/yt-dlp/yt-dlp)
Thanks to them for providing a free and open-source API.
Ce projet est open source et accueille volontiers vos contributions.
Voici comment participer :
This project is open-source and welcomes your contributions.
Here is how to get involved:
- **🪲 Signalement de bugs**
Merci dutiliser le [système dissues GitHub](https://github.com/MasterAcnolo/Freedom-Loader/issues) pour remonter les bugs rencontrés.
Essayez de fournir une reproduction claire et les logs si possible. Les logs se trouvent dans le dossier dinstallation du programme. Exemple de chemin :
`C:\Users\[VOTRE NOM]\Desktop\Freedom Loader\resources\app\logs`
Le fichier aura un nom du type `combined-20xx-xx-xx.log`.
<br>
- **🪲 Bug Reporting**
Please use the [GitHub issues system](https://github.com/MasterAcnolo/Freedom-Loader/issues) to report any bugs you encounter.
Try to provide clear reproduction steps and logs if possible. Logs are located in the installation folder of the program. Example path:
`C:\Users\[YOUR NAME]\Desktop\Freedom Loader\resources\app\logs`
The log file will be named something like `combined-20xx-xx-xx.log`
<br>
- **🛠️ Contribution**
Les Pull Requests sont les bienvenues ! Merci de forker le repo et de soumettre votre PR après avoir vérifié le respect des guidelines (tests, style, etc.).
<br>
- **💡 Suggestions de fonctionnalités**
Vous pouvez proposer de nouvelles idées via une [issue de type feature request](https://github.com/MasterAcnolo/Freedom-Loader/issues).
Toute proposition claire et détaillée sera étudiée.
<br>
- **💰 Soutenir le projet**
Pull Requests are welcome! Please fork the repo and submit your PR after ensuring you meet the contribution guidelines (tests, style, etc.).
<br>
- **💡 Feature Suggestions**
You can propose new ideas via a [feature request issue](https://github.com/MasterAcnolo/Freedom-Loader/issues).
Any clear and detailed proposal will be reviewed.
<br>
- **💰 Support the Project**
<p>
Si vous souhaitez mencourager, vous pouvez faire un don sur
If you'd like to support me, you can donate via
<a href="https://paypal.me/axelnicolas25">
<img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal">
</a>
@@ -102,12 +103,12 @@ Voici comment participer :
---
## 📄 Licence
## 📄 License
Ce projet est sous licence **MIT** — voir le fichier [LICENSE](./LICENSE) pour plus dinformations.
This project is licensed under the **MIT License** — see the [LICENSE](./LICENSE) file for details.
---
## ⚠️ Disclaimer
Jai bien évidemment eu recours à lIA pour maider sur certaines parties du projet. Utilisez lIA avec parcimonie et soyez toujours conscient de ce que vous faites.
I have obviously used AI assistance for some parts of this project. Use AI sparingly and always be aware of what you are doing.

View File

@@ -25,7 +25,7 @@ const { logger, logSessionStart, logSessionEnd, logDir } = require("./server/log
let mainWindow;
// Utilise le vrai dossier de logs défini dans logger.js
const logsFolderPath = logDir;
app.setAppUserModelId("com.masteracnolo.freedomloader"); /* Pour la notif */
/*
Fonction principale qui crée la fenêtre principale de l'application.
Elle évite la création multiple et configure les dimensions et options de la fenêtre.
@@ -40,7 +40,7 @@ async function createWindow() {
}
mainWindow = new BrowserWindow({
title: "Freedom Loader",
title: "Freedom Loader 1.2.2", // A Changer à chaque Version
width: 750,
height: 800,
minWidth: 750,

1304
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "freedom-loader",
"productName": "Freedom Loader",
"version": "1.1.3",
"version": "1.2.2",
"author": "MasterAcnolo",
"description": "Freedom Loader",
"main": "main.js",
@@ -14,6 +14,7 @@
"dependencies": {
"chalk": "^4.1.2",
"debug": "^4.4.1",
"discord-rpc": "^4.0.1",
"electron-squirrel-startup": "^1.0.1",
"express": "^5.1.0",
"winston": "^3.17.0",
@@ -42,11 +43,19 @@
"directories": {
"buildResources": "build"
},
"asar": false,
"asar": true,
"extraResources": [
{
{
"from": "build/confirm-icon.png",
"to": "confirm-icon.png"
},
{
"from": "ressources/yt-dlp 2025.08.27.exe",
"to": "yt-dlp 2025.08.27.exe"
},
{
"from": "ressources/ffmpeg.exe",
"to": "ffmpeg.exe"
}
],
"win": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

View File

Before

Width:  |  Height:  |  Size: 805 KiB

After

Width:  |  Height:  |  Size: 805 KiB

BIN
public/assets/images/NF.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -9,7 +9,7 @@
font-src https://fonts.gstatic.com;
img-src 'self' data: https://i.ytimg.com;
">
<title>Freedom Loader</title>
<title></title>
<!--CSS-->
<link rel="stylesheet" href="styles/styles.css">

View File

@@ -21,6 +21,7 @@ const themes = {
default: "Default",
dark: "Sombre",
light: "Clair",
nf : "NF",
chirac: "Chirac",
fanatic: "Fanatic",
cyberpunk: "Cyberpunk",
@@ -32,6 +33,7 @@ const themeSubtitles = {
default: "Because why not?",
dark: "Darkness is my ally",
light: "Qui aime ce thème ?",
nf : "You call it music, i call it my Therapist",
chirac: "J'aime les pommes",
fanatic: "Always Fnatic !",
cyberpunk: "Wake up, choom. Weve got a city to burn.",

View File

@@ -29,13 +29,14 @@
color: var(--form-button-text-color);
border: none;
padding: 0.3em 0.8em;
border-radius: 6px;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.3s ease, transform 0.2s ease;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
font-size: 0.9rem;
font-weight: 550;
}
.download-path button#changePath:hover {
background-color: var(--form-button-bg-hover-color);
transform: scale(1.05);
}

View File

@@ -1,7 +1,7 @@
body.chirac {
/* Background image Chirac */
background-image: url('../../assets/images/goat.webp');
background-position: right;
background-image: url('../../assets/images/Chirac.png');
/* background-position: right; */
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;

View File

@@ -36,7 +36,7 @@ body.cyberpunk {
}
body.cyberpunk {
background-image: url('../../assets/images/cyberpunk4.webp');
background-image: url('../../assets/images/Cyberpunk.webp');
background-size: cover;
background-position: center;
background-repeat: no-repeat;

View File

@@ -0,0 +1,48 @@
body.nf {
/* Couleurs générales */
--background-color: #1a1a1a; /* fond sombre neutre */
--default-text-color: #e6dfd5; /* texte beige clair */
--subtitle-color: #f5f0e6; /* beige très clair (titres) */
--mp3-text-color: #d8cfc2; /* texte checkbox */
/* Formulaire */
--form-bg-color: #2a2a2a; /* fond formulaire gris sombre */
--form-input-bg-color: #222222; /* fond inputs sombre */
--form-input-border-color: #4a4036; /* bordure beige/brun */
--form-input-border-focus-color: #cbb89d; /* beige doré en focus */
--form-input-text-color: #f0e8dd; /* texte clair/beige */
--form-input-placeholder-color: #9a8f80; /* placeholder beige/gris */
--form-button-bg-color: #cbb89d; /* bouton beige doré */
--form-button-text-color: #1a1a1a; /* texte sombre */
--form-button-bg-hover-color: #b7a588; /* hover beige plus foncé */
/* Checkbox */
--checkbox-bg-default: #4a4036; /* brun/gris */
--checkbox-bg-checked: #cbb89d; /* beige doré */
--checkbox-checkmark-border-color: #1a1a1a; /* noir profond */
--checkbox-pulse-color: rgba(203,184,157,0.3); /* halo beige doux */
/* Download status */
--download-status-color: #cbb89d; /* beige doré */
/* Video Info Box */
--infos-box-color: #2a2a2a; /* fond sombre */
--video-info-text-color: #e6dfd5; /* texte beige clair */
--video-info-heading-color: #f5f0e6; /* titres beige clair */
--video-info-list-color: #d8cfc2; /* texte liste */
--video-info-list-strong-color: #ffffff; /* texte fort blanc cassé */
--video-info-link-color: #cbb89d; /* liens beige doré */
--video-info-link-hover-color: #b7a588; /* hover beige plus foncé */
}
/* Fond inspiré de ton image beige */
body.nf {
background-image: url('../../assets/images/NF.jpg'); /* mets ton image ici */
background-size: cover;
background-position: 70% center;
background-attachment: fixed;
}
body.nf .download-path {
color: var(--default-text-color);
}

View File

@@ -1,8 +1,14 @@
/*
*/
body.spicy {
/* Couleurs générales */
--background-color: #121212; /* fond noir profond */
--default-text-color: #f5f5f5; /* texte clair */
--subtitle-color: #e29191; /* accent rouge piment */
--default-text-color: #581010; /* texte clair */
--subtitle-color: #3d0909; /* accent rouge piment */
--mp3-text-color: #ffffff; /* texte checkbox inline */
/* Formulaire */
@@ -37,8 +43,8 @@ body.spicy {
/* Optionnel: background piments */
body.spicy {
background-image: url('../../assets/images/spicy.webp');
background-size: cover;
background-image: url('../../assets/images/Spicy.webp');
background-size:contain;
background-position: center;
background-attachment: fixed;
}

View File

@@ -5,4 +5,5 @@
@import url("light-theme.css");
@import url("cyberpunk-theme.css");
@import url("spicy-theme.css");
@import url("vilbrequin-theme.css");
@import url("vilbrequin-theme.css");
@import url("nf-theme.css");

View File

@@ -37,7 +37,7 @@ body.vilbrequin {
/* Optionnel: motif turbo ou jantes */
body.vilbrequin {
background-image: url('../../assets/images/Vilbrequin.avif'); /* adapte ton image */
background-image: url('../../assets/images/Vilbrequin.webp'); /* adapte ton image */
background-size: cover;
background-position: center;
background-attachment: fixed;

48
server/discordRPC.js Normal file
View File

@@ -0,0 +1,48 @@
/*
This file is part of Freedom Loader.
Copyright (C) 2025 MasterAcnolo
Freedom Loader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License.
Freedom Loader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const RPC = require("discord-rpc");
const clientId = "1410934537051181146";
const rpc = new RPC.Client({ transport: "ipc" });
function startRPC() {
rpc.on("ready", () => {
console.log("✅ Connecté à Discord !");
const presence = {
largeImageKey: "icon",
smallImageKey: "acnolo_pfp",
smallImageText: "By MasterAcnolo",
startTimestamp: new Date(), // compteur de temps
details: "github.com/MasterAcnolo/Freedom-Loader",
};
rpc.setActivity(presence);
// Mise à jour toutes les 15 secondes si tu veux garder le compteur à jour
setInterval(() => {
rpc.setActivity(presence);
}, 15000);
});
rpc.login({ clientId }).catch(err => {
console.error("Erreur Discord RPC :", err);
});
}
module.exports = { startRPC };

View File

@@ -22,8 +22,8 @@ const { Notification } = require("electron");
const logger = require("../logger").logger;
// Path vers le fichier exécutable yt-dlp (outil tiers pour le téléchargement)
// const ytDlpPath = path.join(__dirname, '../../yt-dlp.exe');
const ytDlpPath = path.join(__dirname, '../../yt-dlp 2025.08.20.exe');
// const ytDlpPath = path.join(process.resourcesPath, '../../yt-dlp.exe');
const ytDlpPath = path.join(process.resourcesPath, 'yt-dlp 2025.08.27.exe');
router.post("/", (req, res) => {
try {
@@ -78,13 +78,14 @@ router.post("/", (req, res) => {
// --restrict-filenames pour éviter les caractères problématiques dans les noms
const args = [
"--no-continue", // pas de reprise, c'est un choix que j'ai fait voila
"--restrict-filenames", // noms de fichiers sans caractères spéciaux (Cyrilique, accents, etc.)
//"--restrict-filenames", // noms de fichiers sans caractères spéciaux (Cyrilique, accents, etc.)
"--no-overwrites", // évite d'écraser un fichier existant
"--embed-thumbnail", // ajoute la pochette
"--add-metadata", // ajoute les tags (titre, artiste, etc.)
"--concurrent-fragments", "8",// accélère le téléchargement
"--retries", "10", // réessaie jusqu'à 10 fois en cas d'erreur
"--fragment-retries", "10" // réessaie aussi 10 fois chaque fragment
"--fragment-retries", "10" , // réessaie aussi 10 fois chaque fragment
"--ffmpeg-location", path.join(process.resourcesPath, "ffmpeg.exe")
];
// Si l'option audioOnly est activée, on ajoute les flags pour extraction audio en mp3

View File

@@ -24,7 +24,7 @@ const fs = require("fs");
const { logger } = require("../logger"); // On récupère ton logger Winston
// Path absolu vers l'exécutable yt-dlp
const ytDlpPath = path.join(__dirname, '../../yt-dlp 2025.08.20.exe');
const ytDlpPath = path.join(__dirname, '../../ressources/yt-dlp 2025.08.27.exe');
// Vérification que yt-dlp.exe existe bien au lancement du module
if (!fs.existsSync(ytDlpPath)) {

View File

@@ -31,19 +31,19 @@ const app = express(); // Création de linstance Express, notre serveur web
// Définition du dossier par défaut où enregistrer les téléchargements
// On prend le dossier Téléchargements de lutilisateur Windows (USERPROFILE)
const downloadsPath = path.join(process.env.USERPROFILE, "Downloads");
const outputFolder = path.join(downloadsPath, "Freedom Loader Output");
const outputFolder = path.join(downloadsPath, "Freedom Loader");
// Création du dossier de sortie sil nexiste pas déjà
if (!fs.existsSync(outputFolder)) {
try {
fs.mkdirSync(outputFolder, { recursive: true }); // création récursive au cas où
logger.info("Dossier Freedom Loader Output cree dans Telechargements.");
logger.info("Dossier Freedom Loader cree dans Telechargements.");
} catch (err) {
logger.error("Impossible de creer le dossier :", err);
process.exit(1); // Arrêt du programme si dossier non créé (critique)
}
} else {
logger.info("Dossier Freedom Loader Output deja existant.");
logger.info("Dossier Freedom Loader deja existant.");
}
// On rend ce dossier accessible globalement via app.locals pour lutiliser dans les routes
@@ -101,3 +101,6 @@ process.on("SIGTERM", () => { // Capture kill ou arrêt du process
// Export de la fonction startServer pour permettre son appel depuis dautres fichiers
module.exports = { startServer };
const { startRPC } = require("./discordRPC");
startRPC();