text:
![Thorsten-Voice logo](Logo_Thorsten-Voice.png)

- [Project motivation](#motivation-for-thorsten-voice-project-speaking_head-speech_balloon)

- [Personal note](#some-personal-words-before-using-thorsten-voice)

- [**Thorsten** Voice Datasets](#voice-datasets)
  - [Thorsten-21.02-neutral](#thorsten-2102-neutral)
  - [Thorsten-21.06-emotional](#thorsten-2106-emotional)
  - [Thorsten-22.10-neutral](#thorsten-2210-neutral)

- [**Thorsten** TTS-Models](#tts-models)
  - [Thorsten-21.04-Tacotron2-DCA](#thorsten-2104-tacotron2-dca)
  - [Thorsten-22.05-VITS](#thorsten-2205-vits)
  - [Thorsten-22.08-Tacotron2-DDC](#thorsten-2208-tacotron2-ddc)
  - [Other models](#other-models)

- [Public talks](#public-talks)

- [My Youtube channel](#youtube-channel)

- [Special Thanks](#thanks-section)

# Motivation for Thorsten-Voice project :speaking_head: :speech_balloon:
A **free** to use, **offline** working, **high quality** **german** **TTS** voice should be available for every project without any license struggling.

[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCjqqTVVBTsxpm0iOhQ1fp9g?style=social)](https://www.youtube.com/c/ThorstenMueller)
[![Project website](https://img.shields.io/badge/Project_website-www.Thorsten--Voice.de-92a0c0)](https://www.Thorsten-Voice.de)

# Social media
Please check and follow me on my social media profiles - Thank you.

| Platform         | Link                                                                                |
| --------------- | ------- |
| Youtube | [ThorstenVoice on Youtube](https://www.youtube.com/c/ThorstenMueller) |
| Twitter | [ThorstenVoice on Twitter](https://twitter.com/ThorstenVoice) |
| Instagram | [ThorstenVoice on Instagram](https://www.instagram.com/thorsten_voice/) |
| LinkedIn | [Thorsten Müller on LinkedIn](https://www.linkedin.com/in/thorsten-m%C3%BCller-848a344/) |

# Some personal words before using **Thorsten-Voice**
> I contribute my voice as a person believing in a world where all people are equal. No matter of gender, sexual orientation, religion, skin color and geocoordinates of birth location. A global world where everybody is warmly welcome on any place on this planet and open and free knowledge and education is available to everyone. :earth_africa: (*Thorsten Müller*)

Please keep in mind, that **i am no professional voice talent**. I'm just a normal guy sharing his voice with the world.

# Voice-Datasets
Voice datasets are listed on Zenodo:
| Dataset         | DOI Link                                                                                |
| --------------- | ------- |
| Thorsten-21.02-neutral | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5525342.svg)](https://doi.org/10.5281/zenodo.5525342) |
| Thorsten-21.06-emotional | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5525023.svg)](https://doi.org/10.5281/zenodo.5525023) |
| Thorsten-22.10-neutral | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7265581.svg)](https://doi.org/10.5281/zenodo.7265581) |

## Thorsten-21.02-neutral
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5525342.svg)](https://doi.org/10.5281/zenodo.5525342)

```
@dataset{muller_thorsten_2021_5525342,
  author       = {Müller, Thorsten and
                  Kreutz, Dominik},
  title        = {Thorsten-Voice - "Thorsten-21.02-neutral" Dataset},
  month        = feb,
  year         = 2021,
  note         = {{Please use it to make the world a better place for
                   whole humankind.}},
  publisher    = {Zenodo},
  version      = {3.0},
  doi          = {10.5281/zenodo.5525342},
  url          = {https://doi.org/10.5281/zenodo.5525342}
}
```

> :speaking_head: **Listen to some audio recordings from this dataset [here](https://drive.google.com/drive/folders/1KVjGXG2ij002XRHb3fgFK4j0OEq1FsWm?usp=sharing).**

### Dataset summary
* Recorded by Thorsten Müller
* Optimized by Dominik Kreutz
* LJSpeech file and directory structure
* 22.668 recorded phrases (*wav files*)
* More than 23 hours of pure audio
* Samplerate 22.050Hz
* Mono
* Normalized to -24dB
* Phrase length (min/avg/max): 2 / 52 / 180 chars
* No silence at beginning/ending
* Avg spoken chars per second: 14
* Sentences with question mark: 2.780
* Sentences with exclamation mark: 1.840

### Dataset evolution
As described in the PDF document ([evolution of thorsten dataset](./EvolutionOfThorstenDataset.pdf)) this dataset consists of three recording phases.

* **Phase 1**: Recorded with a cheap usb microphone (*low quality*)
* **Phase 2**: Recorded with a good microphone (*good quality*)
* **Phase 3**: Recorded with same good microphone but longer phrases (> 100 chars) (*good quality*)

If you want to use a dataset subset you can see which files belong to which recording phase in [recording quality](./RecordingQuality.csv) csv file.

## Thorsten-21.06-emotional
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5525023.svg)](https://doi.org/10.5281/zenodo.5525023)

```
@dataset{muller_thorsten_2021_5525023,
  author       = {Müller, Thorsten and
                  Kreutz, Dominik},
  title        = {{Thorsten-Voice - "Thorsten-21.06-emotional"
                   Dataset}},
  month        = jun,
  year         = 2021,
  note         = {{Please use it to make the world a better place for
                   whole humankind.}},
  publisher    = {Zenodo},
  version      = {2.0},
  doi          = {10.5281/zenodo.5525023},
  url          = {https://doi.org/10.5281/zenodo.5525023}
}
```

All emotional recordings where recorded by myself and i tried to feel and pronounce that emotion even if the phrase context does not match that emotion. Example: I pronounced the sleepy recordings in the tone i have shortly before falling asleep.

### Samples
Listen to the phrase "**Mist, wieder nichts geschafft.**" in following emotions.

* :slightly_smiling_face: [Neutral](./samples/thorsten-21.06-emotional/neutral.wav)
* :nauseated_face: [Disgusted](./samples/thorsten-21.06-emotional/disgusted.wav)
* :angry: [Angry](./samples/thorsten-21.06-emotional/angry.wav)
* :grinning: [Amused](./samples/thorsten-21.06-emotional/amused.wav)
* :astonished: [Surprised](./samples/thorsten-21.06-emotional/surprised.wav)
* :pensive: [Sleepy](./samples/thorsten-21.06-emotional/sleepy.wav)
* :dizzy_face: [Drunk](./samples/thorsten-21.06-emotional/drunk.wav)
* 🤫 [Whispering](./samples/thorsten-21.06-emotional/whisper.wav)
### Dataset summary
* Recorded by Thorsten Müller
* Optimized by Dominik Kreutz
* 300 sentences * 8 emotions = 2.400 recordings
* Mono
* Samplerate 22.050Hz
* Normalized to -24dB
* No silence at beginning/ending
* Sentence length: 59 - 148 chars

## Thorsten-22.10-neutral
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7265581.svg)](https://doi.org/10.5281/zenodo.7265581)
> :speaking_head: **Listen to some audio recordings from this dataset [here](https://drive.google.com/drive/folders/1dxoSo8Ktmh-5E0rSVqkq_Jm1r4sFnwJM?usp=sharing).**

```
@dataset{muller_thorsten_2022_7265581,
  author       = {Müller, Thorsten and
                  Kreutz, Dominik},
  title        = {ThorstenVoice Dataset 2022.10},
  month        = oct,
  year         = 2022,
  publisher    = {Zenodo},
  version      = {1.0},
  doi          = {10.5281/zenodo.7265581},
  url          = {https://doi.org/10.5281/zenodo.7265581
}
```

# TTS Models

## Thorsten-21.04-Tacotron2-DCA
This [TTS-model](https://drive.google.com/drive/folders/1m4RuffbvdOmQWnmy_Hmw0cZ_q0hj2o8B?usp=sharing) has been trained on [**Thorsten-21.02-neutral**](#thorsten-2102-neutral) dataset. The recommended trained Fullband-MelGAN Vocoder can be downloaded [here](https://drive.google.com/drive/folders/1hsfaconm4Yd9wPVyOtrXjWQs4ZAPoouY?usp=sharing).

Run the model:
* pip install TTS==0.5.0
* tts-server --model_name tts_models/de/thorsten/tacotron2-DCA

## Thorsten-22.05-VITS
Trained on dataset **Thorsten-22.05-neutral**.
Audio samples are available on [Thorsten-Voice website](https://www.thorsten-voice.de/en/just-get-started/).

To run TTS server just follow these steps:
* pip install tts==0.7.1
* tts-server --model_name tts_models/de/thorsten/vits
* Open browser on http://localhost:5002 and enjoy playing

## Thorsten-22.08-Tacotron2-DDC
Trained on dataset [**Thorsten-22.05-neutral**](#thorsten-2205-neutral).
Audio samples are available on [Thorsten-Voice website]([https://www.thorsten-voice.de/en/just-get-started/](https://www.thorsten-voice.de/2022/08/14/welches-tts-modell-klingt-besser/)).

To run TTS server just follow these steps:
* pip install tts==0.8.0
* tts-server --model_name tts_models/de/thorsten/tacotron2-DDC
* Open browser on http://localhost:5002 and enjoy playing

## Other models
### Silero

You can use a free A-GPL licensed models trained on **Thorsten-21.02-neutral** dataset via the [silero-models](https://github.com/snakers4/silero-models/blob/master/models.yml) project.

* [Thorsten 16kHz](https://drive.google.com/drive/folders/1tR6w4kgRS2JJ1TWZhwoFuU04Xkgo6YAs?usp=sharing)
* [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb)

### ZDisket
[ZDisket](https://github.com/ZDisket/TensorVox) made a tool called TensorVox for setting up an TTS environment on Windows and included a german TTS model trained by [monatis](https://github.com/monatis/german-tts). Thanks for sharing that :thumbsup:. See it in action on [Youtube](https://youtu.be/tY6_xZnkv-A).

# Public talks
I really want to bring the topic "**Open Voice For An Open Future**" to a bigger public attention.

* I've been part of a Linux User Group podcast about Mycroft AI and talked on my TTS efforts on that in (*May 2021*).
* I was invited by [Yusuf](https://github.com/monatis/) from Turkish tensorflow community to talk on "How to make machines speak with your own voice". This talk has been streamed live on Youtube and is available [here](https://www.youtube.com/watch?v=m-Uwb-Bg144&t=2303s). If you're interested on the showed slides, feel free to download my presentation [here](https://docs.google.com/presentation/d/1ynnw0ilKV3WwMSJHytrN3GXRiFr8x3r0DUimBm1y0LI/edit?usp=sharing) (*June 2021*)
)
* I've been invited as speaker on VoiceLunch language & linguistics on 03.01.2022. [Here are my slides](https://docs.google.com/presentation/d/1Gi6BmYHs7g4ZgdAiIKGBnBwZDCvJOD9DJxQOGlgds1o/edit?usp=sharing) (*January 2022*).

# Youtube channel
In summer 2021 i've started to share my lessons learned and experiences on open voice tech, in special **TTS** on my little [Youtube channel](https://www.youtube.com/c/ThorstenMueller). If you check out and like my videos i'd happy to welcome you as subscriber and member of my little Youtube community.

# Feel free to file an issue if you ...
* Use my TTS voice in your project(s)
* Want to share your trained "Thorsten" model
* Get to know about any abuse usage of my voice

# Thanks section
## Cool projects
* https://commonvoice.mozilla.org/
* https://coqui.ai/
* https://mycroft.ai/
* https://github.com/rhasspy/

## Cool people
* [El-Tocino](https://github.com/el-tocino/)
* [Eren Gölge](https://github.com/erogol/)
* [Gras64](https://github.com/gras64/)
* [Kris Gesling](https://github.com/krisgesling/)
* [Nmstoker](https://github.com/nmstoker)
* [Othiele](https://discourse.mozilla.org/u/othiele/summary)
* [Repodiac](https://github.com/repodiac)
* [SanjaESC](https://github.com/SanjaESC)
* [Synesthesiam](https://github.com/synesthesiam/)

## Even more special people
Additionally, a really nice thanks for my dear colleague, Sebastian Kraus, for supporting me with audio recording equipment and for being the creative mastermind behind the logo design.

And last but not least i want to say a **huge, huge thank you** to a special guy who supported me on this journey as a partner right from the beginning. Not just with nice words, but with his time, audio optimization knowhow and finally GPU power.

**Thank you so much, dear **Dominik** ([@domcross](https://github.com/domcross/)) for being my partner on this journey.**

Thorsten (*Twitter: @ThorstenVoice*)


text:
# Vocoder Vergleich auf Basis des "thorsten" Tacotron 2 Modells
Hier sind Hörproben mit unterschiedlichen Vocodern. Alle gesprochenen Texte (*Sample 1 - 4*) basieren auf Aufnahmen im Dataset, jedoch nicht auf dem Spektogramm von "ground truth", sondern auf Basis des trainierten Tacotron 2 Modells. Sample 5 ist der Beginn des Märchens "Der Froschkönig" und wurde nicht für das Dataset aufgezeichnet.

## Sätze
* **Sample #01**: Eure Schoko-Bonbons sind sagenhaft lecker!
* **Sample #02**: Eure Tröte nervt.
* **Sample #03**: Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet.
* **Sample #04**: Euer Plan hat ja toll geklappt.
* *Sample #05: "In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön." (Anfang vom "Froschkönig")*

# Ground truth
Originalaufnahmen aus dem "thorsten" Dataset.

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-gt.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-gt.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-gt.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-gt.wav"></audio>

# Griffin Lim
> Details zum Model: (todo: link)
> Tacotron2 + DDC: 460k Schritte trainiert

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-griffin-lim.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-griffin-lim.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-griffin-lim.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-griffin-lim.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-griffin-lim.wav"></audio>

# ParallelWaveGAN
> Details: [Notebook von Olaf](https://colab.research.google.com/drive/15kJHTDTVxyIjxiZgqD1G_s5gUeVNLkfy?usp=sharing)
> Tacotron2 + DDC: 360k Schritte trainiert, PWGAN Vocoder: 925k Schritte trainiert

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-pwgan.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-pwgan.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-pwgan.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-pwgan.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-pwgan.wav"></audio>

# WaveGrad
> Tacotron2 + DDC: 460k Schritte trainiert, WaveGrad Vocoder: 510k Schritte trainiert (inkl. Noise-Schedule)

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-wavegrad.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-wavegrad.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-wavegrad.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-wavegrad.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-wavegrad.wav"></audio>

# HifiGAN
> Thanks to SanjaESC (https://github.com/SanjaESC) for training this model.

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-hifigan.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-hifigan.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-hifigan.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-hifigan.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-hifigan.wav"></audio>

# VocGAN
> **Diese Beispiele basieren auf "ground truth" und nicht auf dem Tacotron 2 Modell**
> 200 Epochen / 284k Trainingsschritte

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-vocgan.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-vocgan.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-vocgan.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-vocgan.wav"></audio>

# GlowTTS / Waveglow
> Details: [Github von Synesthesiam](https://github.com/rhasspy/de_larynx-thorsten)
> GlowTTS trainiert für 380k und Vocoder für 500k Schritte.

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-waveglow.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-waveglow.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-waveglow.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-waveglow.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-waveglow.wav"></audio>

# TensorFlowTTS
## Multiband MelGAN
> Thanks [Monatis](https://github.com/monatis)
> Details: [Notebook von Monatis](https://colab.research.google.com/drive/1W0nSFpsz32M0OcIkY9uMOiGrLTPKVhTy?usp=sharing#scrollTo=SCbWCChVkfnn)
> Taco2 Modell für 80k Schritte trainiert, Multiband MelGAN für 800k Schritte.

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-TensorFlowTTS.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-TensorFlowTTS.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-TensorFlowTTS.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-TensorFlowTTS.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-TensorFlowTTS.wav"></audio>

# Silero models
> Thanks [snakers4](https://github.com/snakers4/silero-models)
> Details: [Notebook von Silero](https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb#scrollTo=indirect-berry)

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-silero.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-silero.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-silero.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-silero.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-silero.wav"></audio>

# Forward Tacotron
> Thanks [cschaefer26](https://github.com/as-ideas/ForwardTacotron)
> Config: Forward-Tacotron, trained to 300k, alpha set to 0.8, pretrained HifiGAN vocoder

    Sample
    Text
    Audio

    01
    Eure Schoko-Bonbons sind sagenhaft lecker
    <audio controls="" preload="none"><source src="samples/sample01-ForwardTacotron-HifiGAN.wav"></audio>

    02
    Eure Tröte nervt
    <audio controls="" preload="none"><source src="samples/sample02-ForwardTacotron-HifiGAN.wav"></audio>

    03
    Europa und Asien zusammengenommen wird auch als Eurasien bezeichnet
    <audio controls="" preload="none"><source src="samples/sample03-ForwardTacotron-HifiGAN.wav"></audio>

    04
    Euer Plan hat ja toll geklappt.
    <audio controls="" preload="none"><source src="samples/sample04-ForwardTacotron-HifiGAN.wav"></audio>

    05
    In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön.
    <audio controls="" preload="none"><source src="samples/sample05-ForwardTacotron-HifiGAN.wav"></audio>

repo_name: thorstenMueller/Thorsten-Voice

repo_language: Python


text:
# Motivation

Eine kostenfreie, qualitativ hochwertige, deutsche TTS Stimme, die offline erzeugt werden kann sollte jedem Projekt ohne Lizenzrechtliche Probleme zur Verfügung stehen.

# Egal aus welchem Bereich du kommst:
* Privates Bastelprojekt
* OpenSource/Community Projekt
* Bildung/Forschung/Wissenschaft
* Kommerzielles Unternehmen
* ...

# Egal welcher Bereich dich interessiert:
* Smarte Sprachassistenten
* Navigationssysteme
* Smart Homes
* Sprechende Kühlschränke
* Vorlesen von Bildschirmtexten (Barrierefreiheit)
* Interaktive Robotik
* ...

# Wer wir sind
Wir sind eine kleine motivierte Gruppe hobbymäßiger TTS-Enthusiasten die sich nach einem abgewandelten "Herr der Ringe Zitat" benannt hat - "**Fellowership of free german tts**"

# Wo wir aktuell stehen
Wir arbeiten weiterhin daran qualitativ noch bessere Modell zu trainieren, aber den aktuellen "stable" Stand kannst Du hier anhören:
* [Es ist im Moment klarer Himmel bei 18 Grad.](https://drive.google.com/file/d/1cDIq4QG6i60WjUYNT6fr2cpEjFQIi8w5/view?usp=sharing)
* [Ich verstehe das nicht, aber ich lerne jeden Tag neue Dinge.](https://drive.google.com/file/d/1kja_2RsFt6EmC33HTB4ozJyFlvh_DTFQ/view?usp=sharing)
* [Ich bin jetzt bereit.](https://drive.google.com/file/d/1GkplGH7LMJcPDpgFJocXHCjRln_ccVFs/view?usp=sharing)
* [Bitte warte einen Moment, bis ich fertig mit dem Booten bin.](https://drive.google.com/file/d/19Td-F14n_05F-squ3bNlt2BDE-NMFaq1/view?usp=sharing)
* [Mein Name ist Mycroft und ich bin funky.](https://drive.google.com/file/d/1dbyOyE7Oy8YdAsYqQ4vz4VJjiWIyc8oV/view?usp=sharing)

## Vergleich einiger Vocoder
Wir experimentieren aktuell mit unterschiedlichen Konfigurationen um das beste Modell zu ermitteln. Ein Vergleich der bisherigen Ergebnisse findest Du auf dieser Seite.
> [Vergleich der unterschiedlichen Modelle](./audio_compare)

# Interessiert?
[Weitere Details, Downloads und Danksagungen findet ihr hier.](https://github.com/thorstenMueller/deep-learning-german-tts "Dataset Details und Thorsten-Modell Download")

---

Wir wünschen euch viel Spaß und Erfolg bei der Umsetzung eurer Projekte :-)


text: # These are supported funding model platforms


text:
# This script generates the folder structure for ljspeech-1.1 processing from mimic-recording-studio database

# Changelog
# v1.0  - Initial release by Thorsten Müller (https://github.com/thorstenMueller/deep-learning-german-tts)
# v1.1  - Great improvements by Peter Schmalfeldt (https://github.com/manifestinteractive)
#           - Audio processing with ffmpeg (mono and samplerate of 22.050 Hz)
#           - Much better Python coding than my original version
#           - Greater logging output to command line
#           - See more details here: https://gist.github.com/manifestinteractive/6fd9be62d0ede934d4e1171e5e751aba
#           - Thanks Peter, it's a great contribution :-)
# v1.2  - Added choice for choosing which recording session should be exported as LJSpeech
# v1.3  - Added parameter mrs_dir to pass directory of Mimic-Recording-Studio
# v1.4  - Script won't crash when audio recorded has been deleted on disk
# v1.5  - Added parameter "ffmpeg" to make converting with ffmpeg optional

from genericpath import exists
import glob
import sqlite3
import os
import argparse
import sys

from shutil import copyfile
from shutil import rmtree

# Setup Directory Data
cwd = os.path.dirname(os.path.abspath(__file__))
output_dir = os.path.join(cwd, "dataset")
output_dir_audio = ""
output_dir_audio_temp=""
output_dir_speech = ""

# Create folders needed for ljspeech
def create_folders():
  global output_dir
  global output_dir_audio
  global output_dir_audio_temp
  global output_dir_speech

  print('→ Creating Dataset Folders')

  output_dir_speech = os.path.join(output_dir, "LJSpeech-1.1")

  # Delete existing folder if exists for clean run
  if os.path.exists(output_dir_speech):
    rmtree(output_dir_speech)

  output_dir_audio = os.path.join(output_dir_speech, "wavs")
  output_dir_audio_temp = os.path.join(output_dir_speech, "temp")

  # Create Clean Folders
  os.makedirs(output_dir_speech)
  os.makedirs(output_dir_audio)
  os.makedirs(output_dir_audio_temp)

def convert_audio():
  global output_dir_audio
  global output_dir_audio_temp

  recordings = len([name for name in os.listdir(output_dir_audio_temp) if os.path.isfile(os.path.join(output_dir_audio_temp,name))])

  print('→ Converting %s Audio Files to 22050 Hz, 16 Bit, Mono\n' % "{:,}".format(recordings))

  # Please use `pip install ffmpeg-python`
  import ffmpeg

  for idx, wav in enumerate(glob.glob(os.path.join(output_dir_audio_temp, "*.wav"))):

    percent = (idx + 1) / recordings

    print('› \033[96m%s\033[0m \033[2m%s / %s (%s)\033[0m ' % (os.path.basename(wav), "{:,}".format((idx + 1)), "{:,}".format(recordings), "{:.0%}".format(percent)))

    # Convert WAV file to required format
    (ffmpeg
      .input(wav)
      .output(os.path.join(output_dir_audio, os.path.basename(wav)), acodec='pcm_s16le', ac=1, ar=22050, loglevel='error')
      .overwrite_output()
      .run(capture_stdout=True)
    )

def copy_audio():
  global output_dir_audio

  print('→ Using ffmpeg to convert recordings')
  recordings = len([name for name in os.listdir(output_dir_audio_temp) if os.path.isfile(os.path.join(output_dir_audio_temp,name))])

  print('→ Copy %s Audio Files to LJSpeech Dataset\n' % "{:,}".format(recordings))

  for idx, wav in enumerate(glob.glob(os.path.join(output_dir_audio_temp, "*.wav"))):
    copyfile(wav,os.path.join(output_dir_audio, os.path.basename(wav)))

def create_meta_data(mrs_dir):
  print('→ Creating META Data')

  conn = sqlite3.connect(os.path.join(mrs_dir, "backend", "db", "mimicstudio.db"))
  c = conn.cursor()

  # Create metadata.csv for ljspeech
  metadata = open(os.path.join(output_dir_speech, "metadata.csv"), mode="w", encoding="utf8")

  # List available recording sessions
  user_models = c.execute('SELECT uuid, user_name from usermodel ORDER BY created_date DESC').fetchall()
  user_id = user_models[0][0]

  for row in user_models:
    print(row[0] + ' -> ' + row[1])

  user_answer = input('Please choose ID of recording session to export (default is newest session) [' + user_id + ']: ')

  if user_answer:
    user_id = user_answer

  for row in c.execute('SELECT audio_id, prompt, lower(prompt) FROM audiomodel WHERE user_id = "' + user_id + '" ORDER BY length(prompt)'):
    source_file = os.path.join(mrs_dir, "backend", "audio_files", user_id, row[0] + ".wav")
    if exists(source_file):
      metadata.write(row[0] + "|" + row[1] + "|" + row[2] + "\n")
      copyfile(source_file, os.path.join(output_dir_audio_temp, row[0] + ".wav"))
    else:
      print("Wave file {} not found.".format(source_file))

  metadata.close()
  conn.close()

def cleanup():
  global output_dir_audio_temp

  # Remove Temp Folder
  rmtree(output_dir_audio_temp)

def main():
  parser = argparse.ArgumentParser()
  parser.add_argument('--mrs_dir', required=True)
  parser.add_argument('--ffmpeg', required=False, default=False)
  args = parser.parse_args()

  if not os.path.isdir(os.path.join(args.mrs_dir,"backend")):
    sys.exit("Passed directory is no valid Mimic-Recording-Studio main directory!")

  print('\n\033[48;5;22m  MRS to LJ Speech Processor  \033[0m\n')

  create_folders()
  create_meta_data(args.mrs_dir)

  if(args.ffmpeg):
    convert_audio()

  else:
    copy_audio()

  cleanup()

  print('\n\033[38;5;86;1m✔\033[0m COMPLETE【ツ】\n')

if __name__ == '__main__':
  main()


text:
# This script gets speech rate per audio recording from a voice dataset (ljspeech file and directory structure)
# Writte by Thorsten Müller (deep-learning-german@gmx.net) and provided without any warranty.
# https://github.com/thorstenMueller/deep-learning-german-tts/
# https://twitter.com/ThorstenVoice

# Changelog:
# v0.1 - 26.09.2021 - Initial version

from genericpath import exists
import os
import librosa
import csv

dataset_dir = "/home/thorsten/___dev/tts/dataset/Thorsten-neutral-Dec2021-44k/" # Directory where metadata.csv is in
out_csv_file = os.path.join(dataset_dir,"speech_rate_report.csv")
decimal_use_comma = True # False: Splitting decimal value with a dot (.); True: Comma (,)

out_csv = open(out_csv_file,"w")
out_csv.write("filename;audiolength_sec;number_chars;chars_per_sec;remove_from_dataset\n")

# Open metadata.csv file
with open(os.path.join(dataset_dir,"metadata.csv")) as csvfile:
    reader = csv.reader(csvfile, delimiter='|')
    for row in reader:
        wav_file = os.path.join(dataset_dir,"wavs",row[0] + ".wav")

        if exists(wav_file):
            # Gather values for report.csv output
            phrase_len = len(row[1]) - 1 # Do not count punctuation marks.
            duration = round(librosa.get_duration(filename=wav_file),2)
            char_per_sec = round(phrase_len / duration,2)

            if decimal_use_comma:
                duration = str(duration).replace(".",",")
                char_per_sec = str(char_per_sec).replace(".",",")

            out_csv.write(row[0] + ".wav;" + str(duration) + ";" + str(phrase_len) + ";" + str(char_per_sec) + ";no\n")
        else:
            print("File " + wav_file + " does not exist.")

out_csv.close()


text:
# Dockerfile for running Coqui TTS trainings in a docker container on NVIDIA Jetson platofrm.
# Based on NVIDIA Jetson ML Image, provided without any warranty as is by Thorsten Müller (https://twitter.com/ThorstenVoice) in august 2021

FROM nvcr.io/nvidia/l4t-ml:r32.5.0-py3

RUN echo "deb https://repo.download.nvidia.com/jetson/common r32.4 main" >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
RUN echo "deb https://repo.download.nvidia.com/jetson/t194 r32.4 main" >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list

RUN apt-get update -y
RUN apt-get install vim python-mecab libmecab-dev cuda-toolkit-10-2 libcudnn8 libcudnn8-dev libsndfile1-dev locales -y

# Setting some environment vars
ENV LLVM_CONFIG=/usr/bin/llvm-config-9
ENV PYTHONPATH=/coqui/TTS/
ENV LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
# Skipping OPENBLAS_CORETYPE might show "Illegal instruction (core dumped) error
ENV OPENBLAS_CORETYPE=ARMV8

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
LABEL com.nvidia.volumes.needed="nvidia_driver"

# Adjust locale setting to your personal needs
RUN sed -i '/de_DE.UTF-8/s/^# //g' /etc/locale.gen && \
    locale-gen
ENV LANG de_DE.UTF-8
ENV LANGUAGE de_DE:de
ENV LC_ALL de_DE.UTF-8

RUN mkdir /coqui
WORKDIR /coqui

ARG COQUI_BRANCH
RUN git clone -b ${COQUI_BRANCH} https://github.com/coqui-ai/TTS.git
WORKDIR /coqui/TTS
RUN pip3 install pip setuptools wheel --upgrade
RUN pip uninstall -y tensorboard tensorflow tensorflow-estimator nbconvert matplotlib
RUN pip install -r requirements.txt
RUN python3 ./setup.py develop

# Jupyter Notebook
RUN python3 -c "from notebook.auth.security import set_password; set_password('nvidia', '/root/.jupyter/jupyter_notebook_config.json')"
CMD /bin/bash -c "jupyter lab --ip 0.0.0.0 --port 8888 --allow-root"

# Build example:
#   nvidia-docker build . -f Dockerfile.Jetson-Coqui --build-arg COQUI_BRANCH=v0.1.3 -t jetson-coqui
# Run example:
#   nvidia-docker run -p 8888:8888 -d --shm-size 32g --gpus all -v /ssd/___prj/tts/dataset-july21:/coqui/TTS/data jetson-coqui
# Bash example:
#   nvidia-docker exec -it <containerId> /bin/bash


text:
# This script removes recordings from an ljspeech file/directory structured dataset based on CSV file from "getDatasetSpeechRate"
# Writte by Thorsten Müller (deep-learning-german@gmx.net) and provided without any warranty.
# https://github.com/thorstenMueller/deep-learning-german-tts/
# https://twitter.com/ThorstenVoice

# Changelog:
# v0.1 - 26.09.2021 - Initial version

import os
import csv
import shutil

dataset_dir = "/Users/thorsten/Downloads/thorsten-export-20210909/" # Directory where metadata.csv is in
subfolder_removed = "___removed"
in_csv_file = os.path.join(dataset_dir,"speech_rate_report.csv")
to_remove = []

# Open metadata.csv file
with open(os.path.join(dataset_dir,in_csv_file)) as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        if row[4] == "yes":
            # Recording in that row should be removed from dataset
            to_remove.append(row[0])
            print("Recording " + row[0] + " will be removed from dataset.")

print("\n" + str(len(to_remove)) + " recordings has been marked for deletion.")

if len(to_remove) > 0:

    metadata_cleaned = open(os.path.join(dataset_dir,"metadata_cleaned.csv"),"w")

    # Create new subdirectory for removed wav files
    removed_dir = os.path.join(dataset_dir,subfolder_removed)
    if not os.path.exists(removed_dir):
        os.makedirs(removed_dir)

    # Remove lines from metadata.csv and move wav files to new subdirectory
    with open(os.path.join(dataset_dir,"metadata.csv")) as csvfile:
        reader = csv.reader(csvfile, delimiter='|')
        for row in reader:
            if (row[0] + ".wav") not in to_remove:
                metadata_cleaned.write(row[0] + "|" + row[1] + "|" + row[2] + "\n")
            else:
                # Move recording to new subfolder
                shutil.move(os.path.join(dataset_dir,"wavs",row[0] + ".wav"),removed_dir)

    metadata_cleaned.close()


text:
# Short collection of helpful scripts for dataset creation and/or TTS training stuff

## MRS2LJSpeech
Python script which takes recordings (filesystem and sqlite db) done with Mycroft Mimic-Recording-Studio (https://github.com/MycroftAI/mimic-recording-studio) and creates an audio optimized dataset in widely supported LJSpeech directory structure.

Peter Schmalfeldt (https://github.com/manifestinteractive) did an amazing job as he optimized my originally (quick'n dirty) version of that script, so thank you Peter :-)
See more details here: https://gist.github.com/manifestinteractive/6fd9be62d0ede934d4e1171e5e751aba#file-mrs2ljspeech-py

## Dockerfile.Jetson-Coqui
> Add your user to `docker` group to not require sudo on all operations.

Thanks to NVIDIA for providing docker images for Jetson platform. I use the "machine learning (ML)" image as baseimage for setting up a Coqui environment.

> You can use any branch or tag as COQUI_BRANCH argument. v0.1.3 is just the current stable version.

Switch to directory where Dockerfile is in and run `nvidia-docker build . -f Dockerfile.Jetson-Coqui --build-arg COQUI_BRANCH=v0.1.3 -t jetson-coqui` to build your container image. When build process is finished you can start a container on that image.

### Mapped volumes
We need to bring your dataset and configuration file into our container so we should map a volume on running container
`nvidia-docker run -p 8888:8888 -d --shm-size 32g --gpus all -v [host path with dataset and config.json]:/coqui/TTS/data jetson-coqui`. Now we have a running container ready for Coqui TTS magic.

### Jupyter notebook
Coqui provides lots of useful Jupyter notebooks for dataset analysis. Once your container is up and running you should be able to call

### Running bash into container
`nvidia-docker exec -it jetson-coqui /bin/bash` now you're inside the container and an `ls /coqui/TTS/data` should show your dataset files.


text:
import os

from trainer import Trainer, TrainerArgs

from TTS.tts.configs.shared_configs import BaseDatasetConfig
from TTS.tts.configs.vits_config import VitsConfig
from TTS.tts.datasets import load_tts_samples
from TTS.tts.models.vits import Vits, VitsAudioConfig
from TTS.tts.utils.text.tokenizer import TTSTokenizer
from TTS.utils.audio import AudioProcessor

def main():

	output_path = os.path.dirname(os.path.abspath(__file__))
	#output_path = "c:\\temp\tts"
	dataset_config = BaseDatasetConfig(
		formatter="ljspeech", meta_file_train="metadata_small.csv", path="C:\\Users\\ThorstenVoice\\TTS-Training\\ThorstenVoice-Dataset_2022.10"
	)
	audio_config = VitsAudioConfig(
		sample_rate=22050, win_length=1024, hop_length=256, num_mels=80, mel_fmin=0, mel_fmax=None
	)

	config = VitsConfig(
		audio=audio_config,
		run_name="vits_thorsten-voice",
		batch_size=4,
		eval_batch_size=4,
		batch_group_size=5,
		num_loader_workers=1,
		num_eval_loader_workers=1,
		run_eval=True,
		test_delay_epochs=-1,
		epochs=1000,
		text_cleaner="phoneme_cleaners",
		use_phonemes=True,
		phoneme_language="de",
		phoneme_cache_path=os.path.join(output_path, "phoneme_cache"),
		compute_input_seq_cache=True,
		print_step=25,
		print_eval=True,
		mixed_precision=False,
		output_path=output_path,
		datasets=[dataset_config],
		cudnn_benchmark=False,
		test_sentences=[
		  "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.",
		  "Sei eine Stimme, kein Echo.",
		  "Es tut mir Leid David. Das kann ich leider nicht machen.",
		  "Dieser Kuchen ist großartig. Er ist so lecker und feucht.",
		  "Vor dem 22. November 1963.",
		],
	)

	# INITIALIZE THE AUDIO PROCESSOR
	# Audio processor is used for feature extraction and audio I/O.
	# It mainly serves to the dataloader and the training loggers.
	ap = AudioProcessor.init_from_config(config)

	# INITIALIZE THE TOKENIZER
	# Tokenizer is used to convert text to sequences of token IDs.
	# config is updated with the default characters if not defined in the config.
	tokenizer, config = TTSTokenizer.init_from_config(config)

	# LOAD DATA SAMPLES
	# Each sample is a list of ```[text, audio_file_path, speaker_name]```
	# You can define your custom sample loader returning the list of samples.
	# Or define your custom formatter and pass it to the `load_tts_samples`.
	# Check `TTS.tts.datasets.load_tts_samples` for more details.
	train_samples, eval_samples = load_tts_samples(
		dataset_config,
		eval_split=True,
		eval_split_max_size=config.eval_split_max_size,
		eval_split_size=config.eval_split_size,
	)

	# init model
	model = Vits(config, ap, tokenizer, speaker_manager=None)

	# init the trainer and 🚀
	trainer = Trainer(
		TrainerArgs(),
		config,
		output_path,
		model=model,
		train_samples=train_samples,
		eval_samples=eval_samples,
	)
	trainer.fit()
	print("Fertig!")

from multiprocessing import Process, freeze_support
if __name__ == '__main__':
    freeze_support()  # needed for Windows
    main()


text:
from pygpt4all.models.gpt4all_j import GPT4All_J
from TTS.api import TTS
import wave,sys,pyaudio

def new_text_callback(text):
    print(text, end="")

model = GPT4All_J('./ggml-gpt4all-j-v1.2-jazzy.bin')
outText = model.generate("Once upon a time, ", n_predict=55, new_text_callback=new_text_callback)
print(outText)

tts = TTS(model_name="tts_models/en/ljspeech/vits--neon")
tts.tts_to_file(text=outText)

wf = wave.open('output.wav')
p = pyaudio.PyAudio()
chunk = 1024
stream = p.open(format=
    p.get_format_from_width(wf.getsampwidth()),
    channels=wf.getnchannels(),
    rate=wf.getframerate(),
    output = True
)
data = wf.readframes(chunk)
while data != '':
    stream.write(data)
    data=wf.readframes(chunk)


text:
# Script is originally taken from https://github.com/imartinez/privateGPT/blob/main/privateGPT.py
# and i've added some STT and TTS stuff.
# See full tutorial on my "Thorsten-Voice" Youtube channel: https://youtu.be/qBs85JNyY7I

from dotenv import load_dotenv
from langchain.chains import RetrievalQA
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.vectorstores import Chroma
from langchain.llms import GPT4All, LlamaCpp
import os
from constants import CHROMA_SETTINGS

import whisper
from TTS.api import TTS

##############################
# Whisper for local STT part #
##############################

model = whisper.load_model("base")
result = model.transcribe("input.wav")
query = result["text"]

##################################
# PrivateGPT for query documents #
##################################
load_dotenv()

embeddings_model_name = os.environ.get("EMBEDDINGS_MODEL_NAME")
persist_directory = os.environ.get('PERSIST_DIRECTORY')

model_type = os.environ.get('MODEL_TYPE')
print("Model type: " + model_type)
model_path = os.environ.get('MODEL_PATH')
print("Model path: " + model_path)
model_n_ctx = os.environ.get('MODEL_N_CTX')
target_source_chunks = int(os.environ.get('TARGET_SOURCE_CHUNKS',4))

embeddings = HuggingFaceEmbeddings(model_name=embeddings_model_name)
db = Chroma(persist_directory=persist_directory, embedding_function=embeddings, client_settings=CHROMA_SETTINGS)
retriever = db.as_retriever(search_kwargs={"k": target_source_chunks})
llm = GPT4All(model=model_path, n_ctx=model_n_ctx, backend='gptj', callbacks=None, verbose=False)
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=False)

print("")
print(">> Asking my documents: " + query)
print("")

res = qa(query)
print("")

############################
# Coqui for local TTS part #
############################
os.environ["TOKENIZERS_PARALLELISM"] = "false"
tts = TTS(model_name="tts_models/en/ljspeech/vits--neon")
tts.tts_to_file(text=res['result'])


text:
# Contribuindo :brazil:

Qualquer contribuição é bem vinda! Sinta-se livre para adicionar novos items, propor seções novas, apontar erros e fazer melhorias. Apenas considere as seguintes instruções:

- Siga o formato: `[Título](link) - <descrição>` (a descrição é opcional)
- Atenção para a ordem alfabética e erros de grafia e gramática
- Evite "Pull Requests" grandes
- É preferível abrir uma "Issue" antes de submeter um PR, principalmente quando se tratar de uma atualização impactante.

Se estiver em dúvida sobre como abrir um Pull Request, [estes](https://gist.github.com/Chaser324/ce0505fbed06b947d962) [tutoriais](https://github.com/chapulina/guia_codigo_aberto) vão lhe ajudar!

# Contributing :uk:

Any contribution is welcome! Feel free to add new items, propose new sections, point errors and make improvements. Just consider the following guidelines:

- Follow the format: `[Title](link) - <description>` (description is optional)
- Attention to the alphabetical order and spelling/grammar errors
- Avoid big Pull Requests
- Prefer opening an "Issue" before submitting a PR, especially when it regards an impactful update.

If you are in doubt about how to open a Pull Request, [these](https://gist.github.com/Chaser324/ce0505fbed06b947d962) [tutorials](https://github.com/chapulina/guia_codigo_aberto) will help you!

repo_name: mateus-amarante/awesome-robotics-brazil

mime_type: text/plain


text:
# Awesome Robotics Brazil [![Awesome](https://awesome.re/badge.svg)](https://github.com/sindresorhus/awesome)

![custom-logo](logo.png)

![awesome-lint](https://github.com/mateus-amarante/awesome-robotics-brazil/workflows/awesome-lint/badge.svg)

[:brazil: pt-br](README.PT-BR.md)

List of robotics initiatives in Brazil! Feel free to [contribute](CONTRIBUTING.md)!

## Contents

- [Companies](#companies)
- [R&D Institutions](#rd-institutions)
- [Research Centers and Laboratories](#research-centers-and-laboratories)
- [Competitions and Events](#competitions-and-events)
- [Online Communities](#online-communities)
- [Courses](#courses)

## Companies

- [13Robotics](http://www.13robotics.com/) - (Rio de Janeiro-RJ / Salvador-BA). [:octocat:](https://github.com/ThirteenLtda)
- [Acta Robotics](http://actarobotics.com/) - (Manaus-AM).
- [Adroit Robotics](http://adroitrobotics.com/) - (São Paulo-SP).
- [AI ROBOTS](https://www.airobots.com.br/) - (Belo Horizonte-MG).
- [ARMTEC Tecnologia em Robótica](http://www.armtecbrasil.com/) - (Fortaleza-CE).
- [AuRos Robotics](https://aurosrobotics.com.br/) - (Rio Grande-RS).
- [Automni](https://automni.com.br/) - (São Paulo-SP).
- [Brisa](https://www.brisa.tech/) - (Recife-PE / Florianópolis-SC).
- [Daedlaus Labs](https://www.daedalus-tech.com/) - (Bauru-SP).
- [dotBot Robotics](https://www.dotbot-robotics.com/) - (Rio de Janeiro-RJ).
- [GIC](https://www.gicbrasil.com/) - (Barueri-SP).
- [Hexagon Mining](https://hexagonmining.com/) - (Belho Horizonte-MG).
- [Human Robotics](https://www.humanrobotics.ai/) - (Curitiba-PR).
- [Instor](https://www.instor.com.br/) - (Porto Alegre-RS).
- [Lume Robotics](http://lumerobotics.ai/) - (Vitória-ES).
- [NTU](https://ntu.ai/) - (São Paulo-SP).
- [Pluginbot](https://pluginbot.ai/) - (São Paulo-SP).
- [Pollux](https://www.pollux.com.br/) - (Joinville-SC / Americana-SP).
- [Qiron Robotics](https://qironrobotics.com/) - (Santa Maria - RS).
- [SkyDrones](https://skydrones.com.br/) - (Porto Alegre - RS).
- [Somai EdTech](https://somai.com.br/) - (São Paulo - SP).
- [Speedbird](https://speedbird.aero/) - Drone delivery (Franca-SP).
- [Synkar Autonomous](https://www.synkar.com/) - (Ribeirão Preto-SP). [:octocat:](https://github.com/Synkar)
- [Tidewise](https://www.tidewise.io/) -  (Rio de Janeiro-RJ). [:octocat:](https://github.com/tidewise)
- [Umbô](https://www.umbo.net.br/) - (São Paulo-SP).
- [Unidroid](https://www.unidroid.com.br/) - (São José dos Campos-SP).
- [Wiser Robotics](https://wiserrobotics.com.br/) - (São Paulo-SP).

## R&D Institutions

- [INESC P&D Brasil](http://inescbrasil.org.br/) - (Santos-SP).
- [Instituto Tecnológico Vale](http://www.itv.org/en/research-line/robotics-applied-to-mining/) - (Ouro Preto-MG). [:octocat:](https://github.com/itvroc/)
- [SENAI CIMATEC](http://www.senaicimatec.com.br/areas-de-interesse/robotica-e-supercomputacao/) - (Salvador-BA). [:octocat:](https://github.com/Brazilian-Institute-of-Robotics)

## Research Centers and Laboratories

- [AiR-LAB - Artificial Intelligence & Robotics Laboratory (UFU)](https://airlabufu.wixsite.com/site)
- [ASCO - Núcleo de Arquitetura de Computadores e Sistemas Operacionais (UNEB)](http://www.acso.uneb.br)
- [COPPE - Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa em Engenharia (UFRJ)](https://www.coppe.ufrj.br/)
  - [GSCAR - Grupo de Simulação e Controle em Automação e Robótica](http://www.coep.ufrj.br/gscar/sobre.html)
    - [Labcon - Laboratório de Controle em Automação e Robótica](http://www.coep.ufrj.br/labcon)
    - [LARC - Laboratório de Automação, Robótica e Controle](http://www.coep.ufrj.br/gscar/larc.html)
    - [LEAD - Laboratório de Controle e Automação, Engenharia de Aplicação e Desenvolvimento](http://www.coep.ufrj.br/gscar/lead/)
  - [LabRob - Laboratório de Robótica](http://www.labrob.coppe.ufrj.br/)
- [CROB - Centro de Robótica da USP-São Carlos](http://www.crob.eesc.usp.br/)
  - [LabRoM - Laboratório de Robótica Móvel](http://www.crob.eesc.usp.br/laboratorios/) - [:octocat:](https://github.com/EESC-LabRoM)
  - [LAR - Laboratório de Aprendizado de Robôs](http://lar.icmc.usp.br/) - [:octocat:](https://github.com/LAR-USP)
  - [LASI - Laboratório de Sistemas Inteligentes](http://www.sel.eesc.usp.br/lasi/lasi/?page_id=83&lang=pt)
  - [LRM - Laboratório de Robótica Móvel](http://lrm.icmc.usp.br/web/index.php?n=Port.Home) - [:octocat:](https://github.com/usp-lrm)
  - [LSEC - Laboratório de Sistemas Embarcados Críticos](https://www.lsec.icmc.usp.br/) - [:octocat:](https://github.com/LSEC-ICMC)
  - [ManLab - Laboratório de Manipulação Robótica](http://143.107.239.254/mecatronica/index.php/pt/laboratorios/laboratorio-de-manipulacao-robotica)
  - [ReRob - Laboratório de Reabilitação Robótica](http://143.107.239.254/mecatronica/index.php/pt/laboratorios/laboratorio-de-reabilitacao-robotica)
- [GARRA - Grupo de Automação e Robótica Aplicada (UFSM)](https://www.ufsm.br/grupos/garra/)
- [GCAR - Grupo de Controle, Automação e Robótica (UFRGS)](https://www.ece.ufrgs.br/)
- [GEPTA - Laboratório de Robótica e de Serviços (UFPR)](http://gepta.weebly.com/)
- [GPAR - Grupo de Pesquisa em Automação, Controle e Robótica (UFC)](https://gpar.ufc.br/)
- [GPRUFS - Grupo de Pesquisa em Robótica da UFS (UFS)](http://www.gprufs.org/) - [:octocat:](https://github.com/GPRUFS)
- [GRACO - Grupo de Automação e Controle (UnB)](http://www.graco.unb.br/)
- [GRIn - Grupo de Robótica Inteligente (UFJF)](https://www.ufjf.br/inerge/institucional/laboratorios/grin/)
- [Grupo de Robótica UFSCar](https://www.robotica.ufscar.br/)
  - [LARIS - Laboratory of Autonomous Robots and Intelligent Systems](https://www.laris.ufscar.br/pt-br)
  - [MRL - Mobile Robotics Laboratory](https://www.ufscar-mobile-robotics.com.br/)
- [IDR Lab - Laboratório de Robótica Industrial e de Defesa (IME)](http://labmec.imejunior.com.br/)
- [IntelAgir - Grupo de Pesquisa em Sistemas Inteligentes (UTFPR-FB)](https://intelagir-research-group.github.io/)
- [Lab Control (UTFPR)](http://anvargas.com/dokuwiki/doku.php) - [:octocat:](https://github.com/labcontrol-data)
- [LABSCA - Laboratório de Sistemas Computacionais Autônomos (ITA)](http://www.comp.ita.br/labsca/)
- [LAICA - Laboratório de Pesquisa em Informática, Comunicação e Automação (IFRN)](http://laica.ifrn.edu.br/)
- [LAR - Grupo de Automação e Robótica (USP-SP)](http://sites.poli.usp.br/pmr/lar/)
- [LAR - Laboratório de Automação e Robótica (UFU)](http://www.mecanica.ufu.br/laboratorio/laboratorio-de-automacao-e-robotica)
- [LaR - Laboratório de Robótica (UFBA)](http://www.dee.eng.ufba.br/lar/) - [:octocat:](https://github.com/lar-deeufba)
- [LAR - Laboratório de Robótica Aplicada Raul Guenther (UFSC)](https://robotica.ufsc.br/)
- [LARA - Laboratório de Automação e Robótica (UnB)](http://www.lara.unb.br) - [:octocat:](https://github.com/lara-unb)
- [LARM - Laboratório de Automação e Robótica Móvel (UFSC)](https://larm.ufsc.br/)
- [LARS - Laboratório de Robótica e Sistemas Dedicados (UFRN)](https://labs.imd.ufrn.br/labs/nPITI/laboratorios/LARS)
- [LASER - Laboratório Avançado de Sistemas Embarcados e Robótica (UTFPR)](http://laser.dainf.ct.utfpr.edu.br/)
- [LASER - Laboratório de Engenharia de Sistemas e Robótica (UFPB)](http://laser.ci.ufpb.br/) - [:octocat:](https://github.com/laser-ufpb)
- [LCA - Laboratório de Controle Aplicado (IFSP)](https://spo.ifsp.edu.br/lca)
- [LIRA - Laboratório de Inteligência e Robótica Aplicadas (PUC Rio)](http://www.lira.ele.puc-rio.br)
- [LRI - Laboratório de Robótica Inteligente (PUC Rio)](http://www.ele.puc-rio.br/posgraduacao/laboratorios/lri/)
- [LRTA - Laboratório de Robótica e Tecnologia Assistiva](http://www.nta.ufes.br/)
- [MACRO - Mechatronics, Control, and Robotics (UFMG)](http://macro.ppgee.ufmg.br/)
  - [CORO - Laboratório de Sistemas de Computação e Robótica](http://coro.cpdee.ufmg.br/) - [:octocat:](https://bitbucket.org/coroufmg)
- [NAUTEC - Grupo de Automação e Robótica Inteligente (FURG)](https://nautec.furg.br/)
- [Natalnet Labs (UFRN)](http://www.natalnet.br/home/)
- [NERO - Núcleo de Especialização em Robótica (UFV)](https://www.robotica.ufv.br/)
- [PhiRobotics - Grupo de Pesquisa em Robótica Móvel e Visão Computacional (UFRGS)](https://www.inf.ufrgs.br/phi-group/site/) - [:octocat:](https://github.com/phir2-lab)
- [RoboFEI (FEI)](https://portal.fei.edu.br/robo-fei) - [:octocat:](https://github.com/RoboFEI)
- [TAURA – Grupo de Pesquisa em Tecnologia em Automação e Robótica Aplicada (UFSM)](https://www.ufsm.br/pro-reitorias/prpgp/grupo-de-pesquisa/taura-grupo-de-pesquisa-em-tecnologia-em-automacao-e-robotica-aplicada/)
- [VeRLab - Laboratório de Visão Computacional e Robótica (UFMG)](https://www.verlab.dcc.ufmg.br/) - [:octocat:](https://github.com/verlab)
- [VRI - Laboratório Visão, Robótica e Imagem (UFPR](https://web.inf.ufpr.br/vri/)

## Competitions and Events

- [Competição Brasileira de Robótica (CBR) / Latin American Robotics Competition (LARC) / RoboCup Open](http://www.cbrobotica.org/)
- [Mostra Nacional de Robótica (MNR)](http://www.mnr.org.br/)
- [Olimpíada Brasileira de Robótica (OBR)](http://www.obr.org.br/)
- [Torneio Brasil de Robótica (TBR)](https://www.torneiobrasilderobotica.com.br/)

## Online Communities

- [#somosrobotica - somosrobotica@gouglegroups.com](https://groups.google.com/g/somosrobotica)
- [ROS Brasil - Discord Channel](https://discord.gg/UKUfdpku)
- [ROS Brazil Users Group - ROS Discourse](https://discourse.ros.org/c/local/brazil/40)

## Courses

- [Especialização em Automação, Controle e Robótica (SENAI CIMATEC)](http://www.senaicimatec.com.br/cursos_pos/especializacao-em-automacao-controle-e-robotica/#/)
- [Especialização em Robótica e Inteligência Artificial (FURG)](https://siposg.furg.br/curso/1068)
- [Especialização em Robótica e Sistemas Autônomos (SENAI CIMATEC)](http://www.senaicimatec.com.br/en/cursos_pos/robotica-e-sistemas-autonomos/#/)
- [Graduação em Engenharia de Robôs (FEI)](https://portal.fei.edu.br/curso-de-engenharia-de-robos)


text:
# Awesome Robotics Brazil [![Awesome](https://awesome.re/badge.svg)](https://github.com/sindresorhus/awesome)

![custom-logo](logo.png)

![awesome-lint](https://github.com/mateus-amarante/awesome-robotics-brazil/workflows/awesome-lint/badge.svg)

[:uk: en](README.EN.md)

Lista de iniciativas de robótica do Brasil! Sinta-se livre para [contribuir](CONTRIBUTING.md)!

## Contents

- [Empresas](#empresas)
- [Institutos de Pesquisa e Desenvolvimento](#institutos-de-pesquisa-e-desenvolvimento)
- [Laboratórios e Centros de Pesquisa](#laboratórios-e-centros-de-pesquisa)
- [Competições e Eventos](#competições-e-eventos)
- [Comunidades Online](#comunidades-online)
- [Cursos](#cursos)

## Empresas

- [13Robotics](http://www.13robotics.com/) - Desenvolvem projetos de P&D de robótica voltados ao setor de energia (Rio de Janeiro-RJ / Salvador-BA). [:octocat:](https://github.com/ThirteenLtda)
- [Acta Robotics](http://actarobotics.com/) - Oferecem o Kappabot, "o primeiro robô móvel autônomo do tipo AMR com tecnologia brasileira produzido no Brasil" (Manaus-AM).
- [Adroit Robotics](http://adroitrobotics.com/) - Oferecem solução de monitoramento da produtividade e saúde do pomar com o sensor LeafSense (São Paulo-SP).
- [AI ROBOTS](https://www.airobots.com.br/) - Oferecem plataforma para robôs que utiliza inteligência artificial para otimização de processos e manutenção preditiva e prescritiva (Belo Horizonte-MG).
- [ARMTEC Tecnologia em Robótica](http://www.armtecbrasil.com/) - Desenvolvem projetos de P&D em robótica nas áreas de defesa e segurança pública, pavimentação, dentre outros (Fortaleza-CE).
- [AuRos Robotics](https://aurosrobotics.com.br/) - Oferecem soluções que aplicam robótica e inteligência artificial para aumentar a eficiência e a produtividade do pomar (Rio Grande-RS).
- [Automni](https://automni.com.br/) - Solução de logística robotizada com o robô Rhino para controle de estoque, transporte e picking colaborativo (São Paulo-SP).
- [Brisa](https://www.brisa.tech/) - Oferecem os WindroseOs Kits: "primeira ferramenta multifuncional para automatizar veículos e aumentar a produtividade dos processos existentes" (Recife-PE / Florianópolis-SC).
- [Daedalus Labs](https://www.daedalus-tech.com/) - Oferecem soluções diversas de robótica, visão computacional e aprendizado de máquina (Bauru-SP).
- [dotBot Robotics](https://www.dotbot-robotics.com/) - Oferecem diversos robôs industriais como serviço e prestam serviço de projeto, simulação e fabricação para robótica. (Rio de Janeiro-RJ).
- [GIC](https://www.gicbrasil.com/) - Desenvolvem tecnologias para melhorar a gestão no mercado de varejo, incluindo um sistema robótico chamado Mirus que tem como objetivo escanear e identificar os produtos presentes nas prateleiras (Barueri-SP).
- [Hexagon Mining](https://hexagonmining.com/) - Desenvolvem soluções de robótica p/ a indústria de mineração (Belho Horizonte-MG).
- [Human Robotics](https://www.humanrobotics.ai/) - Oferecem o ROBIOS, "um robô (físico) de autoatendimento, social e personalizável, que ajuda empresas a automatizar o atendimento presencial dos seus clientes" (Curitiba-PR).
- [Instor](https://www.instor.com.br/) - Desenvolve soluções de robótica diversas p/ os setores de petróleo & gás, agricultura e saúde (Porto Alegre-RS).
- [Lume Robotics](http://lumerobotics.ai/) - Oferecem sistema robótico avançado composto por hardware e software que confere a um veículo a capacidade de trafegar de modo totalmente autônomo (Vitória-ES).
- [NTU](https://ntu.ai/) - Desenvolve soluções de simulação em nuvem e aplicações robóticas para interação social, transporte autônomo indoor e automação de atividades de manufatura leve (São Paulo-SP).
- [Pluginbot](https://pluginbot.ai/) - Oferecem soluções com robôs de atendimento, delivery, dentre outras aplicações de interação homem-robô (São Paulo-SP).
- [Pollux](https://www.pollux.com.br/) - Desenvolve "soluções de manufatura avançada, robótica colaborativa, robótica móvel, sistemas de visão e internet industrial" (Joinville-SC / Americana-SP).
- [Qiron Robotics](https://qironrobotics.com/) - Oferece o robô Beo para fazer interação com pessoas em eventos - (Santa Maria - RS).
- [SkyDrones](https://skydrones.com.br/) - Desenvolve o drone de pulverização agrícola Pelicano (Porto Alegre - RS).
- [Somai EdTech](https://somai.com.br/) - Empresa especializada em integrar novas tecnologias à educação (São Paulo - SP).
- [Speedbird](https://speedbird.aero/) - Oferecem logística de transporte aéreo e entregas por drones (Franca-SP).
- [Synkar Autonomous](https://www.synkar.com/) - Solução de delivery robotizado com o robô terrestre Synkar (Ribeirão Preto-SP). [:octocat:](https://github.com/Synkar)
- [Tidewise](https://www.tidewise.io/) - Desenvolve soluções para operações offshore com embarcação e aeronave não tripuladas (Rio de Janeiro-RJ). [:octocat:](https://github.com/tidewise)
- [Umbô](https://www.umbo.net.br/) - Oferecem os robôs de interação humana Umbô e Dubô (São Paulo-SP).
- [Unidroid](https://www.unidroid.com.br/) - Desenvolvem robôs de combate a incêndios (São José dos Campos-SP).
- [Wiser Robotics](https://wiserrobotics.com.br/) - Oferecem robôs de serviço (ELLA) e de higienização de ambientes (FLORENCE) (São Paulo-SP).

## Institutos de Pesquisa e Desenvolvimento

- [INESC P&D Brasil](http://inescbrasil.org.br/) - Desenvolve projetos nas áreas de tecnologias assistivas, serviços, veículos autônomos, inspeção, segurança e sistemas de monitoramento (Santos-SP).
- [Instituto Tecnológico Vale](http://www.itv.org/en/research-line/robotics-applied-to-mining/) - Desenvolve soluções de robótica diversas (veículos, manipuladores, sistemas de realidade aumentada e mapeamento) para a indústria de mineração (Ouro Preto-MG). [:octocat:](https://github.com/itvroc/)
- [SENAI CIMATEC](http://www.senaicimatec.com.br/areas-de-interesse/robotica-e-supercomputacao/) - Através do Brazilian Institute of Robotics (BIR), desenvolve projetos de P&D para a indústria de petróleo & gás e mineração (Salvador-BA). [:octocat:](https://github.com/Brazilian-Institute-of-Robotics)

## Laboratórios e Centros de Pesquisa

- [AiR-LAB - Artificial Intelligence & Robotics Laboratory (UFU)](https://airlabufu.wixsite.com/site)
- [ASCO - Núcleo de Arquitetura de Computadores e Sistemas Operacionais (UNEB)](http://www.acso.uneb.br)
- [COPPE - Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa em Engenharia (UFRJ)](https://www.coppe.ufrj.br/)
  - [GSCAR - Grupo de Simulação e Controle em Automação e Robótica](http://www.coep.ufrj.br/gscar/sobre.html)
    - [Labcon - Laboratório de Controle em Automação e Robótica](http://www.coep.ufrj.br/labcon)
    - [LARC - Laboratório de Automação, Robótica e Controle](http://www.coep.ufrj.br/gscar/larc.html)
    - [LEAD - Laboratório de Controle e Automação, Engenharia de Aplicação e Desenvolvimento](http://www.coep.ufrj.br/gscar/lead/)
  - [LabRob - Laboratório de Robótica](http://www.labrob.coppe.ufrj.br/)
- [CROB - Centro de Robótica da USP-São Carlos](http://www.crob.eesc.usp.br/)
  - [LabRoM - Laboratório de Robótica Móvel](http://www.crob.eesc.usp.br/laboratorios/) - [:octocat:](https://github.com/EESC-LabRoM)
  - [LAR - Laboratório de Aprendizado de Robôs](http://lar.icmc.usp.br/) - [:octocat:](https://github.com/LAR-USP)
  - [LASI - Laboratório de Sistemas Inteligentes](http://www.sel.eesc.usp.br/lasi/lasi/?page_id=83&lang=pt)
  - [LRM - Laboratório de Robótica Móvel](http://lrm.icmc.usp.br/web/index.php?n=Port.Home) - [:octocat:](https://github.com/usp-lrm)
  - [LSEC - Laboratório de Sistemas Embarcados Críticos](https://www.lsec.icmc.usp.br/) - [:octocat:](https://github.com/LSEC-ICMC)
  - [ManLab - Laboratório de Manipulação Robótica](http://143.107.239.254/mecatronica/index.php/pt/laboratorios/laboratorio-de-manipulacao-robotica)
  - [ReRob - Laboratório de Reabilitação Robótica](http://143.107.239.254/mecatronica/index.php/pt/laboratorios/laboratorio-de-reabilitacao-robotica)
- [GARRA - Grupo de Automação e Robótica Aplicada (UFSM)](https://www.ufsm.br/grupos/garra/)
- [GCAR - Grupo de Controle, Automação e Robótica (UFRGS)](https://www.ece.ufrgs.br/)
- [GEPTA - Laboratório de Robótica e de Serviços (UFPR)](http://gepta.weebly.com/)
- [GPAR - Grupo de Pesquisa em Automação, Controle e Robótica (UFC)](https://gpar.ufc.br/)
- [GPRUFS - Grupo de Pesquisa em Robótica da UFS (UFS)](http://www.gprufs.org/) - [:octocat:](https://github.com/GPRUFS)
- [GRACO - Grupo de Automação e Controle (UnB)](http://www.graco.unb.br/)
- [GRIn - Grupo de Robótica Inteligente (UFJF)](https://www.ufjf.br/inerge/institucional/laboratorios/grin/)
- [Grupo de Robótica UFSCar](https://www.robotica.ufscar.br/)
  - [LARIS - Laboratory of Autonomous Robots and Intelligent Systems](https://www.laris.ufscar.br/pt-br)
  - [MRL - Mobile Robotics Laboratory](https://www.ufscar-mobile-robotics.com.br/)
- [IDR Lab - Laboratório de Robótica Industrial e de Defesa (IME)](http://labmec.imejunior.com.br/)
- [IntelAgir - Grupo de Pesquisa em Sistemas Inteligentes (UTFPR-FB)](https://intelagir-research-group.github.io/)
- [Lab Control (UTFPR)](http://anvargas.com/dokuwiki/doku.php) - [:octocat:](https://github.com/labcontrol-data)
- [LABSCA - Laboratório de Sistemas Computacionais Autônomos (ITA)](http://www.comp.ita.br/labsca/)
- [LAICA - Laboratório de Pesquisa em Informática, Comunicação e Automação (IFRN)](http://laica.ifrn.edu.br/)
- [LAR - Grupo de Automação e Robótica (USP-SP)](http://sites.poli.usp.br/pmr/lar/)
- [LAR - Laboratório de Automação e Robótica (UFU)](http://www.mecanica.ufu.br/laboratorio/laboratorio-de-automacao-e-robotica)
- [LaR - Laboratório de Robótica (UFBA)](http://www.dee.eng.ufba.br/lar/) - [:octocat:](https://github.com/lar-deeufba)
- [LAR - Laboratório de Robótica Aplicada Raul Guenther (UFSC)](https://robotica.ufsc.br/)
- [LARA - Laboratório de Automação e Robótica (UnB)](http://www.lara.unb.br) - [:octocat:](https://github.com/lara-unb)
- [LARM - Laboratório de Automação e Robótica Móvel (UFSC)](https://larm.ufsc.br/)
- [LARS - Laboratório de Robótica e Sistemas Dedicados (UFRN)](https://labs.imd.ufrn.br/labs/nPITI/laboratorios/LARS)
- [LASER - Laboratório Avançado de Sistemas Embarcados e Robótica (UTFPR)](http://laser.dainf.ct.utfpr.edu.br/)
- [LASER - Laboratório de Engenharia de Sistemas e Robótica (UFPB)](http://laser.ci.ufpb.br/) - [:octocat:](https://github.com/laser-ufpb)
- [LCA - Laboratório de Controle Aplicado (IFSP)](https://spo.ifsp.edu.br/lca)
- [LIRA - Laboratório de Inteligência e Robótica Aplicadas (PUC Rio)](http://www.lira.ele.puc-rio.br)
- [LRI - Laboratório de Robótica Inteligente (PUC Rio)](http://www.ele.puc-rio.br/posgraduacao/laboratorios/lri/)
- [LRTA - Laboratório de Robótica e Tecnologia Assistiva](http://www.nta.ufes.br/)
- [MACRO - Mechatronics, Control, and Robotics (UFMG)](http://macro.ppgee.ufmg.br/)
  - [CORO - Laboratório de Sistemas de Computação e Robótica](http://coro.cpdee.ufmg.br/) - [:octocat:](https://bitbucket.org/coroufmg)
- [NAUTEC - Grupo de Automação e Robótica Inteligente (FURG)](https://nautec.furg.br/)
- [Natalnet Labs (UFRN)](http://www.natalnet.br/home/)
- [NERO - Núcleo de Especialização em Robótica (UFV)](https://www.robotica.ufv.br/)
- [PhiRobotics - Grupo de Pesquisa em Robótica Móvel e Visão Computacional (UFRGS)](https://www.inf.ufrgs.br/phi-group/site/) - [:octocat:](https://github.com/phir2-lab)
- [RoboFEI (FEI)](https://portal.fei.edu.br/robo-fei) - [:octocat:](https://github.com/RoboFEI)
- [TAURA - Grupo de Pesquisa em Tecnologia em Automação e Robótica Aplicada (UFSM)](https://www.ufsm.br/pro-reitorias/prpgp/grupo-de-pesquisa/taura-grupo-de-pesquisa-em-tecnologia-em-automacao-e-robotica-aplicada/)
- [VeRLab - Laboratório de Visão Computacional e Robótica (UFMG)](https://www.verlab.dcc.ufmg.br/) - [:octocat:](https://github.com/verlab)
- [VRI - Laboratório Visão, Robótica e Imagem (UFPR](https://web.inf.ufpr.br/vri/)

## Competições e Eventos

- [Competição Brasileira de Robótica (CBR) / Latin American Robotics Competition (LARC) / RoboCup Open](http://www.cbrobotica.org/)
- [Mostra Nacional de Robótica (MNR)](http://www.mnr.org.br/)
- [Olimpíada Brasileira de Robótica (OBR)](http://www.obr.org.br/)
- [Torneio Brasil de Robótica (TBR)](https://www.torneiobrasilderobotica.com.br/)

## Comunidades Online

- [#somosrobotica - somosrobotica@gouglegroups.com](https://groups.google.com/g/somosrobotica)
- [ROS Brasil - Discord Channel](https://discord.gg/8zQWRW5)
- [ROS Brazil Users Group - ROS Discourse](https://discourse.ros.org/c/local/brazil/40)

## Cursos

- [Especialização em Automação, Controle e Robótica (SENAI CIMATEC)](http://www.senaicimatec.com.br/cursos_pos/especializacao-em-automacao-controle-e-robotica/#/)
- [Especialização em Robótica e Inteligência Artificial (FURG)](https://siposg.furg.br/curso/1068)
- [Especialização em Robótica e Sistemas Autônomos (SENAI CIMATEC)](http://www.senaicimatec.com.br/en/cursos_pos/robotica-e-sistemas-autonomos/#/)
- [Graduação em Engenharia de Robôs (FEI)](https://portal.fei.edu.br/curso-de-engenharia-de-robos)


text:
name: awesome-lint
on: pull_request
jobs:
  awesome-lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Run awesome-lint on README files
        run: |
          npx awesome-lint README.md
          npx awesome-lint README.EN.md
  en-pt-comparison:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Compare N of items of the Portuguese and English README files
        run: test $(grep -Ec '^ *\- \[.+\]\(.+\)' README.md) -eq $(grep -Ec '^ *\- \[.+\]\(.+\)' README.EN.md)
      - name: Compare octocat links of the Portuguese and English README files
        run: test $(grep -Eon '\[:octocat:\]\(.+\)$' README.md | tr -d '\n') == $(grep -Eon '\[:octocat:\]\(.+\)$' README.EN.md | tr -d '\n')


text:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://es.archive.ubuntu.com/ubuntu/ jammy main restricted
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://es.archive.ubuntu.com/ubuntu/ jammy universe
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy universe
deb http://es.archive.ubuntu.com/ubuntu/ jammy-updates universe
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://es.archive.ubuntu.com/ubuntu/ jammy multiverse
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy multiverse
deb http://es.archive.ubuntu.com/ubuntu/ jammy-updates multiverse
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu jammy-security main restricted
# deb-src http://security.ubuntu.com/ubuntu jammy-security main restricted
deb http://security.ubuntu.com/ubuntu jammy-security universe
# deb-src http://security.ubuntu.com/ubuntu jammy-security universe
deb http://security.ubuntu.com/ubuntu jammy-security multiverse
# deb-src http://security.ubuntu.com/ubuntu jammy-security multiverse

# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching "deb cdrom"
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.

repo_language: Shell


text:
FILES TO EDIT
/etc/adduser.conf
    DSHELL=/usr/bin/fish

#/etc/default/useradd
#    SHELL=/bin/fish

/etc/os-release
    version: 22.10
    volumeid: UwUntu 22.10 LTS
    release: Leo Dango
    url: https://uwuntuos.site

/etc/lsb_release
    DISTRIB_DESCRIPTION

/etc/apt/sources.list
    replace with sources file

SNAP
remove-->
budgie-welcome snap
firefox

SNAP .DESKTOP FILES (/var/lib/snapd/desktop/applications/)
remove-->
Budgie welcome

DESKTOP FILES(/usr/share/applications)
add-->
UwUntu welcome

APT
remove-->
plank
snapd

install -->
kitty calibre vlc
qbittorrent neofetch fish
git gnome-nibbles flatpak
gnome-software-plugin-flatpak chromium-browser
sassc uglifyjs

spotify-->
curl -sS https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg | sudo apt-key add -
echo "deb http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
sudo apt-get update && sudo apt-get install spotify-client

FLATPAK
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

install--> (flatpak install flathub )
com.valvesoftware.Steam
#com.spotify.Client ERROR 256
com.discordapp.Discord
org.mozilla.firefox

FISH
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
omf install lambda
omf theme lambda

USER FACES
copy the faces from UwUntu-ART and place in /usr/share/pixmaps/faces and /usr/share/pixmaps/budgie-faces


text:
[![Stargazers][stars-shield]][stars-url]
[![gotoweb][gotoweb-shield]][gotoweb-url]
[![KoFi][kofi-shield]][kofi-url]
[![Tweet][tweet-shield]][tweet-url]
[![Discord][discord-shield]][discord-url]

UwUntu OS official Github

    Download UwUntu
    ·
    Report Bug
    ·
    Ask something

  Table of Contents

About The Project

ThingsToDo file

Background Files

Dconf configuration and Desktop layout

Plymouth

Skel files

Ubiquity

UwUntu Repositories

Community

Help The Project

## About The Project

UwUntu is a distro of Ubuntu, meaning its easy enough for new users to go into it, but we gave it the customization we thought it needed to become an OS that we, at the UwUntu team, would use on our daily life.

## ThingsToDo file

The `ThingsToDo` file contains small tasks to do. It contains the apt packages added to UwUntu, Flatpak configuration and some files to edit.

## Background Files
`budgie-jammy-wallpapers.xml` & `budgie-wallpapers.xml`contains the name and location for each background available in UwUntu.

You can get the backgrounds from the UwUntu-ART GitHub.

## Dconf configuration and Desktop layout
Contains all the dconf configuration dumped into `uwuntu-settings`, all the themes and icons required and a readme file with the guidelines to apply the dconf settings.

## Plymouth
Just two images to replace in /usr/share/plymouth

## Skel files
All the files required for new users (neofetch, shell, uwuntu-welcome...).

## Ubiquity
Just a image to replace in /usr/share/ubiquity/pixmaps/ubuntu

## UwUntu Repositories

[![UwUntu-Art][github-art]][UwUntu-Art-url]
[![KoFi][github-artpsd]][UwUntu-Art-PSD-url]
[![Aisleriot-Cards][github-aisleriot]][Aisleriot-Cards-url]
[![UwUntu-info-updater][github-infoupdater]][UwUntu-info-updater-url]
[![UwUntu-plymouth-theme][github-plymouth]][UwUntu-plymouth-theme-url]
[![UwUntu-ubiquity-slideshow][github-slideshow]][UwUntu-ubiquity-slideshow-url]
[![UwUntu-welcome][github-welcome]][UwUntu-welcome-url]

## Community

To get support for UwUntu specific issues, the UwUntu Discord is the best place to go. You can raise issues and help other members of our growing community.

## Help The Project

This whole project has been done by two students who wanted to have fun with something different related to what we were studying.

In this process we fell in love with Linux and now we are planning to take this as a serious project, adding even more customization and support to other graphical environments.

If you’d like to contribute to this project, knowledge about Linux is always welcome, and if you would like to support us even more a donation will always be appreciated.

(back to top)

[stars-shield]: https://img.shields.io/github/stars/Duxi4/UwUntu?style=for-the-badge&logo=Linux&logoColor=C689C6&color=FFABE1
[stars-url]: https://github.com/Duxi4/UwUntu/stargazers

[gotoweb-shield]: https://img.shields.io/badge/UwUntu%20Website-hi?style=for-the-badge&logo=Internet%20Explorer&logoColor=C689C6&color=FFABE1
[gotoweb-url]: https://uwuntuos.site

[kofi-shield]: https://img.shields.io/badge/Buy%20us%20a%20cofee-KoFi?style=for-the-badge&logo=KoFi&logoColor=C689C6&color=FFABE1
[kofi-url]: https://ko-fi.com/uwuntu

[tweet-shield]: https://img.shields.io/badge/Tweet%20about%20us-hi?style=for-the-badge&logo=Twitter&logoColor=C689C6&color=FFABE1
[tweet-url]: https://bit.ly/380p4nL

[discord-shield]:https://img.shields.io/badge/Join%20our%20discord-hi?style=for-the-badge&logo=Discord&logoColor=C689C6&color=FFABE1
[discord-url]:https://discord.gg/US38bG9n8c

[github-art]:https://img.shields.io/badge/REPO:-UwUntu%20Art-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-Art-url]:https://github.com/Duxi4/UwUntu-Art

[github-artpsd]:https://img.shields.io/badge/REPO:-UwUntu%20Art%20PSD-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-Art-PSD-url]:https://github.com/Duxi4/UwUntu-Art-PSD

[github-aisleriot]:https://img.shields.io/badge/REPO:-UwUntu%20Aisleriot%20Cards-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[Aisleriot-Cards-url]:https://github.com/Duxi4/UwUntu-Aisleriot-Cards

[github-infoupdater]:https://img.shields.io/badge/REPO:-UwUntu%20info%20updater-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-info-updater-url]:https://github.com/Duxi4/UwUntu-info-updater

[github-plymouth]:https://img.shields.io/badge/REPO:-UwUntu%20plymouth%20theme-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-plymouth-theme-url]:https://github.com/Duxi4/UwUntu-plymouth-theme

[github-slideshow]:https://img.shields.io/badge/REPO:-UwUntu%20ubiquity%20slideshow-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-ubiquity-slideshow-url]:https://github.com/Duxi4/UwUntu-ubiquity-slideshow

[github-welcome]:https://img.shields.io/badge/REPO:-UwUntu%20welcome-hi?style=for-the-badge&logo=GitHub&logoColor=C689C6&color=FFABE1
[UwUntu-welcome-url]:https://github.com/Duxi4/uwuntu-welcome


text:
place the icon in /usr/share/icons/rounded-logo.png

to use custom dconf
create folder /etc/dconf/db/uwuntu.d and place the dumped file inside (name it as you want)
create file 'user' inside /etc/dconf/profile
write inside:

user-db:user
system-db:uwuntu

(uwuntu --> the name of the /etc/dconf/db/*.d folder)

run dconf update command

**
chown root.
chmod 644

#dconf load / < dconf-settings


text:
[com/solus-project/budgie-panel]
builtin-theme=false
confirm-remove-applet=false
dark-theme=true
layout='redmond'
migration-level=1
panels=['7691ab28-2e9d-11ed-bd77-65a65d6e70cf']

[com/solus-project/budgie-panel/applets/{07d8931c-2e9e-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='WeatherShow'
position=1

[com/solus-project/budgie-panel/applets/{7232495f-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='start'
name='AppMenu'
position=0

[com/solus-project/budgie-panel/applets/{72324960-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='start'
name='ShowTime'
position=1

[com/solus-project/budgie-panel/applets/{72324961-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='start'
name='Spacer'
position=2

[com/solus-project/budgie-panel/applets/{72324962-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='center'
name='Spacer'
position=0

[com/solus-project/budgie-panel/applets/{72324963-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='center'
name='Clock'
position=1

[com/solus-project/budgie-panel/applets/{72324964-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='center'
name='Spacer'
position=2

[com/solus-project/budgie-panel/applets/{72324965-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='DropBy'
position=0

[com/solus-project/budgie-panel/applets/{72324966-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=1

[com/solus-project/budgie-panel/applets/{72324967-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='AppIndicator Applet'
position=2

[com/solus-project/budgie-panel/applets/{72324968-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=3

[com/solus-project/budgie-panel/applets/{72324969-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Visual Space'
position=4

[com/solus-project/budgie-panel/applets/{7232496a-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=5

[com/solus-project/budgie-panel/applets/{7232496b-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='QuickNote'
position=6

[com/solus-project/budgie-panel/applets/{7232496c-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=7

[com/solus-project/budgie-panel/applets/{7232496d-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Places'
position=8

[com/solus-project/budgie-panel/applets/{7232496e-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=9

[com/solus-project/budgie-panel/applets/{7232496f-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Notifications'
position=10

[com/solus-project/budgie-panel/applets/{72324970-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=11

[com/solus-project/budgie-panel/applets/{72324971-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Network'
position=12

[com/solus-project/budgie-panel/applets/{72324972-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=13

[com/solus-project/budgie-panel/applets/{72324973-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Status Indicator'
position=14

[com/solus-project/budgie-panel/applets/{72324974-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=15

[com/solus-project/budgie-panel/applets/{72324975-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Separator'
position=16

[com/solus-project/budgie-panel/applets/{72324976-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=17

[com/solus-project/budgie-panel/applets/{72324977-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='User Indicator'
position=18

[com/solus-project/budgie-panel/applets/{72324978-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Spacer'
position=19

[com/solus-project/budgie-panel/applets/{72324979-3e31-11ed-ba0b-2bdc5b2669bd}]
alignment='end'
name='Raven Trigger'
position=20

[com/solus-project/budgie-panel/applets/{7691ab29-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='start'
name='AppMenu'
position=0

[com/solus-project/budgie-panel/applets/{7691ab2a-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='start'
name='Spacer'
position=1

[com/solus-project/budgie-panel/applets/{7691ab2b-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='start'
name='Icon Task List'
position=2

[com/solus-project/budgie-panel/applets/{7691ab2c-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='AppIndicator Applet'
position=2

[com/solus-project/budgie-panel/applets/{7691ab2d-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='DropBy'
position=3

[com/solus-project/budgie-panel/applets/{7691ab2e-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Notifications'
position=4

[com/solus-project/budgie-panel/applets/{7691ab2f-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Status Indicator'
position=5

[com/solus-project/budgie-panel/applets/{7691ab30-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Spacer'
position=6

[com/solus-project/budgie-panel/applets/{7691ab31-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Network'
position=7

[com/solus-project/budgie-panel/applets/{7691ab32-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Clock'
position=8

[com/solus-project/budgie-panel/applets/{7691ab33-2e9d-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Raven Trigger'
position=9

[com/solus-project/budgie-panel/applets/{e8bdb902-2e9e-11ed-bd77-65a65d6e70cf}]
alignment='end'
name='Caffeine'
position=0

[com/solus-project/budgie-panel/instance/icon-tasklist/{7691ab2b-2e9d-11ed-bd77-65a65d6e70cf}]
grouping=true
lock-icons=false
middle-click-launch-new-instance=false
only-pinned=false
pinned-launchers=['kitty.desktop', 'firefox_firefox.desktop', 'nemo.desktop', 'com.discordapp.Discord.desktop']
require-double-click-to-launch=false
restrict-to-workspace=false
show-all-windows-on-click=true

[com/solus-project/budgie-panel/instance/spacer/{7691ab30-2e9d-11ed-bd77-65a65d6e70cf}]
size=5

[com/solus-project/budgie-panel/panels/{7232495e-3e31-11ed-ba0b-2bdc5b2669bd}]
applets=['72324972-3e31-11ed-ba0b-2bdc5b2669bd', '7232496c-3e31-11ed-ba0b-2bdc5b2669bd', '72324977-3e31-11ed-ba0b-2bdc5b2669bd', '72324963-3e31-11ed-ba0b-2bdc5b2669bd', '72324968-3e31-11ed-ba0b-2bdc5b2669bd', '72324971-3e31-11ed-ba0b-2bdc5b2669bd', '7232496b-3e31-11ed-ba0b-2bdc5b2669bd', '72324976-3e31-11ed-ba0b-2bdc5b2669bd', '72324962-3e31-11ed-ba0b-2bdc5b2669bd', '72324967-3e31-11ed-ba0b-2bdc5b2669bd', '7232496a-3e31-11ed-ba0b-2bdc5b2669bd', '72324961-3e31-11ed-ba0b-2bdc5b2669bd', '7232496f-3e31-11ed-ba0b-2bdc5b2669bd', '72324970-3e31-11ed-ba0b-2bdc5b2669bd', '72324966-3e31-11ed-ba0b-2bdc5b2669bd', '72324975-3e31-11ed-ba0b-2bdc5b2669bd', '72324960-3e31-11ed-ba0b-2bdc5b2669bd', '72324965-3e31-11ed-ba0b-2bdc5b2669bd', '7232495f-3e31-11ed-ba0b-2bdc5b2669bd', '72324974-3e31-11ed-ba0b-2bdc5b2669bd', '7232496e-3e31-11ed-ba0b-2bdc5b2669bd', '72324979-3e31-11ed-ba0b-2bdc5b2669bd', '72324964-3e31-11ed-ba0b-2bdc5b2669bd', '72324969-3e31-11ed-ba0b-2bdc5b2669bd', '7232496d-3e31-11ed-ba0b-2bdc5b2669bd', '72324978-3e31-11ed-ba0b-2bdc5b2669bd', '72324973-3e31-11ed-ba0b-2bdc5b2669bd']
location='top'
size=37
transparency='dynamic'

[com/solus-project/budgie-panel/panels/{7691ab28-2e9d-11ed-bd77-65a65d6e70cf}]
applets=['7691ab2f-2e9d-11ed-bd77-65a65d6e70cf', '7691ab2b-2e9d-11ed-bd77-65a65d6e70cf', '7691ab30-2e9d-11ed-bd77-65a65d6e70cf', '7691ab29-2e9d-11ed-bd77-65a65d6e70cf', '7691ab2d-2e9d-11ed-bd77-65a65d6e70cf', '7691ab2c-2e9d-11ed-bd77-65a65d6e70cf', '7691ab2e-2e9d-11ed-bd77-65a65d6e70cf', '07d8931c-2e9e-11ed-bd77-65a65d6e70cf', '7691ab31-2e9d-11ed-bd77-65a65d6e70cf', '7691ab33-2e9d-11ed-bd77-65a65d6e70cf', '7691ab32-2e9d-11ed-bd77-65a65d6e70cf', '7691ab2a-2e9d-11ed-bd77-65a65d6e70cf', 'e8bdb902-2e9e-11ed-bd77-65a65d6e70cf']
dock-mode=false
location='bottom'
size=50
theme-regions=true
transparency='none'

[org/cinnamon/desktop/applications/terminal]
exec='kitty'

[org/gnome/desktop/applications/terminal]
exec='kitty'

[org/gnome/desktop/background]
color-shading-type='solid'
picture-options='zoom'
picture-uri='file:///usr/share/backgrounds/Wall15.jpg'
primary-color='#000000'
secondary-color='#000000'

[org/gnome/desktop/interface]
color-scheme='prefer-dark'
cursor-theme='DMZ-White'
document-font-name='Sans 11'
font-name='Ubuntu 11'
gtk-theme='vimix-dark-beryl'
icon-theme='Marwaita-Dark'
monospace-font-name='Ubuntu Mono 13'

[org/gnome/desktop/screensaver]
color-shading-type='solid'
picture-options='zoom'
picture-uri='file:///usr/share/backgrounds/Wall15.jpg'
primary-color='#000000'
secondary-color='#000000'

[org/gnome/gthumb/browser]
fullscreen-sidebar='hidden'
fullscreen-thumbnails-visible=false
maximized=false
sidebar-sections=['GthFileProperties:expanded', 'GthFileComment:expanded', 'GthFileDetails:expanded', 'GthImageHistogram:expanded']
sidebar-visible=true
sort-inverse=false
sort-type='file::mtime'
startup-current-file='file:///usr/share/backgrounds/Wall15.jpg'
startup-location='file:///usr/share/backgrounds'
statusbar-visible=true
thumbnail-list-visible=true
viewer-sidebar='hidden'

[org/solus-project/budgie-panel/instance/budgie-menu/{7691ab29-2e9d-11ed-bd77-65a65d6e70cf}]
enable-menu-label=false
menu-icon='/usr/share/icons/rounded-logo.png'

[org/ubuntubudgie/plugins/budgie-appmenu]
category-spacing=6
enable-powerstrip=true
rows=3
use-category=false

[org/ubuntubudgie/plugins/budgie-dropby]
popup-corner=4

[org/ubuntubudgie/plugins/weathershow]
desktopweather=false
dynamicicon=true
forecast=true

[x.dm.slick-greeter]
background='/usr/share/backgrounds/Wall15.jpg'


text:
The location of the background files is /usr/share/gnome-background-propertires
The location of the backgrounds is /usr/share/backgrounds

#10_budgie-lightdm-theme.gschema.override --> LOCATION: /usr/share/glib-2.0/10_budgie-lightdm-theme.gschema.override
#It sets the login screen bg (dconf file solves this)


text:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
  <wallpaper>
    <name>UwUntu Wallpaper 1</name>
    <filename>/usr/share/backgrounds/Wall15.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>UwUntu Wallpaper 2</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall16.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>UwUntu Wallpaper 3</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall14.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>UwUntu Wallpaper 4</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall13.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  </wallpapers>


text:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
  <wallpaper>
    <name>Wallpaper 1</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall1.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 2</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall2.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 3</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall3.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 4</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall4.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 5</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall5.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 6</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall6.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 7</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall7.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 8</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall8.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>ladWallpaper 9</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall9.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 10</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall10.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 11</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall11.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
  <wallpaper>
    <name>Wallpaper 12</name>
    <filename>/usr/share/backgrounds/uwuntu/Wall12.jpg</filename>
    <options>zoom</options>
    <pcolor>#000000</pcolor>
    <scolor>#000000</scolor>
    <shade_type>solid</shade_type>
  </wallpaper>
</wallpapers>


text:
chown -R root. .local
chown -R root. .config
chmod -R 744 .local
chmod -R 744 .config

#Set kitty default terminal (ctrl + alt + t)
gsettings set org.gnome.desktop.default-applications.terminal exec kitty

#Set kitty default terminal (nemo file manager)
gsettings set org.cinnamon.desktop.default-applications.terminal exec kitty


text:
# update-desktop-database
# Autogenerated from man page /usr/share/man/man1/update-desktop-database.1.gz
complete -c update-desktop-database -s q -l quiet -d 'Do not display any information about processing and updating progress'
complete -c update-desktop-database -l verbose -d 'OPTIONS The following options are supported:'
complete -c update-desktop-database -s v -d 'Display more information about processing and updating progress.  NOTES'


text:
# uuidparse
# Autogenerated from man page /usr/share/man/man1/uuidparse.1.gz
complete -c uuidparse -s J -l json
complete -c uuidparse -s n -l noheadings
complete -c uuidparse -s o -l output
complete -c uuidparse -s r -l raw
complete -c uuidparse -s V -l version
complete -c uuidparse -s h -l help


text:
# loadunimap
# Autogenerated from man page /usr/share/man/man8/loadunimap.8.gz
complete -c loadunimap -s o -d 'oldmap option is given, the old map is saved in the file specified'
complete -c loadunimap -s C -d option


text:
# xinit
# Autogenerated from man page /usr/share/man/man1/xinit.1.gz
complete -c xinit -s a -s t -d 'fasthost in which it will run the command cpupig, telling it to display back …'


text:
# getent
# Autogenerated from man page /usr/share/man/man1/getent.1.gz
complete -c getent -o sservice -l serviceservice -d '\\" commit 9d0881aa76b399e6a025c5cf44bebe2ae0efa8af (glibc) Override all datab…'
complete -c getent -o sdatabase:service -d '--servicedatabase:service '
complete -c getent -s i -l no-idn -d '\\" commit a160f8d808cf8020b13bd0ef4a9eaf3c11f964ad (glibc) Disables IDN encod…'
complete -c getent -s '?' -l help -d 'Print a usage summary and exit'
complete -c getent -l usage -d 'Print a short usage summary and exit'
complete -c getent -s s -l service
complete -c getent -s V -l version -d 'Print the version number, license, and disclaimer of warranty for getent '


text:
# unsquashfs
# Autogenerated from man page /usr/share/man/man1/unsquashfs.1.gz
complete -c unsquashfs -s v -o version -d 'print version, licence and copyright information'
complete -c unsquashfs -s d -o dest -d 'unsquash to PATHNAME, default "squashfs-root"'
complete -c unsquashfs -s n -o no-progress -d 'don\'t display the progress bar'
complete -c unsquashfs -o no -o no-xattrs -d 'don\'t extract xattrs in file system'
complete -c unsquashfs -s x -o xattrs -d 'extract xattrs in file system (default)'
complete -c unsquashfs -s p -o processors -d 'use NUMBER processors.  By default will use number of processors available'
complete -c unsquashfs -s i -o info -d 'print files as they are unsquashed'
complete -c unsquashfs -o li -o linfo -d 'print files as they are unsquashed with file attributes (like ls -l output)'
complete -c unsquashfs -s l -o ls -d 'list filesystem, but don\'t unsquash'
complete -c unsquashfs -o ll -o lls -d 'list filesystem with file attributes (like ls -l output), but don\'t unsquash'
complete -c unsquashfs -o nl -o nls -d 'list filesystem with file attributes (like ls -n output), but don\'t unsquash'
complete -c unsquashfs -s f -o force -d 'if file already exists then overwrite'
complete -c unsquashfs -s s -o stat -d 'display filesystem superblock information'
complete -c unsquashfs -s e -o ef -d 'list of directories or files to extract.  One per line'
complete -c unsquashfs -o da -o data-queue -d 'Set data queue to SIZE Mbytes.  Default 256 Mbytes'
complete -c unsquashfs -o fr -o frag-queue -d 'Set fragment queue to SIZE Mbytes.  Default 256 Mbytes'
complete -c unsquashfs -s r -o regex -d 'treat extract names as POSIX regular expressions rather than use the default …'


text:
# troff
# Autogenerated from man page /usr/share/man/man1/troff.1.gz
complete -c troff -s a -d 'Generate an ASCII approximation of the typeset output'
complete -c troff -s b -d 'Print a backtrace with each warning or error message'
complete -c troff -s c -d 'Disable color output (always disabled in compatibility mode)'
complete -c troff -s C -d 'Enable compatibility mode'
complete -c troff -s d -d 'TQ  -d name = s Define  c or  name to be a string R s ;  c must be a one lett…'
complete -c troff -s E -d 'Inhibit all error messages of  troff '
complete -c troff -s f -d 'Use  fam as the default font family'
complete -c troff -s F -d 'Search in directory (or directory path)  dir for subdirectories R dev name '
complete -c troff -s i -d 'Read the standard input after all the named input files have been processed'
complete -c troff -s I -d 'This option may be used to add a directory to the search path for files (both…'
complete -c troff -s m -d 'Read in the file . RI name . tmac .  If it isn\'t found, try R tmac'
complete -c troff -s M -d 'Search directory (or directory path)  dir for macro files'
complete -c troff -s n -d 'Number the first page R num '
complete -c troff -s o -d 'Output only pages in R list , which is a comma-separated list of page ranges;…'
complete -c troff -s r -d 'TQ  -r name = n Set number register  c or  name to R n ;  c must be a one cha…'
complete -c troff -s R -d 'Don\'t load  troffrc and R troffrc-end '
complete -c troff -s T -d 'Prepare output for device R name , rather than the default  ps ; see  groff (…'
complete -c troff -s U -d 'Unsafe mode'
complete -c troff -s v -d 'Print the version number'
complete -c troff -s w -d 'Enable warning R  name '
complete -c troff -s W -d 'Inhibit warning R name .  Multiple  -W options are allowed'
complete -c troff -s z -d 'Suppress formatted output'


text:
# sotruss
# Autogenerated from man page /usr/share/man/man1/sotruss.1.gz
complete -c sotruss -s F -l from -d 'Trace calls from objects on FROMLIST'
complete -c sotruss -s T -l to -d 'Trace calls to objects on TOLIST'
complete -c sotruss -s e -l exit -d 'Also show exits from the function calls'
complete -c sotruss -s f -l follow -d 'Trace child processes as they are created by currently traced processes as a …'
complete -c sotruss -s o -l output -d 'Write output to FILENAME (or FILENAME'
complete -c sotruss -s '?' -l help -d 'Give this help list'
complete -c sotruss -l usage -d 'Give a short usage message'
complete -c sotruss -l version -d 'Print program version AUTHOR Written by Ulrich Drepper'


text:
# debconf-copydb
# Autogenerated from man page /usr/share/man/man1/debconf-copydb.1.gz
complete -c debconf-copydb -s p -l pattern -d 'If this is specified, only items in sourcedb whose names match the pattern wi…'
complete -c debconf-copydb -l owner-pattern -d 'If this is specified, only items in sourcedb whose owners match the pattern w…'