openfaba 0.1.2__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openfaba-0.2.0/PKG-INFO +151 -0
- openfaba-0.2.0/README.md +138 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/pyproject.toml +2 -2
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/__init__.py +1 -1
- openfaba-0.2.0/src/openfaba.egg-info/PKG-INFO +151 -0
- openfaba-0.1.2/PKG-INFO +0 -231
- openfaba-0.1.2/README.md +0 -218
- openfaba-0.1.2/src/openfaba.egg-info/PKG-INFO +0 -231
- {openfaba-0.1.2 → openfaba-0.2.0}/LICENSE +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/setup.cfg +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/cli.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/consts.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/io.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/main.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/media.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/py.typed +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba/utils.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba.egg-info/SOURCES.txt +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba.egg-info/dependency_links.txt +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba.egg-info/entry_points.txt +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba.egg-info/requires.txt +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/src/openfaba.egg-info/top_level.txt +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/tests/test_cli.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/tests/test_main.py +0 -0
- {openfaba-0.1.2 → openfaba-0.2.0}/tests/test_media.py +0 -0
openfaba-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: openfaba
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A modern reimplementation of redele.
|
|
5
|
+
Author-email: Gustavo Viera López <gvieralopez@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.13
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: typer>=0.9.0
|
|
11
|
+
Requires-Dist: mutagen>=1.47.0
|
|
12
|
+
Dynamic: license-file
|
|
13
|
+
|
|
14
|
+
# openFABA
|
|
15
|
+
|
|
16
|
+
**openFABA** converts regular MP3 files into the special format used by the FABA storytelling
|
|
17
|
+
box and also lets you extract playable MP3s back from a FABA device. This project builds upon the
|
|
18
|
+
reverse-engineering work by [wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
19
|
+
At the moment, **openFABA** supports **only the original FABA device**.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
> 🚨 **Disclaimer — Use responsibly**
|
|
23
|
+
>
|
|
24
|
+
> **openFABA** is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
25
|
+
> This software is provided *as is*, with no warranties.
|
|
26
|
+
>
|
|
27
|
+
> You are responsible for how you use this tool and for any consequences that may arise,
|
|
28
|
+
> including device malfunction or account-related actions. Some features may conflict
|
|
29
|
+
> with FABA’s terms of service or usage policies.
|
|
30
|
+
>
|
|
31
|
+
> This project aims to simplify the creation of custom, FABA-compatible figures and to
|
|
32
|
+
> personalize figures you already own. We do **not** endorse piracy, copyright
|
|
33
|
+
> infringement, or misuse that could negatively impact FABA or its ecosystem.
|
|
34
|
+
> Please support FABA by purchasing their products.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## Quick start
|
|
38
|
+
|
|
39
|
+
Make sure you have Python 3.13 or higher and install the tool from PyPI:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install openfaba
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If you are a developer, want to run tests, install from source or follow developer
|
|
46
|
+
instructions see the developers guide: [DEVELOPERS.md](DEVELOPERS.md)
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
**openFABA** supports the following commands:
|
|
51
|
+
|
|
52
|
+
- `insert` — create a new figure from MP3s and add to a FABA library
|
|
53
|
+
- `extend` — add songs to an existing figure (appends; never overwrites)
|
|
54
|
+
- `replace` — remove and recreate a figure's songs from a new set of MP3s
|
|
55
|
+
- `extract` — deobfuscate all songs from a figure back into MP3 files
|
|
56
|
+
- `obfuscate` / `deobfuscate` — convert entire libraries to/from FABA format
|
|
57
|
+
|
|
58
|
+
Next, you can find an example of usage for each of them.
|
|
59
|
+
|
|
60
|
+
### Create a new figure:
|
|
61
|
+
|
|
62
|
+
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
63
|
+
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
64
|
+
accidental overwrites.
|
|
65
|
+
|
|
66
|
+
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
67
|
+
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
openfaba insert --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Write an NFC TAG with the data 02190530**4742**00 and enjoy it! If you need help on how todo it,
|
|
74
|
+
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
75
|
+
wansors' project have a lot of useful information.
|
|
76
|
+
|
|
77
|
+
### Add songs to an existing figure:
|
|
78
|
+
|
|
79
|
+
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
80
|
+
existing ones and never overwrite previously stored audio.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
openfaba extend --figure-id 4742 --source /home/user/new_songs --faba-library /mnt/faba/MKI01
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Replace a figure completely:
|
|
87
|
+
|
|
88
|
+
Delete an existing figure's sounds and recreate them from scratch using a new set of MP3
|
|
89
|
+
files. This operation removes the previous contents of the figure.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
openfaba replace --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Listen to some FABA songs from a given figure on your computer:
|
|
96
|
+
|
|
97
|
+
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
98
|
+
files so they can be played on a computer or mobile device.
|
|
99
|
+
|
|
100
|
+
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
openfaba extract --figure-id 0010 --faba-library /mnt/faba/MKI01 --output /home/user/elephant_ele
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Deobfuscate a FABA library back to MP3s:
|
|
107
|
+
|
|
108
|
+
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
109
|
+
folder structure.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
openfaba deobfuscate --faba-library /mnt/faba/MKI01 --mp3-library /home/user/output_mp3
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Obfuscate a whole MP3 library into MKI structure:
|
|
116
|
+
|
|
117
|
+
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
118
|
+
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
openfaba obfuscate --mp3-library /home/user/mp3_library --faba-library /mnt/faba/MKI01
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Roadmap
|
|
125
|
+
|
|
126
|
+
- **Add a CSV with figure metadata** — provide a machine-readable `figures.csv` that lists
|
|
127
|
+
each figure ID, name, language, source URL and other metadata for either users and tools
|
|
128
|
+
reference.
|
|
129
|
+
- **Add a `details` command** — add a `openfaba details <figure-id>` command
|
|
130
|
+
that looks up and prints human-friendly metadata from the CSV (name, tracks,
|
|
131
|
+
language, notes, and source link).
|
|
132
|
+
- **Auto-update script (scraper)** — include a script that can periodically fetch
|
|
133
|
+
metadata from MyFaba and update `figures.csv`; documented in `DEVELOPERS.md`.
|
|
134
|
+
- **Multi-device support (FABA+)** — plan and expose an abstraction layer so the
|
|
135
|
+
obfuscation/deobfuscation pipeline can target multiple FABA-compatible devices
|
|
136
|
+
(different file layouts or obfuscation).
|
|
137
|
+
- **UI** — explore a small GUI with similar functionality of current CLI.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Resources
|
|
142
|
+
|
|
143
|
+
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
144
|
+
- [Hacking MyFaba article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
145
|
+
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
If you'd like the full developer guide (installation from source, tests, linters,
|
|
151
|
+
and build steps), open [DEVELOPERS.md](DEVELOPERS.md).
|
openfaba-0.2.0/README.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# openFABA
|
|
2
|
+
|
|
3
|
+
**openFABA** converts regular MP3 files into the special format used by the FABA storytelling
|
|
4
|
+
box and also lets you extract playable MP3s back from a FABA device. This project builds upon the
|
|
5
|
+
reverse-engineering work by [wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
6
|
+
At the moment, **openFABA** supports **only the original FABA device**.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
> 🚨 **Disclaimer — Use responsibly**
|
|
10
|
+
>
|
|
11
|
+
> **openFABA** is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
12
|
+
> This software is provided *as is*, with no warranties.
|
|
13
|
+
>
|
|
14
|
+
> You are responsible for how you use this tool and for any consequences that may arise,
|
|
15
|
+
> including device malfunction or account-related actions. Some features may conflict
|
|
16
|
+
> with FABA’s terms of service or usage policies.
|
|
17
|
+
>
|
|
18
|
+
> This project aims to simplify the creation of custom, FABA-compatible figures and to
|
|
19
|
+
> personalize figures you already own. We do **not** endorse piracy, copyright
|
|
20
|
+
> infringement, or misuse that could negatively impact FABA or its ecosystem.
|
|
21
|
+
> Please support FABA by purchasing their products.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## Quick start
|
|
25
|
+
|
|
26
|
+
Make sure you have Python 3.13 or higher and install the tool from PyPI:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install openfaba
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If you are a developer, want to run tests, install from source or follow developer
|
|
33
|
+
instructions see the developers guide: [DEVELOPERS.md](DEVELOPERS.md)
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
**openFABA** supports the following commands:
|
|
38
|
+
|
|
39
|
+
- `insert` — create a new figure from MP3s and add to a FABA library
|
|
40
|
+
- `extend` — add songs to an existing figure (appends; never overwrites)
|
|
41
|
+
- `replace` — remove and recreate a figure's songs from a new set of MP3s
|
|
42
|
+
- `extract` — deobfuscate all songs from a figure back into MP3 files
|
|
43
|
+
- `obfuscate` / `deobfuscate` — convert entire libraries to/from FABA format
|
|
44
|
+
|
|
45
|
+
Next, you can find an example of usage for each of them.
|
|
46
|
+
|
|
47
|
+
### Create a new figure:
|
|
48
|
+
|
|
49
|
+
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
50
|
+
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
51
|
+
accidental overwrites.
|
|
52
|
+
|
|
53
|
+
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
54
|
+
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
openfaba insert --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Write an NFC TAG with the data 02190530**4742**00 and enjoy it! If you need help on how todo it,
|
|
61
|
+
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
62
|
+
wansors' project have a lot of useful information.
|
|
63
|
+
|
|
64
|
+
### Add songs to an existing figure:
|
|
65
|
+
|
|
66
|
+
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
67
|
+
existing ones and never overwrite previously stored audio.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
openfaba extend --figure-id 4742 --source /home/user/new_songs --faba-library /mnt/faba/MKI01
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Replace a figure completely:
|
|
74
|
+
|
|
75
|
+
Delete an existing figure's sounds and recreate them from scratch using a new set of MP3
|
|
76
|
+
files. This operation removes the previous contents of the figure.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
openfaba replace --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Listen to some FABA songs from a given figure on your computer:
|
|
83
|
+
|
|
84
|
+
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
85
|
+
files so they can be played on a computer or mobile device.
|
|
86
|
+
|
|
87
|
+
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
openfaba extract --figure-id 0010 --faba-library /mnt/faba/MKI01 --output /home/user/elephant_ele
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Deobfuscate a FABA library back to MP3s:
|
|
94
|
+
|
|
95
|
+
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
96
|
+
folder structure.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
openfaba deobfuscate --faba-library /mnt/faba/MKI01 --mp3-library /home/user/output_mp3
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Obfuscate a whole MP3 library into MKI structure:
|
|
103
|
+
|
|
104
|
+
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
105
|
+
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
openfaba obfuscate --mp3-library /home/user/mp3_library --faba-library /mnt/faba/MKI01
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Roadmap
|
|
112
|
+
|
|
113
|
+
- **Add a CSV with figure metadata** — provide a machine-readable `figures.csv` that lists
|
|
114
|
+
each figure ID, name, language, source URL and other metadata for either users and tools
|
|
115
|
+
reference.
|
|
116
|
+
- **Add a `details` command** — add a `openfaba details <figure-id>` command
|
|
117
|
+
that looks up and prints human-friendly metadata from the CSV (name, tracks,
|
|
118
|
+
language, notes, and source link).
|
|
119
|
+
- **Auto-update script (scraper)** — include a script that can periodically fetch
|
|
120
|
+
metadata from MyFaba and update `figures.csv`; documented in `DEVELOPERS.md`.
|
|
121
|
+
- **Multi-device support (FABA+)** — plan and expose an abstraction layer so the
|
|
122
|
+
obfuscation/deobfuscation pipeline can target multiple FABA-compatible devices
|
|
123
|
+
(different file layouts or obfuscation).
|
|
124
|
+
- **UI** — explore a small GUI with similar functionality of current CLI.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Resources
|
|
129
|
+
|
|
130
|
+
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
131
|
+
- [Hacking MyFaba article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
132
|
+
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
If you'd like the full developer guide (installation from source, tests, linters,
|
|
138
|
+
and build steps), open [DEVELOPERS.md](DEVELOPERS.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "openfaba"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.2.0"
|
|
4
4
|
description = "A modern reimplementation of redele."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">= 3.13"
|
|
@@ -110,7 +110,7 @@ env_override_existing_values = 1
|
|
|
110
110
|
env_files = [".env.test"]
|
|
111
111
|
|
|
112
112
|
[tool.bumpver]
|
|
113
|
-
current_version = "0.
|
|
113
|
+
current_version = "0.2.0"
|
|
114
114
|
version_pattern = "MAJOR.MINOR.PATCH[-TAGNUM]"
|
|
115
115
|
|
|
116
116
|
[tool.bumpver.file_patterns]
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: openfaba
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A modern reimplementation of redele.
|
|
5
|
+
Author-email: Gustavo Viera López <gvieralopez@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.13
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: typer>=0.9.0
|
|
11
|
+
Requires-Dist: mutagen>=1.47.0
|
|
12
|
+
Dynamic: license-file
|
|
13
|
+
|
|
14
|
+
# openFABA
|
|
15
|
+
|
|
16
|
+
**openFABA** converts regular MP3 files into the special format used by the FABA storytelling
|
|
17
|
+
box and also lets you extract playable MP3s back from a FABA device. This project builds upon the
|
|
18
|
+
reverse-engineering work by [wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
19
|
+
At the moment, **openFABA** supports **only the original FABA device**.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
> 🚨 **Disclaimer — Use responsibly**
|
|
23
|
+
>
|
|
24
|
+
> **openFABA** is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
25
|
+
> This software is provided *as is*, with no warranties.
|
|
26
|
+
>
|
|
27
|
+
> You are responsible for how you use this tool and for any consequences that may arise,
|
|
28
|
+
> including device malfunction or account-related actions. Some features may conflict
|
|
29
|
+
> with FABA’s terms of service or usage policies.
|
|
30
|
+
>
|
|
31
|
+
> This project aims to simplify the creation of custom, FABA-compatible figures and to
|
|
32
|
+
> personalize figures you already own. We do **not** endorse piracy, copyright
|
|
33
|
+
> infringement, or misuse that could negatively impact FABA or its ecosystem.
|
|
34
|
+
> Please support FABA by purchasing their products.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## Quick start
|
|
38
|
+
|
|
39
|
+
Make sure you have Python 3.13 or higher and install the tool from PyPI:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install openfaba
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If you are a developer, want to run tests, install from source or follow developer
|
|
46
|
+
instructions see the developers guide: [DEVELOPERS.md](DEVELOPERS.md)
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
**openFABA** supports the following commands:
|
|
51
|
+
|
|
52
|
+
- `insert` — create a new figure from MP3s and add to a FABA library
|
|
53
|
+
- `extend` — add songs to an existing figure (appends; never overwrites)
|
|
54
|
+
- `replace` — remove and recreate a figure's songs from a new set of MP3s
|
|
55
|
+
- `extract` — deobfuscate all songs from a figure back into MP3 files
|
|
56
|
+
- `obfuscate` / `deobfuscate` — convert entire libraries to/from FABA format
|
|
57
|
+
|
|
58
|
+
Next, you can find an example of usage for each of them.
|
|
59
|
+
|
|
60
|
+
### Create a new figure:
|
|
61
|
+
|
|
62
|
+
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
63
|
+
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
64
|
+
accidental overwrites.
|
|
65
|
+
|
|
66
|
+
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
67
|
+
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
openfaba insert --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Write an NFC TAG with the data 02190530**4742**00 and enjoy it! If you need help on how todo it,
|
|
74
|
+
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
75
|
+
wansors' project have a lot of useful information.
|
|
76
|
+
|
|
77
|
+
### Add songs to an existing figure:
|
|
78
|
+
|
|
79
|
+
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
80
|
+
existing ones and never overwrite previously stored audio.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
openfaba extend --figure-id 4742 --source /home/user/new_songs --faba-library /mnt/faba/MKI01
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Replace a figure completely:
|
|
87
|
+
|
|
88
|
+
Delete an existing figure's sounds and recreate them from scratch using a new set of MP3
|
|
89
|
+
files. This operation removes the previous contents of the figure.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
openfaba replace --figure-id 4742 --source /home/user/songs --faba-library /mnt/faba/MKI01
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Listen to some FABA songs from a given figure on your computer:
|
|
96
|
+
|
|
97
|
+
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
98
|
+
files so they can be played on a computer or mobile device.
|
|
99
|
+
|
|
100
|
+
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
openfaba extract --figure-id 0010 --faba-library /mnt/faba/MKI01 --output /home/user/elephant_ele
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Deobfuscate a FABA library back to MP3s:
|
|
107
|
+
|
|
108
|
+
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
109
|
+
folder structure.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
openfaba deobfuscate --faba-library /mnt/faba/MKI01 --mp3-library /home/user/output_mp3
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Obfuscate a whole MP3 library into MKI structure:
|
|
116
|
+
|
|
117
|
+
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
118
|
+
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
openfaba obfuscate --mp3-library /home/user/mp3_library --faba-library /mnt/faba/MKI01
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Roadmap
|
|
125
|
+
|
|
126
|
+
- **Add a CSV with figure metadata** — provide a machine-readable `figures.csv` that lists
|
|
127
|
+
each figure ID, name, language, source URL and other metadata for either users and tools
|
|
128
|
+
reference.
|
|
129
|
+
- **Add a `details` command** — add a `openfaba details <figure-id>` command
|
|
130
|
+
that looks up and prints human-friendly metadata from the CSV (name, tracks,
|
|
131
|
+
language, notes, and source link).
|
|
132
|
+
- **Auto-update script (scraper)** — include a script that can periodically fetch
|
|
133
|
+
metadata from MyFaba and update `figures.csv`; documented in `DEVELOPERS.md`.
|
|
134
|
+
- **Multi-device support (FABA+)** — plan and expose an abstraction layer so the
|
|
135
|
+
obfuscation/deobfuscation pipeline can target multiple FABA-compatible devices
|
|
136
|
+
(different file layouts or obfuscation).
|
|
137
|
+
- **UI** — explore a small GUI with similar functionality of current CLI.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Resources
|
|
142
|
+
|
|
143
|
+
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
144
|
+
- [Hacking MyFaba article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
145
|
+
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
If you'd like the full developer guide (installation from source, tests, linters,
|
|
151
|
+
and build steps), open [DEVELOPERS.md](DEVELOPERS.md).
|
openfaba-0.1.2/PKG-INFO
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: openfaba
|
|
3
|
-
Version: 0.1.2
|
|
4
|
-
Summary: A modern reimplementation of redele.
|
|
5
|
-
Author-email: Gustavo Viera López <gvieralopez@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Requires-Python: >=3.13
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: typer>=0.9.0
|
|
11
|
-
Requires-Dist: mutagen>=1.47.0
|
|
12
|
-
Dynamic: license-file
|
|
13
|
-
|
|
14
|
-
# openFABA
|
|
15
|
-
|
|
16
|
-
**openFABA** is a command-line tool for inspecting, extracting, and exporting audio
|
|
17
|
-
files for the **FABA** storytelling box. It allows you to convert standard MP3 files
|
|
18
|
-
into FABA-compatible files for specific figures.
|
|
19
|
-
|
|
20
|
-
This project builds upon the reverse-engineering work by
|
|
21
|
-
[wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
22
|
-
At the moment, openFABA supports **only the original FABA device**.
|
|
23
|
-
|
|
24
|
-
### Disclaimer
|
|
25
|
-
|
|
26
|
-
openFABA is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
27
|
-
|
|
28
|
-
This software is provided *as is*, without warranties of any kind. You are responsible
|
|
29
|
-
for how you use it and for any consequences that may arise, including device malfunction
|
|
30
|
-
or account-related actions. Some features may conflict with FABA’s terms of service or
|
|
31
|
-
usage policies.
|
|
32
|
-
|
|
33
|
-
The goal of openFABA is to:
|
|
34
|
-
|
|
35
|
-
* simplify the creation of custom, FABA-compatible figures
|
|
36
|
-
* enable personalization of figures you already own
|
|
37
|
-
|
|
38
|
-
We do **not** endorse music piracy, copyright infringement, or any misuse that could
|
|
39
|
-
negatively impact FABA or its ecosystem. FABA is a great company, and we encourage
|
|
40
|
-
supporting them by purchasing their products.
|
|
41
|
-
|
|
42
|
-
Use this tool responsibly and at your own risk.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## 🚀 Prerequisites
|
|
46
|
-
|
|
47
|
-
Before working with this project, make sure you have [uv](https://docs.astral.sh/uv/) installed. 👉 Install guide: [uv docs](https://docs.astral.sh/uv/getting-started/installation/)
|
|
48
|
-
|
|
49
|
-
If you are a developer and want to contribute to this project, you may want to have
|
|
50
|
-
[make](https://www.gnu.org/software/make/) installed as well.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## ⚡ Installation
|
|
54
|
-
|
|
55
|
-
Install dependencies into a local virtual environment:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
uv sync --all-groups
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Then, to activate the virtual environment:
|
|
62
|
-
|
|
63
|
-
On Linux / macOS:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
source .venv/bin/activate
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
On Windows (PowerShell):
|
|
70
|
-
|
|
71
|
-
```powershell
|
|
72
|
-
.venv\Scripts\Activate.ps1
|
|
73
|
-
# If your PowerShell execution policy prevents running the script, run:
|
|
74
|
-
powershell -ExecutionPolicy Bypass -File .venv\Scripts\Activate.ps1
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
On Windows (CMD):
|
|
78
|
-
|
|
79
|
-
```cmd
|
|
80
|
-
.venv\Scripts\activate.bat
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## 🛠️ Usage
|
|
84
|
-
|
|
85
|
-
### Create your own figure
|
|
86
|
-
|
|
87
|
-
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
88
|
-
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
89
|
-
accidental overwrites.
|
|
90
|
-
|
|
91
|
-
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
92
|
-
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
openfaba insert \
|
|
96
|
-
--figure-id 4742 \
|
|
97
|
-
--source /home/user/songs \
|
|
98
|
-
--faba-library /mnt/faba/MKI01
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Write an NFC TAG with the figure ID and enjoy it! If you need help on how todo it,
|
|
102
|
-
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
103
|
-
wansors' project have a lot of useful information.
|
|
104
|
-
|
|
105
|
-
### Add songs to an existing figure
|
|
106
|
-
|
|
107
|
-
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
108
|
-
existing ones and never overwrite previously stored audio.
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
openfaba extend \
|
|
112
|
-
--figure-id 4742 \
|
|
113
|
-
--source /home/user/new_songs \
|
|
114
|
-
--faba-library /mnt/faba/MKI01
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### Replace a figure
|
|
119
|
-
|
|
120
|
-
Delete an existing figure and recreate it from scratch using a new set of MP3 files. This
|
|
121
|
-
operation removes the previous contents of the figure.
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
openfaba replace \
|
|
125
|
-
--figure-id 4742 \
|
|
126
|
-
--source /home/user/songs \
|
|
127
|
-
--faba-library /mnt/faba/MKI01
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
### Listen to some FABA songs on your computer
|
|
132
|
-
|
|
133
|
-
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
134
|
-
files so they can be played on a computer or mobile device.
|
|
135
|
-
|
|
136
|
-
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
openfaba extract \
|
|
140
|
-
--figure-id 0010 \
|
|
141
|
-
--faba-library /mnt/faba/MKI01 \
|
|
142
|
-
--output /home/user/elephant_ele
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
### Obfuscate an entire MP3 library
|
|
147
|
-
|
|
148
|
-
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
149
|
-
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
openfaba obfuscate \
|
|
153
|
-
--mp3-library /home/user/mp3_library \
|
|
154
|
-
--faba-library /mnt/faba/MKI01
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
### Deobfuscate an entire FABA library
|
|
159
|
-
|
|
160
|
-
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
161
|
-
folder structure.
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
openfaba deobfuscate \
|
|
165
|
-
--faba-library /mnt/faba/MKI01 \
|
|
166
|
-
--mp3-library /home/user/output_mp3
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## 🪙 Resources used to create this project
|
|
170
|
-
|
|
171
|
-
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
172
|
-
- [Hacking MyFaba Medium Article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
173
|
-
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
## 📦 Tools for Developers
|
|
177
|
-
|
|
178
|
-
Common development tasks are wrapped in the `Makefile` for convenience.
|
|
179
|
-
|
|
180
|
-
### Linting, Formatting, and Type Checking
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
make qa
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Runs **Ruff** for linting and formatting, and **Mypy** for type checking.
|
|
187
|
-
|
|
188
|
-
### Running Unit Tests
|
|
189
|
-
|
|
190
|
-
Before running tests, override any required environment variables in the `.env.test` file.
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
make test
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Executes the test suite using **Pytest**.
|
|
197
|
-
|
|
198
|
-
### Building the Project
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
make build
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Generates a distribution package inside the `dist/` directory.
|
|
205
|
-
|
|
206
|
-
### Cleaning Up
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
make clean
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
Removes build artifacts, caches, and temporary files to keep your project directory clean.
|
|
213
|
-
|
|
214
|
-
### Updating project version
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
make version
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Interactively prompts you to select the type of version update to apply (major, minor, patch, tag)
|
|
221
|
-
and automatically updates the project version accordingly.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
## 🤝 Contributing
|
|
225
|
-
|
|
226
|
-
Contributions are welcome!
|
|
227
|
-
Please ensure all QA checks and tests pass before opening a pull request.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
<sub>🚀 Project starter provided by [Cookie Pyrate](https://github.com/gvieralopez/cookie-pyrate)</sub>
|
openfaba-0.1.2/README.md
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
# openFABA
|
|
2
|
-
|
|
3
|
-
**openFABA** is a command-line tool for inspecting, extracting, and exporting audio
|
|
4
|
-
files for the **FABA** storytelling box. It allows you to convert standard MP3 files
|
|
5
|
-
into FABA-compatible files for specific figures.
|
|
6
|
-
|
|
7
|
-
This project builds upon the reverse-engineering work by
|
|
8
|
-
[wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
9
|
-
At the moment, openFABA supports **only the original FABA device**.
|
|
10
|
-
|
|
11
|
-
### Disclaimer
|
|
12
|
-
|
|
13
|
-
openFABA is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
14
|
-
|
|
15
|
-
This software is provided *as is*, without warranties of any kind. You are responsible
|
|
16
|
-
for how you use it and for any consequences that may arise, including device malfunction
|
|
17
|
-
or account-related actions. Some features may conflict with FABA’s terms of service or
|
|
18
|
-
usage policies.
|
|
19
|
-
|
|
20
|
-
The goal of openFABA is to:
|
|
21
|
-
|
|
22
|
-
* simplify the creation of custom, FABA-compatible figures
|
|
23
|
-
* enable personalization of figures you already own
|
|
24
|
-
|
|
25
|
-
We do **not** endorse music piracy, copyright infringement, or any misuse that could
|
|
26
|
-
negatively impact FABA or its ecosystem. FABA is a great company, and we encourage
|
|
27
|
-
supporting them by purchasing their products.
|
|
28
|
-
|
|
29
|
-
Use this tool responsibly and at your own risk.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## 🚀 Prerequisites
|
|
33
|
-
|
|
34
|
-
Before working with this project, make sure you have [uv](https://docs.astral.sh/uv/) installed. 👉 Install guide: [uv docs](https://docs.astral.sh/uv/getting-started/installation/)
|
|
35
|
-
|
|
36
|
-
If you are a developer and want to contribute to this project, you may want to have
|
|
37
|
-
[make](https://www.gnu.org/software/make/) installed as well.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## ⚡ Installation
|
|
41
|
-
|
|
42
|
-
Install dependencies into a local virtual environment:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
uv sync --all-groups
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Then, to activate the virtual environment:
|
|
49
|
-
|
|
50
|
-
On Linux / macOS:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
source .venv/bin/activate
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
On Windows (PowerShell):
|
|
57
|
-
|
|
58
|
-
```powershell
|
|
59
|
-
.venv\Scripts\Activate.ps1
|
|
60
|
-
# If your PowerShell execution policy prevents running the script, run:
|
|
61
|
-
powershell -ExecutionPolicy Bypass -File .venv\Scripts\Activate.ps1
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
On Windows (CMD):
|
|
65
|
-
|
|
66
|
-
```cmd
|
|
67
|
-
.venv\Scripts\activate.bat
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## 🛠️ Usage
|
|
71
|
-
|
|
72
|
-
### Create your own figure
|
|
73
|
-
|
|
74
|
-
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
75
|
-
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
76
|
-
accidental overwrites.
|
|
77
|
-
|
|
78
|
-
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
79
|
-
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
openfaba insert \
|
|
83
|
-
--figure-id 4742 \
|
|
84
|
-
--source /home/user/songs \
|
|
85
|
-
--faba-library /mnt/faba/MKI01
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Write an NFC TAG with the figure ID and enjoy it! If you need help on how todo it,
|
|
89
|
-
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
90
|
-
wansors' project have a lot of useful information.
|
|
91
|
-
|
|
92
|
-
### Add songs to an existing figure
|
|
93
|
-
|
|
94
|
-
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
95
|
-
existing ones and never overwrite previously stored audio.
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
openfaba extend \
|
|
99
|
-
--figure-id 4742 \
|
|
100
|
-
--source /home/user/new_songs \
|
|
101
|
-
--faba-library /mnt/faba/MKI01
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
### Replace a figure
|
|
106
|
-
|
|
107
|
-
Delete an existing figure and recreate it from scratch using a new set of MP3 files. This
|
|
108
|
-
operation removes the previous contents of the figure.
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
openfaba replace \
|
|
112
|
-
--figure-id 4742 \
|
|
113
|
-
--source /home/user/songs \
|
|
114
|
-
--faba-library /mnt/faba/MKI01
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### Listen to some FABA songs on your computer
|
|
119
|
-
|
|
120
|
-
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
121
|
-
files so they can be played on a computer or mobile device.
|
|
122
|
-
|
|
123
|
-
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
openfaba extract \
|
|
127
|
-
--figure-id 0010 \
|
|
128
|
-
--faba-library /mnt/faba/MKI01 \
|
|
129
|
-
--output /home/user/elephant_ele
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
### Obfuscate an entire MP3 library
|
|
134
|
-
|
|
135
|
-
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
136
|
-
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
openfaba obfuscate \
|
|
140
|
-
--mp3-library /home/user/mp3_library \
|
|
141
|
-
--faba-library /mnt/faba/MKI01
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
### Deobfuscate an entire FABA library
|
|
146
|
-
|
|
147
|
-
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
148
|
-
folder structure.
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
openfaba deobfuscate \
|
|
152
|
-
--faba-library /mnt/faba/MKI01 \
|
|
153
|
-
--mp3-library /home/user/output_mp3
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## 🪙 Resources used to create this project
|
|
157
|
-
|
|
158
|
-
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
159
|
-
- [Hacking MyFaba Medium Article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
160
|
-
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
## 📦 Tools for Developers
|
|
164
|
-
|
|
165
|
-
Common development tasks are wrapped in the `Makefile` for convenience.
|
|
166
|
-
|
|
167
|
-
### Linting, Formatting, and Type Checking
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
make qa
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Runs **Ruff** for linting and formatting, and **Mypy** for type checking.
|
|
174
|
-
|
|
175
|
-
### Running Unit Tests
|
|
176
|
-
|
|
177
|
-
Before running tests, override any required environment variables in the `.env.test` file.
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
make test
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
Executes the test suite using **Pytest**.
|
|
184
|
-
|
|
185
|
-
### Building the Project
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
make build
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Generates a distribution package inside the `dist/` directory.
|
|
192
|
-
|
|
193
|
-
### Cleaning Up
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
make clean
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
Removes build artifacts, caches, and temporary files to keep your project directory clean.
|
|
200
|
-
|
|
201
|
-
### Updating project version
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
make version
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
Interactively prompts you to select the type of version update to apply (major, minor, patch, tag)
|
|
208
|
-
and automatically updates the project version accordingly.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
## 🤝 Contributing
|
|
212
|
-
|
|
213
|
-
Contributions are welcome!
|
|
214
|
-
Please ensure all QA checks and tests pass before opening a pull request.
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
<sub>🚀 Project starter provided by [Cookie Pyrate](https://github.com/gvieralopez/cookie-pyrate)</sub>
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: openfaba
|
|
3
|
-
Version: 0.1.2
|
|
4
|
-
Summary: A modern reimplementation of redele.
|
|
5
|
-
Author-email: Gustavo Viera López <gvieralopez@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Requires-Python: >=3.13
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: typer>=0.9.0
|
|
11
|
-
Requires-Dist: mutagen>=1.47.0
|
|
12
|
-
Dynamic: license-file
|
|
13
|
-
|
|
14
|
-
# openFABA
|
|
15
|
-
|
|
16
|
-
**openFABA** is a command-line tool for inspecting, extracting, and exporting audio
|
|
17
|
-
files for the **FABA** storytelling box. It allows you to convert standard MP3 files
|
|
18
|
-
into FABA-compatible files for specific figures.
|
|
19
|
-
|
|
20
|
-
This project builds upon the reverse-engineering work by
|
|
21
|
-
[wansors](https://github.com/wansors/myfaba-hacks/blob/main/python/redele.py).
|
|
22
|
-
At the moment, openFABA supports **only the original FABA device**.
|
|
23
|
-
|
|
24
|
-
### Disclaimer
|
|
25
|
-
|
|
26
|
-
openFABA is an independent project and is **not affiliated with or endorsed by FABA**.
|
|
27
|
-
|
|
28
|
-
This software is provided *as is*, without warranties of any kind. You are responsible
|
|
29
|
-
for how you use it and for any consequences that may arise, including device malfunction
|
|
30
|
-
or account-related actions. Some features may conflict with FABA’s terms of service or
|
|
31
|
-
usage policies.
|
|
32
|
-
|
|
33
|
-
The goal of openFABA is to:
|
|
34
|
-
|
|
35
|
-
* simplify the creation of custom, FABA-compatible figures
|
|
36
|
-
* enable personalization of figures you already own
|
|
37
|
-
|
|
38
|
-
We do **not** endorse music piracy, copyright infringement, or any misuse that could
|
|
39
|
-
negatively impact FABA or its ecosystem. FABA is a great company, and we encourage
|
|
40
|
-
supporting them by purchasing their products.
|
|
41
|
-
|
|
42
|
-
Use this tool responsibly and at your own risk.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## 🚀 Prerequisites
|
|
46
|
-
|
|
47
|
-
Before working with this project, make sure you have [uv](https://docs.astral.sh/uv/) installed. 👉 Install guide: [uv docs](https://docs.astral.sh/uv/getting-started/installation/)
|
|
48
|
-
|
|
49
|
-
If you are a developer and want to contribute to this project, you may want to have
|
|
50
|
-
[make](https://www.gnu.org/software/make/) installed as well.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## ⚡ Installation
|
|
54
|
-
|
|
55
|
-
Install dependencies into a local virtual environment:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
uv sync --all-groups
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Then, to activate the virtual environment:
|
|
62
|
-
|
|
63
|
-
On Linux / macOS:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
source .venv/bin/activate
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
On Windows (PowerShell):
|
|
70
|
-
|
|
71
|
-
```powershell
|
|
72
|
-
.venv\Scripts\Activate.ps1
|
|
73
|
-
# If your PowerShell execution policy prevents running the script, run:
|
|
74
|
-
powershell -ExecutionPolicy Bypass -File .venv\Scripts\Activate.ps1
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
On Windows (CMD):
|
|
78
|
-
|
|
79
|
-
```cmd
|
|
80
|
-
.venv\Scripts\activate.bat
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## 🛠️ Usage
|
|
84
|
-
|
|
85
|
-
### Create your own figure
|
|
86
|
-
|
|
87
|
-
Create a new FABA figure from a folder containing MP3 files. The target figure must
|
|
88
|
-
not already exist in the FABA library, otherwise the command will fail to avoid
|
|
89
|
-
accidental overwrites.
|
|
90
|
-
|
|
91
|
-
For example, to create a new FABA figure with ID `4742` using the songs in `/home/user/songs`
|
|
92
|
-
and copy it to the FABA box mounted at `/mnt/faba/MKI01`, run:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
openfaba insert \
|
|
96
|
-
--figure-id 4742 \
|
|
97
|
-
--source /home/user/songs \
|
|
98
|
-
--faba-library /mnt/faba/MKI01
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Write an NFC TAG with the figure ID and enjoy it! If you need help on how todo it,
|
|
102
|
-
[these FAQs](https://github.com/wansors/myfaba-hacks/blob/main/FAQ.md) from the original
|
|
103
|
-
wansors' project have a lot of useful information.
|
|
104
|
-
|
|
105
|
-
### Add songs to an existing figure
|
|
106
|
-
|
|
107
|
-
Append additional MP3 files to an already existing figure. New tracks are added after the
|
|
108
|
-
existing ones and never overwrite previously stored audio.
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
openfaba extend \
|
|
112
|
-
--figure-id 4742 \
|
|
113
|
-
--source /home/user/new_songs \
|
|
114
|
-
--faba-library /mnt/faba/MKI01
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### Replace a figure
|
|
119
|
-
|
|
120
|
-
Delete an existing figure and recreate it from scratch using a new set of MP3 files. This
|
|
121
|
-
operation removes the previous contents of the figure.
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
openfaba replace \
|
|
125
|
-
--figure-id 4742 \
|
|
126
|
-
--source /home/user/songs \
|
|
127
|
-
--faba-library /mnt/faba/MKI01
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
### Listen to some FABA songs on your computer
|
|
132
|
-
|
|
133
|
-
Extract (deobfuscate) a single figure from a FABA box and convert it back to standard MP3
|
|
134
|
-
files so they can be played on a computer or mobile device.
|
|
135
|
-
|
|
136
|
-
For example, to extract the Italian red elephant **Ele** (figure ID `0010`):
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
openfaba extract \
|
|
140
|
-
--figure-id 0010 \
|
|
141
|
-
--faba-library /mnt/faba/MKI01 \
|
|
142
|
-
--output /home/user/elephant_ele
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
### Obfuscate an entire MP3 library
|
|
147
|
-
|
|
148
|
-
Convert a directory tree of MP3 files into a FABA-compatible MKI library. Subfolders named
|
|
149
|
-
`K####` are interpreted as figure IDs; otherwise a default figure ID is used.
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
openfaba obfuscate \
|
|
153
|
-
--mp3-library /home/user/mp3_library \
|
|
154
|
-
--faba-library /mnt/faba/MKI01
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
### Deobfuscate an entire FABA library
|
|
159
|
-
|
|
160
|
-
Convert all figures from a FABA MKI library back into MP3 files, preserving the original
|
|
161
|
-
folder structure.
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
openfaba deobfuscate \
|
|
165
|
-
--faba-library /mnt/faba/MKI01 \
|
|
166
|
-
--mp3-library /home/user/output_mp3
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## 🪙 Resources used to create this project
|
|
170
|
-
|
|
171
|
-
- [myfaba-hacks GitHub repository](https://github.com/wansors/myfaba-hacks)
|
|
172
|
-
- [Hacking MyFaba Medium Article](https://medium.com/@wansors/hacking-myfaba-an-educational-journey-into-storytelling-box-customization-cc6fc5db719d)
|
|
173
|
-
- [Myfaba Store](https://www.myfaba.it/prodotti-sonori/acquista-per-tipologia/personaggi-sonori/)
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
## 📦 Tools for Developers
|
|
177
|
-
|
|
178
|
-
Common development tasks are wrapped in the `Makefile` for convenience.
|
|
179
|
-
|
|
180
|
-
### Linting, Formatting, and Type Checking
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
make qa
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Runs **Ruff** for linting and formatting, and **Mypy** for type checking.
|
|
187
|
-
|
|
188
|
-
### Running Unit Tests
|
|
189
|
-
|
|
190
|
-
Before running tests, override any required environment variables in the `.env.test` file.
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
make test
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Executes the test suite using **Pytest**.
|
|
197
|
-
|
|
198
|
-
### Building the Project
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
make build
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Generates a distribution package inside the `dist/` directory.
|
|
205
|
-
|
|
206
|
-
### Cleaning Up
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
make clean
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
Removes build artifacts, caches, and temporary files to keep your project directory clean.
|
|
213
|
-
|
|
214
|
-
### Updating project version
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
make version
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Interactively prompts you to select the type of version update to apply (major, minor, patch, tag)
|
|
221
|
-
and automatically updates the project version accordingly.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
## 🤝 Contributing
|
|
225
|
-
|
|
226
|
-
Contributions are welcome!
|
|
227
|
-
Please ensure all QA checks and tests pass before opening a pull request.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
<sub>🚀 Project starter provided by [Cookie Pyrate](https://github.com/gvieralopez/cookie-pyrate)</sub>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|