Mycroft Core, the Mycroft Artificial Intelligence platform.

Overview

License CLA Team Status

Unit Tests codecov PRs Welcome Join chat

Mycroft

Mycroft is a hackable open source voice assistant.

Table of Contents

Getting Started

First, get the code on your system! The simplest method is via git (git installation instructions):

  • cd ~/
  • git clone https://github.com/MycroftAI/mycroft-core.git
  • cd mycroft-core
  • bash dev_setup.sh

This script sets up dependencies and a virtualenv. If running in an environment besides Ubuntu/Debian, Arch or Fedora you may need to manually install packages as instructed by dev_setup.sh.

NOTE: The default branch for this repository is 'dev', which should be considered a work-in-progress. If you want to clone a more stable version, switch over to the 'master' branch.

Running Mycroft

Mycroft provides start-mycroft.sh to perform common tasks. This script uses a virtualenv created by dev_setup.sh. Assuming you installed mycroft-core in your home directory run:

  • cd ~/mycroft-core
  • ./start-mycroft.sh debug

The "debug" command will start the background services (microphone listener, skill, messagebus, and audio subsystems) as well as bringing up a text-based Command Line Interface (CLI) you can use to interact with Mycroft and see the contents of the various logs. Alternatively you can run ./start-mycroft.sh all to begin the services without the command line interface. Later you can bring up the CLI using ./start-mycroft.sh cli.

The background services can be stopped as a group with:

  • ./stop-mycroft.sh

Using Mycroft

Home Device and Account Manager

Mycroft AI, Inc. maintains a device and account management system known as Mycroft Home. Developers may sign up at: https://home.mycroft.ai

By default, mycroft-core is configured to use Home. By saying "Hey Mycroft, pair my device" (or any other request verbal request) you will be informed that your device needs to be paired. Mycroft will speak a 6-digit code which you can enter into the pairing page within the Mycroft Home site.

Once paired, your unit will use Mycroft API keys for services such as Speech-to-Text (STT), weather and various other skills.

Skills

Mycroft is nothing without skills. There are a handful of default skills that are downloaded automatically to your /opt/mycroft/skills directory, but most need to be installed explicitly. See the Skill Repo to discover skills made by others. Please share your own interesting work!

Behind the scenes

Pairing Information

Pairing information generated by registering with Home is stored in: ~/.mycroft/identity/identity2.json <-- DO NOT SHARE THIS WITH OTHERS!

Configuration

Mycroft's configuration consists of 4 possible locations:

  • mycroft-core/mycroft/configuration/mycroft.conf(Defaults)
  • Mycroft Home (Remote)
  • /etc/mycroft/mycroft.conf(Machine)
  • $HOME/.mycroft/mycroft.conf(User)

When the configuration loader starts, it looks in these locations in this order, and loads ALL configurations. Keys that exist in multiple configuration files will be overridden by the last file to contain the value. This process results in a minimal amount being written for a specific device and user, without modifying default distribution files.

Using Mycroft Without Home

If you do not wish to use the Mycroft Home service, before starting Mycroft for the first time, create $HOME/.mycroft/mycroft.conf with the following contents:

{
  "skills": {
    "blacklisted_skills": [
      "mycroft-configuration.mycroftai",
      "mycroft-pairing.mycroftai"
    ]
  }
}

Mycroft will then be unable to perform speech-to-text conversion, so you'll need to set that up as well, using one of the STT engines Mycroft supports.

You may insert your own API keys into the configuration files listed above in Configuration. For example, to insert the API key for the Weather skill, create a new JSON key in the configuration file like so:

{
  // other configuration settings...
  //
  "WeatherSkill": {
    "api_key": "<insert your API key here>"
  }
}

API Key Services

These are the keys currently used in Mycroft Core:

Using Mycroft behind a proxy

Many schools, universities and workplaces run a proxy on their network. If you need to type in a username and password to access the external internet, then you are likely behind a proxy.

If you plan to use Mycroft behind a proxy, then you will need to do an additional configuration step.

NOTE: In order to complete this step, you will need to know the hostname and port for the proxy server. Your network administrator will be able to provide these details. Your network administrator may want information on what type of traffic Mycroft will be using. We use https traffic on port 443, primarily for accessing ReST-based APIs.

Using Mycroft behind a proxy without authentication

If you are using Mycroft behind a proxy without authentication, add the following environment variables, changing the proxy_hostname.com and proxy_port for the values for your network. These commands are executed from the Linux command line interface (CLI).

$ export http_proxy=http://proxy_hostname.com:proxy_port
$ export https_port=http://proxy_hostname.com:proxy_port
$ export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com,0.0.0.0,::1"

Using Mycroft behind an authenticated proxy

If you are behind a proxy which requires authentication, add the following environment variables, changing the proxy_hostname.com and proxy_port for the values for your network. These commands are executed from the Linux command line interface (CLI).

$ export http_proxy=http://user:[email protected]_hostname.com:proxy_port
$ export https_port=http://user:[email protected]_hostname.com:proxy_port
$ export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com,0.0.0.0,::1"

Getting Involved

This is an open source project. We would love your help. We have prepared a contributing guide to help you get started.

If this is your first PR, or you're not sure where to get started, say hi in Mycroft Chat and a team member would be happy to mentor you. Join the Mycroft Forum for questions and answers.

Links

Issues
  • The dev_setup.sh script should ensure that it is not run with sudo, or at least ask.

    The dev_setup.sh script should ensure that it is not run with sudo, or at least ask.

    After going through the register process the mycroft client doesn't seem to realize that it has been registered and continues to say that the device is not registered and gives a registration code. Restarting all of mycroft's processes after registration, and then restarting has no effect. The website itself appears to have worked, the device id on the web page matches the id in the identity.json file on my machine.

    commit: 9aa9f47f720736e0330854bd0d9ef5af0604808c

    Type: Bug - complex 
    opened by LongBoolean 45
  • Missing mycroft.conf

    Missing mycroft.conf

    I've just installed mycroft on Ubuntu 17.04, but have no mycroft.conf file, so nothing is working except cli. Please help.

    opened by TongShanHui 41
  • Use XDG Base directories for settings, cache and runtime data

    Use XDG Base directories for settings, cache and runtime data

    Description

    This makes Mycroft use the XDG Base Directory specification. Data is now saved to:

    • settings to $XDG_CONFIG_DIR/mycroft, which most of the time equals to ~/.config/mycroft
    • data to $XDG_DATA_DIRS/mycroft, which most of the time equals to ~/.local/share/mycroft
    • cache to $XDG_CACHE_HOME/mycroft, which most of the time equals to ~/.cache

    Since this changes the default location of pretty much everything, please test it well!

    Goal is to support and read from the old ~/.mycroft location if it already exists, but save to the XDG Base Directories and read from it on new installations.

    Together with #2559 this should be full XDG Base Directory compliance.

    How to test

    First of all, run this PR with an existing installation, and check if everything is loaded from the usual locations. Then shut it down and restart to make sure it has saved to the new locations. Then, completely remove any trace of Mycroft settings from your system. Easiest would be to fully deinstall (remove /opt/mycroft), remove ~/.mycroft, and the XDG Base directories mentioned above. Now reinstall Mycroft (with this PR applied) and start and connect it. Check if ~/.mycroft is not created anymore and ~/.config/mycroft, ~/.local/share/mycroft and ~/.cache/mycroft are with the correct files and directories in them.

    Contributor license agreement signed?

    CLA [x]

    CLA: Yes Status: Work in progress Type: Enhancement - roadmapped 
    opened by PureTryOut 39
  • Issue #279 - Added results property to skills

    Issue #279 - Added results property to skills

    Also added default of the skills name to the extras. Skills should now be able to call the inherited 'add_extra' method to add extras to its responses ref issue #279

    opened by joshymcd 34
  • Issues 238 - Philips Hue Skill

    Issues 238 - Philips Hue Skill

    #238 - Phillips Hue Skill

    opened by ChristopherRogers1991 29
  • Audio service

    Audio service

    In late November @penrods led a discussion about how an audio service in Mycroft could work. This is a simple implementation of what was discussed. This is a quick implementation of the system as I understood it and I think this can be used to continue the discussion. Ideas and suggestions on improvements are very welcome.

    The PR adds support for commands like

    "Hey Mycroft, play the news in the livingroom"

    Backends

    The current system includes support for the following "backends"

    • Mpg123, very limited implementation
    • VLC
    • Mopidy

    "backends" currently in the works:

    • Chromecast
    • Kodi

    Backends are quite easy to add and an existing baseclass can be extended to add new ones.

    AudioService

    Skill creators will use an audio service interface to communicate with the audio service / playback control. the AudioService interface uses the standard message bus.

    from mycroft.skills.audioservice import AudioService
    [...]
      as = AudioService()
    [...]
      as.play(file_or_uri) # handles both lists and single uris
    

    See the npr_news skill for basic usage.

    The AudioService currently only support play and track_info requests but this will probably be expanded for increased usefulness.

    Playback control skill

    Features:

    • backend/location selection from utterance ("...in kitchen" etc.)
    • lowering volume while Mycroft speaks
    • playback control (Pausing/Resuming, skipping, Stopping)

    The backend/location selection is currently done using basic string parsing and should probably be done using adapt instead.

    This skill removes much of the basic functions that needs to be implemented for an audio playback skill and the skill creator can focus on the trickier parts.

    Currently most of the audio logic is implemented in the playback control skill and should maybe be moved but this was a good starting point.

    Configuration

    A Configuration the audio services:

    {
      "Audio": {
        "backends": {
          "local": {
            "type": "mpg123",
            "active": true
          },
          "kitchen": {
            "type": "mopidy",
            "url": "http://localhost:6680",
            "active": true
          },
          "livingroom": {
            "type": "mopidy",
            "url": "http://192.168.10.232:6680",
            "active": false
          },
          "vlc": {
            "type": "vlc",
            "active": true
          }
        },
        "default-backend": "local"
      }
    }
    

    If you try it I suggest you install vlc and pyvlc and use the vlc backend since mpg123 only has basic functionallity.

    I've tested this mainly with the mopidy skill and the npr_news skill.

    Todo

    • more backends, Kodi and chromecast is a minimum
    • possibly separate the backends from the playback control skill
    • populate the AudioService interface with more functions so skill creators can do more interesting things with the audio (A music quiz-skill should be able to skip ahead in the playlist when a correct answer is provided)
    • More configuration options
    • Maybe some way to send credentials from a skill to the backend to access some music services
    • Better utterance parsing when starting playback, along with more keywords (like half volume)
    opened by forslund 27
  • UnicodeDecodeError in setup

    UnicodeDecodeError in setup

    Hi, I'm trying to set up Mycroft on an Ubuntu 18.0.4 Docker container that I've got some other stuff in, but am running into an issue when I try to run "start_mycroft.sh". I've followed the installation instructions in the README but run into this error: Already up to date. Starting all mycroft-core services Initializing... Changing ownership of /opt/mycroft to user: with group: root Starting background service bus CAUTION: The Mycroft bus is an open websocket with no built-in security measures. You are responsible for protecting the local port 8181 with a firewall as appropriate. Starting background service skills Starting background service audio Starting background service voice Starting background service enclosure Starting cli Traceback (most recent call last): File "/usr/lib/python3.6/runpy.py", line 183, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "/usr/lib/python3.6/runpy.py", line 109, in _get_module_details import(pkg_name) File "/opt/mycroft/mycroft/init.py", line 17, in from mycroft.api import Api File "/opt/mycroft/mycroft/api/init.py", line 22, in from mycroft.configuration import Configuration File "/opt/mycroft/mycroft/configuration/init.py", line 15, in from .config import Configuration, LocalConf, RemoteConf File "/opt/mycroft/mycroft/configuration/config.py", line 23, in from mycroft.util.json_helper import load_commented_json, merge_dict File "/opt/mycroft/mycroft/util/init.py", line 35, in from .parse import extract_datetime, extract_number, normalize File "/opt/mycroft/mycroft/util/parse.py", line 32, in import lingua_franca.parse File "/usr/local/lib/python3.6/dist-packages/lingua_franca/parse.py", line 21, in from lingua_franca.lang.parse_pt import * File "/usr/local/lib/python3.6/dist-packages/lingua_franca/lang/parse_pt.py", line 200, in class PortugueseNormalizer(Normalizer): File "/usr/local/lib/python3.6/dist-packages/lingua_franca/lang/parse_pt.py", line 202, in PortugueseNormalizer _default_config = json.load(f) File "/usr/lib/python3.6/json/init.py", line 296, in load return loads(fp.read(), File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 602: ordinal not in range(128)

    I've run dev_setup.sh and such, so not really sure what I'm doing wrong. I'm aware of the docker container available, I'm trying to rig one up myself though. Let me know if I missed anything!

    opened by burne251 26
  • initial work on danish.

    initial work on danish.

    DescriptionInitial work on adding Danish to core

    How to test

    difficult to test without translating some basic skills - fallback-unknown is one important one…..

    Contributor license agreement signed?

    CLA [ X ] (Whether you have signed a CLA - Contributor Licensing Agreement

    CLA: Yes 
    opened by andlo 25
  • msm updated for issue 807

    msm updated for issue 807

    Several updates.

    • parameter issue also fixed now.
    • picroft/mycroft can both be handled
    • alternate directory can be used if exported in env for mycroft_skills_directory
    • default calls install with a list
    • install handles a list of parameters
    • very simple search function (name only) added

    The pip and git parts of the install function will need to be worked over further at some point in the future.

    opened by el-tocino 25
  • Refactor intent service

    Refactor intent service

    Description

    The intent handling has been spread out over a bunch of files and this sort of collects it back into a single location makes the entire flow viewable from a single handler for the old recognizer_loop:utterance message.

    The resolution order is the same as before only expressed as a single list instead of a series of checks and fallbacks interlaced.

    • Converse
    • Padatious High Confidence
    • Adapt
    • Fallback High priority
    • Padatious Medium Confidence
    • Fallback Medium priority
    • Padatious Last ditch effort
    • Fallback Low priority

    This collects the many parts of where intent is handled into a single location handling the entire flow.

    The idea is that, in the end, all the skill calling should be done from this method. The main intent parsers does this but the converse and fallback still calls directly.

    Future work: Converse and fallback still triggers handlers directly.

    How to test

    Best way to test this is to make sure the voight kampff tests are still passing.

    Contributor license agreement signed?

    CLA [ Yes ]

    CLA: Yes 
    opened by forslund 24
  • Adapt intent matches not returned to core in confidence order.

    Adapt intent matches not returned to core in confidence order.

    Description

    The AdaptService in core assumes that the highest confidence intent match will be the first result returned from Adapt. This is not always the case. It is possible that Adapt should be ordering the return value instead. But that would be a bigger change to Adapt.

    How to test

    • Remove the future time Padatious intent from the date/time skill
    • Ask "what time will it be in ten minutes"; current time will be returned.
    • Apply the change in this PR
    • Make same request as before, future time will be returned.

    Contributor license agreement signed?

    CLA [Y]

    CLA: Yes 
    opened by chrisveilleux 5
  • Make TTSCache safer

    Make TTSCache safer

    Description

    Add __contains__ method to TTSCache, The cache contains a SHA if the SHA is known and all expected files exists on disk.

    This is handles unexpected system events in a more consistent manner and will still be fast for the case where a new sentence needs to be synthesized.

    How to test

    • Ask Mycroft to "say hello"
    • remove all files in /tmp/mycroft/cache/Mimic2/ (or the TTS you're using)
    • ask Mycroft to "say hello" again
    • verify that an audio is produced

    Contributor license agreement signed?

    CLA [ yes ]

    CLA: Yes 
    opened by forslund 1
  • Simple Play Video Implementation for Mycroft GUI

    Simple Play Video Implementation for Mycroft GUI

    Description

    Simple standalone implementation of enabling video playback by skills inside Mycroft-GUI without Common Play Framework integration. This PR is being opened because the previous PR for play video https://github.com/MycroftAI/mycroft-core/pull/2683 is blocked on Common Play Service implementation.

    Skills should be allowed to display videos embedded in GUI and not be opened in external applications as the GUI is fully capable of playing Videos via inbuilt Video QML type regardless of Common Play Service Implementation.

    How to test

    Sample Test Skill To Test PR: testshowvideo.tar.gz

    • "hey mycroft test streaming video"
    • "hey mycroft test local video"

    Contributor license agreement signed?

    CLA [x] (Whether you have signed a CLA - Contributor Licensing Agreement

    CLA: Yes 
    opened by AIIX 1
  • Move skill settings.json to self.file_system.path

    Move skill settings.json to self.file_system.path

    Is your feature request related to a problem? Please describe. Feature request to refactor skill settings path to be consistent with self.file_system. Current behavior creates 2 separate directories for skill-specific files, if a skill uses self.file_system.

    Describe the solution you'd like Move settings.json to self.file_system, rather than current self.root_path or BaseDirectory.save_config_path( 'mycroft', 'skills', basename(self.root_dir))

    Describe alternatives you've considered Current behavior is not broken, only harder to navigate. Old locations could be referenced as they are now, but that potentially leaves config spread among several locations depending on when a skill was installed.

    Additional context Using self.file_system should make skill file paths consistent in the event the base paths are changed (i.e. https://github.com/MycroftAI/mycroft-core/pull/2803). Any changes to self.file_system should handle migration of all skill files together (rather than patching individually as proposed here for settings.json)

    opened by NeonDaniel 7
  • msm_wrapper.py tries to

    msm_wrapper.py tries to "from msm import...", but msm is deprecated

    I'm working on packaging this code for Debian. As part of this, I'm looking at also packaging all the dependencies. I do this by iterating over

    • Do an attempted build for mycroft-core (this fails because a python library is not available)
    • Either install the library (if it exists), or whip up a package (by way of dh-make ), and install that
    • Do another attempted build

    etc, until it succeeds.

    I've now reached the point where it tries to run something that imports mycroft/skills/msm_wrapper.py, which contains

    from msm import MycroftSkillsManager, SkillRepo
    

    which requires the "msm" module from https://github.com/MycroftAI/msm -- but that redirects to signify that the package is now deprecated, and there is an "about" message to that extent, too.

    While it's possible to package deprecated code, I would prefer not to do that if at all possible. As such, it would be nice if mycroft-core were to either stop trying to import from the deprecated module, or if it were modified so that at least msm_wrapper won't fail if the module is not available.

    opened by yoe 5
  • Upgrade Lingua Franca from v0.4.1 > v0.4.2

    Upgrade Lingua Franca from v0.4.1 > v0.4.2

    Description

    Adds Farsi support

    How to test

    Switch Mycroft to Farsi - otherwise everything should work as expected.

    Contributor license agreement signed?

    • [x] CLA
    CLA: Yes Status: To be reviewed 
    opened by krisgesling 1
  • add skill states and categories and enable barge in

    add skill states and categories and enable barge in

    Description

    JIRA SKILL-224 and associated

    How to test

    Will require Alarm and News skill PRs as well (same name as this one) Set alarm for 1 minute from now, play the news, say stop, only the alarm should stop, the news should continue to play

    Contributor license agreement signed?

    yes

    opened by ken-mycroft 8
  • Discussison: bus instance for each skill?

    Discussison: bus instance for each skill?

    Chatting with @JarbasAI last night and discussing the multithreaded event emitter in the messagebus client and the fact we don't guarantee the execution order of the different threads.

    @JarbasAI suggested that each skill should have a separate bus client, and run in single threaded mode.

    The pros and cons

    Running in this manner will keep responsiveness high while being a bit safer and more isolated. In addition the startup of skills can be simplified a bit.

    The downside of using a bus client per skill is that it

    • Requires more memory (but only slightly)
    • Using the current design it will require 1 thread per skill

    A possible issue may be heavy increased number of connections to the messagebus service but I currently haven't seen any signs of this.

    I've been a bit against this setup for above reasons but after talking with @JarbasAI and thinking it over I think it's positive effects will outweigh the negatives...

    The client has always been more or less threaded to keep responsiveness high (even before the ExecuterEventEmitter and ThreadedEventEmitter) but always using a threadpool with fairly low thread count.

    Proof of concept

    To test this out I created this feature/bus-client-per-skill-branch depending on the feature/custom-emitter-branch of the messagebus-client.

    This will give skills their own bus client using the basic event-emitter (no threads). The executor event emitter is still used by the services, since there was some annoying blocking behavior. Consider this mainly as a POC of how it would work, in the end it should be possible to use only the single-threaded approach.

    Things to note is the behavior of the common play / common query multicasts, in this setup they are as quick as when using the ExecutorEventEmitter.

    We might find a way around using the 1 thread per skill by taking advantage of asyncio but I'm not 100% sure how / if it would work.

    Status: For discussion 
    opened by forslund 3
  • USB Microphone does not work after removing and reattaching

    USB Microphone does not work after removing and reattaching

    Describe the bug I use a Jabra USB Microphone/Speaker combi at a Picroft. If i remove the USB device and attach it again it does not work until i restart Mycroft services.

    To Reproduce Steps to reproduce the behavior:

    1. Set up a working Picorft installation with a USB Mic/Speaker
    2. Remove the USB device
    3. Reattach again
    4. Nothing is recognized any more

    Expected behavior It continues working like before.

    Log files No logs

    Environment (please complete the following information):

    • Device type: Raspberry Pi 4
    • OS: Picroft
    • Mycroft-core version: 20.08

    Additional context no additional data

    bug 
    opened by AZAZ78 1
  • set STT response encoding to utf-8 (deepspeech local)

    set STT response encoding to utf-8 (deepspeech local)

    Description

    Setting STT response encoding to utf-8 for local deepspeech server, by setting encoding attribute of urllib-response to utf-8 to omit encoding auto-detection, that fails sometimes.

    How to test

    Use Mycroft with local deepspeech server with German language model: umlauts aren't encoded correctly and therefore response is not understood.

    Contributor license agreement signed?

    CLA [x] (Whether you have signed a CLA - Contributor Licensing Agreement

    CLA: Needed 
    opened by nutzl 3
Releases(release/v21.2.0)
  • release/v21.2.0(May 26, 2021)

    Features

    • Allow overridden converse methods to accept messages (#2813) by @NeonAndrii
    • Add Skill API (#1822) by @forslund ➔ Find out more
    • Add skill_id to converse error msg (#2827) by @krisgesling
    • Install Alpine deps to a virtual meta package (#2841) by @PureTryOut
    • Add optional paramater to voc_match for exact matching (#2858) by @JarbasAl and @krisgesling
    • Upgrade Lingua Franca to v0.4.1 (#2890) by @ChanceNCounter and @krisgesling
    • Replace hardcoded use of /tmp directory (#2892) by @dzekem and @krisgesling

    Bugfixes

    • Fix dev_setup.sh max cores detection (#2857) by @forslund
    • Sync curated cache with dict of cached sentences (#2870) by @forslund
    • Remove example entries in blacklisted_skills config (#2844) by @krisgesling
    • Fix loading Mimic phonemes from cache (#2871) by @forslund
    • Fix replacement of existing Skill loader in queue (#2899) by @krisgesling

    Tests

    • Add tests for get_response (#2838) by @forslund
    • Old skill tester: Fix Padatious setup and fallback intents (#2894) by @forslund

    Other changes

    • Remove log pollution (#2840) by @DiegoAsterio
    • Remove duplicated Padatious code (#2843) by @JarbasAl
    • Remove intent-service backwards compatibilities (#2849) by @forslund
    • Consolidate TTS cache logic (#2853) by @chrisveilleux
    • Remove stray print (#2856) by @forslund
    • Utilize the mycroft-messagebus-client module (#2863) by @forslund
    • The phoneme needs to be converted to a list before being passed on. (#2865) by @chrisveilleux
    • Upgrade pillow from 7.1.2 to 8.1.1 (#2868) by @dependabot[bot]
    • Move TTS cache curation to TextToSpeechCache (#2869) by @forslund
    • Upgrade pyyaml from 5.1.2 to 5.4 (#2873) by @dependabot[bot]
    • Upgrade requests to 2.25.1 (#2783) by @PureTryOut
    • Update Readthedocs config to handle mycroft-messagebus-client (#2887) by @forslund
    • Bump core version and MSM for v21.02 (#2907) by @krisgesling

    Deprecations

    • Support for Python 3.5 has been deprecated as it has reached EOL.
    Source code(tar.gz)
    Source code(zip)
  • release/v20.8.1(Feb 17, 2021)

    Features

    • Add Plugin system for STT, TTS, Wake Word engines and Audioservices (#2594) by @forslund and @JarbasAl ➔ Find out more
    • Add ProcessStatus to all Mycroft Services providing a consistent interface for querying their state. (#2648) by @krisgesling and @forslund ➔ Find out more
    • Add new CPS_extend_timeout method to Common Play Skill (#2666) by @JarbasAl
    • Add support for doas, a sudo alternative (#2690) by @pixelherodev
    • Local changes to Skill settings will now persist until a change is made to remote settings (#2707) by @forslund
    • Add config flag to disable all Skill settings syncing (#2734) by @JarbasAl
    • Add Mozilla TTS support (#2713) by @domcross ➔ Find out more
    • Validate the Mozilla TTS connection (#2828) by @JarbasAl
    • Add engine configuration option for Polly TTS (#2706) by @joshuajaharwood
    • Add self.gui.connected() to check if a GUI is connected (#2682) by @JarbasAl
    • Add self.gui.get() to safely access values in GUI dict (#2820) by @krisgesling
    • Add self.gui.release() to signal that the Skill is no longer using the GUI (#2766) by @JarbasAl
    • Upgrade Mycroft Skills Kit to v0.3.16 (#2688) by @krisgesling ➔ Find out more

    Bugfixes

    Skills

    • Don't reload skill if a mod time is in the future (#2659) by @forslund
    • Initialize status members before bus handlers (#2681) by @forslund
    • Fix dialog_renderer when no dialog or locale directory exists (#2685) by @katridi
    • Reorder operations to ensure removed Skills are first unloaded. (#2823) by @krisgesling
    • ensure load_status is initialized on load failure (#2735) by @krisgesling
    • Handle anonymous adapt intent (#2767) by @forslund
    • Fix intent_api following refactor (#2786) by @JarbasAl

    Audio Services

    • Fix Audioservice startup on system time change (#2689) by @forslund
    • Fix UnboundLocalError in AudioProducer (#2780) by @dalgwen
    • Add the --no-video flag to VLC audio backend (#2791) by @JarbasAl
    • Improve safety of audioservice calls, particularly in VK tests (#2804) by @forslund

    Other Mycroft Services

    • Settings - Add optional message argument (#2704) by @krisgesling
    • Update to pyee 8.1.0 - improved handling of multithreaded environments (#2724) by @forslund
    • Config - Stop location being referenced before assignment (#2809) by @PureTryOut
    • Ensure messagebus is connected before reporting that the Enclosure service is ready (#2758) by @krisgesling
    • Unshadow Message class in _handle_pairing_complete (#2790) by @forslund
    • Fix typo preventing STT plugins to load (#2748) by @forslund

    TTS Engines

    • Mimic - Fix duration_stretch configuration (#2691) by @forslund
    • Mimic - Fix memory calculation causing build failures on ARM (#2716) by @el-tocino
    • Mimic - Handle missing binary properly (#2718) by @forslund
    • Mimic - Send correct conf to Mimic when used as fallback (#2829) by @forslund
    • Mimic2 - Fix cache directory error (#2800) by @chrisveilleux
    • Google - Fix pronounciation of "m." (#2699) by @gaganpreet
    • Google - Upgrade gTTS to v2.2.0 (#2763) by @marvin-w
    • Google - Upgrade gTTS to v2.2.2 to fix Google voice (#2831) by @krisgesling

    Wake Word Engines

    • PocketSphinx - Fallback to English model if configured model does not exist (#2692) by @katridi
    • Porcupine Wake Word - Update for newer engines (#2722) by @forslund

    GUI

    • Fix missing skill_id parameter for page interaction and focus events (#2732) by @AIIX
    • Fix missing remove page implementation, show idle if all pages removed (#2781) by @AIIX
    • Don't clear namespace on every system page call (#2814) by @AIIX
    • Use the correct delegate, fix layouts, autofit text for System TextFrame (#2815) by @AIIX

    Tests

    • Voight Kampff - add Given steps to set test timeout (#2663) by @forslund
    • Add basic test cases for GUI interface (#2697) by @forslund
    • Voight Kampff - fix reset of patched config (#2742) by @forslund
    • Only build Mimic once during travis tests (#2745) by @forslund
    • Enable simultaneous CI jobs and provide Mycroft logs on failure (#2762) by @krisgesling
    • Voight Kampff - Improve error handling (#2793) by @forslund
    • Voight Kampff - add method to wait for audio service (#2808) by @krisgesling
    • Implement GitHub Actions for linting and unit tests (#2819) by @chrisveilleux
    • Use OS default gcc in github workflow (#2830) by @forslund
    • Run unit tests on python 3.9 (#2739) by @forslund

    Documentation

    • Fix documentation for Lock.exists() (#2721) by @Nihvel
    • Point sphinxdocs to new requirements.txt location (#2731) by @forslund
    • Add Plugin base classes APIs to readthedocs (#2736) by @forslund
    • Fix readthedocs build (#2749) by @forslund
    • Clarify that gui.clear does not close a Skill (#2769) by @krisgesling
    • Fix simple typo, retruns -> returns (#2785) by @timgates42
    • Add filesystem documentation to readthedocs (#2805) by @forslund

    Other changes

    • Refactor intent service (#2599) by @forslund
    • DeepSpeech - Remove English-only error. DS now supports other languages. (#2705) by @el-tocino
    • Setup - allow variants of arch (archarm, ...) to fetch dependencies (#2725) by @emphasize
    • Add warning if MSM is using an appstore other than Mycroft Marketplace (#2737) by @JarbasAl
    • Setup - Enable utf-8 encoding during dev-setup.sh (#2746) by @forslund
    • Run CLA check on all branches (#2759) by @krisgesling
    • Remove six from dependencies (#2782) by @PureTryOut
    • Refactor - common bus connection method (#2792) by @krisgesling
    • Refactor - stop speaking (#2821) by @forslund
    Source code(tar.gz)
    Source code(zip)
  • release/v20.8.0(Sep 3, 2020)

    Features:

    • Allow override of platform animations like talking and thinking to prevent interrupting existing content #2657
    • Add more detailed Track Status to Common Play Skill. Provides distinct status codes for different layers of media handling #2674

    Bugfixes:

    • Fix ValueError on check of file modification date - do not check if list of files is empty #2662
    • Fix fresh MSM initialization with no internet connection - adds a missing argument #2677
    • A recent change allowed default Skills to update even if the autoupdate flag was set to false. This ensures that flag is respected. #2680

    Removal of deprecated items:

    • pyee.EventEmitter and our own ThreadedEventEmitter converted to new Emitters available in pyee #2667
    • Hardcoded recording timeouts should now be configured in mycroft.conf #2668
    • skills.converse.error will no longer be emitted, please use skills.converse.response instead #2669
    • Internal startListening signal will no longer be checked #2670
    • DialogLoader class removed in favor of new load_dialogs function #2671
    • get_http and remove_last_slash string utils have been removed #2672
    • Audio utils that had previously been moved from mycroft.util have had their references removed. This includes mycroft.util.is_speaking, mycroft.util.wait_while_speaking, and mycroft.util.stop_speaking. The methods should be called from their new module mycroft.audio #2678
    • The imp package has been completely replaced with importlib. This was located in the Audio service loading and loading of the old integration test environment #2679. Audioservice submodules names are now prepended with "audioservice_" to prevent module naming collisions #2684
    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.5(Aug 17, 2020)

    Features

    Add callback hooks to run Mycroft as a service #2601 This adds a simple system of callback hooks to run mycroft as a service or through a single executable. It allows the definition of a wrapper script with handlers for ready states, error states and a watchdog to ensure the system is still running.

    The current watchdog implementations are currently only for the speech client (voice data is received from the mic) and the Skills process (skills are updated) due to their natural cyclic structure.

    Big thanks to @forslund for this and all his contributions to this release. There are too many to count!

    Add GUI support for animated images #2616 New method show_animated_image() added to Qt GUI framework providing a GUI page for displaying animated gif files. Thanks to @JarbasAl for this and all his new GUI Skills.

    Add method for updating playback information from Skills #2619, #2655 This adds a common method for Skills to send playback information and status to the Common Play Skill. There are ongoing discussions about the complete management of playback between Skills, Common Play, and audio services. Special thanks to @AIIX and @JarbasAl for their ongoing work on this.

    Gentoo Linux support added to setup scripts #2583 Gentoo users can now run the standard dev_setup.sh script and their OS will be detected allowing the correct dependencies to be installed. Big thanks to @doczkal for this one!

    Snapcraft CI #2597 Continuous Integration implemented for Mycroft Snap releases.

    Add 'Skill should not reply' test #2618 A new Voight Kampff Step was added allowing integration tests to check that a particular Skill does not respond to some utterance. This helps to ensure your Skill only responds to questions it can handle reducing unexpected errors.

    Add wait_for_message() method #2628 This method will wait for a message of a specific type to be detected on the messagebus, returning the message if detected before the timeout has expired.

    Add Festival TTS support #2643 Thanks to @jmontane for this addition, enabling on-device TTS for Catalan (and other language) speakers!

    Bug fixes

    Workaround for issue on older versions of ncurses #2591 get_wch() can at times throw errors as reported in Issue #2523, this creates a function wait_for_any_key() handling the error and retrying.

    Prevent audio playing between recording and handling of utterance #2621, #2625 This maintains silence for a short period while Mycroft is actively processing a request providing a better experience for the user. It means media playback completely stops the moment a user asks it to, and prevents short snippets of audio playback if Mycroft is formulating a response.

    Fix Skill submodule loading and replace imp with importlib #2327 Replaces the current imp based Skill loader with an importlib based solution. Adds a small change allowing better use of submodules allowing them to reload together with the main module.

    Fix Common IoT Skills unable to register entities and scenes #2636 Thanks to @jamesmf for this fix!

    Ensure custom timeout is passed to wait_for_response method #2634

    Fix Mimic builds on Fedora #2521 Thanks to @countcretinos for this one!

    Fix writing multiple settings to file #2652 Thanks to @emphasize for reporting this one.

    Improve language configuration handling in IntentService #2650 If the STT service does not send a language code with the message, then the Intent Service will now fallback to the globally defined language, or en-us if none is defined.

    Ensure default Skills are installed before initial load #2644 This adds a quick check on load to ensure default Skills are installed, unless they are blacklisted. If not installed it will do so before finalising Mycroft's boot sequence. This will only extend the boot time if important default Skills are not available.

    Update Lingua Franca to v0.2.2 #2654 Primarily bug fixes - see release notes for more details. Thanks to @ChanceNCounter, @emphasize, @forslund and @PureTryOut

    Disable wake word uploads in preparation for API deprecation #2661 The API endpoint used to upload wake words will be deprecated in the near future and instead shifted to Selene (home.mycroft.ai). To ensure older devices are not making unnecessary post requests to a dead endpoint, the upload has been disabled for devices running v20.2.

    Other improvements

    • Refactor wake-word waiting and record phrase #2589
    • Cleanup settings system #2560
    • Improved list of available commands in mycroft-help #2613
    • Update pyee to v7.0.1 - replaces home-spun threadpool based emitter with ThreadExecutor from pyee #2507
    • CI improvements #2537, #2541
    • Remove duplicate check for supported languages of Lingua Franca methods #2649. Another thanks to @emphasize for reporting this one.

    Community Contributors

    Another big thanks to all the Mycroft Community members that contributed to this release:

    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.4(May 29, 2020)

    Padatious Intent Parser v0.4.8 #2595

    This release of Padatious adds support for saving and loading intent models courtesy of @repodiac, and better handles apostrophes thanks to @stratus-ss.

    Voight Kampff updated #2576, #2592

    Added support for setting user configurations through Given Steps in the form: "Given the user's {config} is {value}".

    Added a clean command to remove any test, step and configuration files that have been copied to the Voight Kampff directory by the test runner. To clean up use ./start-mycroft.sh vktest clear, mycroft-start vktest clear or mycroft-skill-testrunner vktest clear.

    Updated dependency handling #2562, #2571, #2575

    Added "loose" requirements option, allowing pip install to use ">=" instead of "==" for all packages. This is done by setting the MYCROFT_LOOSE_REQUIREMENTS environment variable. The intention is to make mycroft packaging for linux distributions easier while allowing the git installation to still use a locked set of module versions.

    The ever growing requirements.txt has also been split into core requirements, and a range of optional requirements files. This reduces the number of packages being installed unless the system will actually make use of them. It also paves the way for automatic installation of plugin dependencies. Big thanks to @PureTryOut for this one.

    Removed xmlrunner as it is no longer used.

    Added initial support for XDG Base Directory Specification #2559

    Skills will now read and store settings in the XDG_CONFIG_DIR if it is set and the device isn't already using the existing settings location in each Skill directory.

    Added support for Alpine Linux installation #2584

    The standard setup script will now detect Alpine Linux and install the appropriate dependencies. Another big thanks to @PureTryOut for this and the range of work that has gone into making Mycroft compatible!

    Fixed add_context decorator #2577

    The @adds_context decorator has optional content that should be passed to the set_context() method. This was not being passed along. This has been resolved with tests added.

    Fixed remove_fallback using original handler #2588

    Allows the removal of a fallback handler using the original handler, and not the wrapped handler used internally. Along with a range of tests to verify setup and shutdown of Fallback Skills.

    Modernize ESpeak TTS #2581

    ESpeak output was produced directly from the executable, this is now through the standard TTS output queue like the other TTS modules. This resolves an issue with wait_while_speaking.

    Added Polly TTS support - for real this time #2585

    This got missed in the last release but is definitely included this time. To get setup check out the documentation. Thanks again to JarbasAl from the Chatterbox team for this one!

    Bugfix audio service crashes if started without internet connection #2598

    The audio service would crash whilst importing the google_tts module on startup if no internet connection was available as it failed to fetch a list of supported languages. This update prevents the crash and adds a cached to use if the remote list is unavailable.

    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.3(May 8, 2020)

    Mycroft Skills Kit v0.3.15

    This release of Mycroft Skills Kit v0.3.15 switches Github authentication to use Personal Access Tokens as the existing username and password method is being deprecated. A huge thanks to Andlo for all his work on this. It also includes a small bugfix to respect the --repo-cache argument courtesy of Jarbas.

    IBM Cloud Text to Speech (TTS) #2548

    The IBM Cloud Text to Speech connector has been rewritten to handle IBM's new authentication mechanism. Massive thanks to @CodyReinold for this one.

    Contributor guidelines cleanup #2551

    This update improves clarity, fixes broken links and makes it easier for new developers to contribute to the project . Another big thanks to @CodyReinold

    Czech and Polish support #2554, #2556

    Initial language support added for Czech by @Tony763 and Polish by @RafalJanicki. Support for these languages is also underway in our Lingua Franca library.

    Mimic1 add default core param #2558

    When installing Mimic1 with no core paramater, it will now default to a safe value running on a single core. Thanks to @el-tocino for this.

    MOAR Tests! #2496, #2569, #2573

    A wide range of tests have been added to various utilities and functions. This includes tests for audio, caching, downloads, files, strings and time.

    The test runner has also had some tweaks. It will explicitly execute with Python 3, addressing an issue where the system would hang if a generic Python alias did not exist. It will also ignore directories not intended to be tested with Pytest. Big thanks to @PureTryOut for both of these fixes!

    Dependency updates #2551

    Pillow has been updated to v7.1.2

    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.2(Apr 23, 2020)

    This release is focused on testing and includes the Voight Kampff test suite along with improved unit tests. Of course, the wheels of the community is always spinning so there are some juicy additions and fixes as well.

    Voight Kamff #2506, #2530, #2540, #2522,

    The new behavioral skill / core test suite is run on each PR to mycroft-core and mycroft-skills allowing easier identification of bugs and bad behavior. For more information on how to write this type of test check out the official documentation. The system is still in early development and will be built out more and more to completely replace the current test system.

    Enable multiple snowboy hotwords #2499

    Thanks to awesome work by @dalgwen Mycroft now supports using multiple snowboy hotwords.

    Add config options for listening timeouts #2536

    To allow longer voice input or timeout after silence these new config options can be used.

    Polly TTS

    @JarbasAI polished up his old Polly TTS Pull request and it finally got merged, giving mycroft the ability to use Polly for rendering speech of a variety of languages.

    Google TTS automatic language #2534

    The Google TTS backend no longer require a specific configuration, instead it tries to determine the correct language code to use from the global lang config option. Many thanks to @luca-vercelli for this contribution

    Fix IBM Watson TTS #2514

    IBM Watson's TTS Api has been updated and now Mycroft's interface has been updated as well to match.

    Shutdown sequence #2529, #2538, #2543

    These updates fixes a couple of issues with the shutdown process of skills and enclosure allowing them to be shutdown without being killed.

    Support for reading the Mark-1's Eye colour #2471

    @JarbasAI's second PR this release, this adds an interface to retrieve the current color of the Mycroft Mark-1 eyes.

    Simplify Mycroft gui bus connection #2533

    The GUI interface was simplified to use a single websocket connection while still isolating the clients, this fixed a regression due to upgrade of Tornado.

    Upgrade lingua-franca to 0.2.1 #2512, #2515

    This fixes some issues with rendering numbers and dates. Many thanks to @ChanceNCounter and the LF-crew for this.

    Add tests and fix bugs surrounding the converse system #2503

    Adding tests is always a good way to find and squash bugs. This handles a couple of modification during iteration issues.

    Miscellaneous

    • Spelling fixes courtesy of the very nice person @tycrek #2487
    • Simplify the converse system using the wait_for_response() method #2479
    • Upgrade psutil to version 5.6.6 #2501
    • Improve Danish translations by the very friendly @andlo #2520
    • Non Mark-1 devices now also updates the version on the webpage #2528
    • Update documentation of running core without backend by the friendly @kelnos #2531
    • Fix possible voice client crash if mic is initialized muted #2542

    A big thanks to all who has contributed to this release, you are all my favorite persons in the world.

    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.1(Mar 9, 2020)

    This contains mainly minor bugfixes.

    Upgrade msm to 0.8.7 #2484

    Fixes issues loading skills if a skill is installed using a git/git+ssh url

    Fix reset converse #2491

    Fixes an issue where converse state wasn't informed on user silence

    Update enclosure version #2489

    Fixes updating the enclosure firmware on each boot.

    Source code(tar.gz)
    Source code(zip)
  • release/v20.2.0(Feb 27, 2020)

    We're not out of beta but we're releasin' on time! In the best possible way!

    A major release like this is an opportunity for us to clean up some of the older things and make future development easier and cleaner. The improvements over 19.08.0 are now many thanks to the work of the core team and the awesome community of developers and users.

    v20.02 brings some changes, some old deprecated code has been removed making core a little bit leaner and some huge contributions has made it in (targeted messages) along with the usual bag of minor fixes, and improvements.

    Breaking changes in 20.02

    • Skill settings are now a simple dict (Deprecated 19.08) Skill settings are now a simple dict and procedure for registring settings changed callback and forcing a disk write of the settings has been updated

    Registering settings changed callback (docs):

        def initialize(self):
            self.settings_change_callback = self.my_callback
    
        def my_callback(self):
            ...
    

    Write settings to disk:

    from mycroft.skills.settings import save_settings
    
    ...
    
        def skill_method(self, _):
            save_settings(self.root_dir, self.settings)
    
    • The ConfigurationManager has been removed (Deprecated 18.02) #2470

    • The backwards compatibility language for extract_datetime() has been removed. #2469 The function now follows the documentation and returns None if the utterance doesn't include a date or time.

    • audio accuracy test is now wake word test The test is moved from the mycroft module into the test folder.

    Improvements, fixes and other greatness

    Targeted messages #2461, #2476, #2478, #2481

    This is something that has been discussed for a long time and now the implementation by @jarbasal is here. The system allows for multiple clients to be connected to Mycroft and only returning the response to the caller client that called. For an example implementation check out the Hive Mind Voice Sat.

    Added the commandline tool mycroft-listen #2460

    @FruityWelsh created a simple commandline tool to trigger mycroft listening. Many thanks!

    Make listener audio storage location configurable #2477

    Thanks to @ludwhe the storage of utterances and detected wake words can be configured.

    IntentQueryApi #2468

    An API allowing a skill or application to query the state of the intent service, listing things such as registered intents, skill ids and other things. This is also the work of @jarbasal

    Deprecate use of # in config file #2472

    Using only // as comment makes the config compatible with tools such as jsmin. Big thanks to @belvederef for the initiative and implementation.

    Improve Mimic2 error handling #2473

    Server errors generating Mimic2 audio will now be caught and Mimic1 will be used as fallback.

    Common Play tests and cleanup #2459

    A series of unittests has been added to test the common play skill base class and the audioservice. As these were added a couple of minor bugs were resolved and the code was cleaned up slightly.

    Tests for common query #2462

    Adds test and fixes detection of visual platforms.

    Simplify dialog loading #2422

    The DialogLoader class is now deprecated instead a simple get_dialog() function is used.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.7(Jan 30, 2020)

    Few PR's lots of code changes!

    The big change in this release is the removal of the language parsing/formatting code and instead relies on the lingua-franca module run by the Mycroft community (and @JarbasAI in particular who set up the project originally). Much discussion is going on in the mycroft chat language channel, if you're interested join us there!

    Replace language parsing and formatting with lingua-franca #2438, #2464

    This basically cuts 20 000 lines of code from mycroft-core (roughly 50% of the python code). Stubs still remains to retain backwards compatibility.

    Allow stop-mycroft.sh to stop Mycroft if launched through other python module #2449

    This relates to the work @andlo is making to make the skills easier to run in various IDEs. Big thanks to him for improving this side of things!

    Upgrade pip to latest version #2458

    The dev_setup.sh script will now install pip 20.0.2, besides bringing us uptodate this allows installs on bleeding edge systems running Python 3.9.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.6(Jan 16, 2020)

    I saw the future clearly. It was 20/20...

    Mycroft has now entered the new year with a release, we're happy for all contributors old and new that are joining us in this Brave New World of 2020.

    Documentation updates

    • @TheLastProject corrected the non-metric version of the unit config in #2441
    • @notdefine corrected the documentation on how to start the unittests with start-mycroft.sh
    • The MycroftSkill members root_dir and settings_change_callback were added to the readthedocs documentation.

    Test updates #2443, #2442, #2450

    Tests were extended for the mycroft_skill, tts and audio modules, increasing code coverage by a couple of percent. In doing this some issues were identified and squashed.

    • Mimic2 preprocessing is now active
    • The fallback TTS can now trigger listening
    • vlc playback backend works with tracks with mime-info

    Make venv-activate work with sh and zsh #2439

    We're always grateful when contributors make our scripts work with more platforms and tools. Big thanks to @notdefine for fixing this.

    Make padatious multithreading configurable #2448

    Padatious will default run multithreaded to speed up training but this is now configurable thanks to @andlo.

    Upate gtts backend to be compatible with newer versions #2447

    This allows mycroft to work with v2.1.0 and above of gTTS. Many thanks to @ansgar-t for this update.

    Update msm to 0.8.5 #2452

    This allows the installer skill to detect errors when installing.

    End of playlist message

    The audioservice will now send an end of playlist message after the last track has been played. This will be useful for restoring the resting screen after the last track or detecting the end of a sequence of steps in an prerecorded situation.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.5(Dec 20, 2019)

    The Mycroft Christmas release comes with a small bag of goodies this year, even if I won't be doing any rhyming like I did last year.

    We've had 25 releases this year (unless this release is messed up somehow that's how we'll end). These 25 releases include the code contributions from no less than 41 community members (just on mycroft-core).

    Settingsmeta stability #2370, #2433

    The biggest thing in this release is an attempt to stabilize the settings upload. This will make sure that the skills page on Mycroft Home is populated as soon as the device is paired. It also tries to guarantee that the skills manifest is uploaded before any new changes to the settingsmeta are pushed making modifying skills easier.

    Upgrade python dependency on Red Hat #2412

    @maxbachmann replaced the old python34 package with the generic python package installing a more modern python version on Red Hat systems. Many thanks for that!

    Allow Gui to connect again #2416

    This is a quick work-around allowing the gui to connect to core over the enclosure bus again. A change in the recently upgraded tornado made this fail.

    Allow showing DEBUG in CLI #2421

    The cli now always disregards the DEBUG message filter, relying solely on the log level setting.

    Fix Hotword selection when precise development models are activated #2418

    The recent update of hotword config loading included a bug where the settings from different places wasn't merged correctly. This fix handles the merging properly.

    Support for Porcupine hotword engine #2139, #2424

    @alumae submitted a PR to allow the usage of the porcupine hotword engine by picovoice. Many thanks for this awesome feature.

    Langauge parsing

    • Handle extracting number from strings with %, many thanks @ChanceNCounter #2413
    • Clean up time resolution code, also @ChanceNCounter! #2432

    Documentation

    • Readthedocs generation code was cleaned up #2399
    • Typo fix, thanks @PFischbeck for spotting and fixing #2427
    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.4(Dec 6, 2019)

    This release comes with many small updates and more excitingly a couple of new contributors

    Geolocation API #2393

    The API is now prepared for the comming update of the mycroft backend offering a geolocation api. This will enable retrieving coordinates from names of places.

    dev_setup.sh update #2388, #2390, #2401, #2403, #2406, #2414

    • The dev_setup.sh os install instructions has been separated into separate functions to make the script a bit more easy to read. In addition to this the installer for Arch Linux and certain versions of Debian has been fixed. In addition a --clean option now exists allowing to wipe Mycroft from the system. Big thanks to @gbaptista, @maxbachmann for helping out with this.

    msk 0.3.14

    The latest release of msk adds License selections and the option to add a manifest.yml at skill creation time. And some splashes of color to make it more readable.

    Python 3.8 #2391, #2400

    Python 3.8 is now included in the Travis tests and is running the mycroft stack nicely.

    Handle missing .intent files #2411

    @domcross added a fallback to the en-us folder in case the .intent file doesn't exist. This allows skills that aren't fully translated to be loaded. Many thanks.

    Language improvements

    • Improve dutch language functions, thanks @mikewoudenberg #2385
    • Speed up extract_number, thanks @maxbachmann #2402
    • make time output more natural, thanks @maxbachmann #2386

    Misc

    • Fix simple audio backend Mimetype lookup when http request fails #2389
    • Fix usage of Ctrl+C in the simple cli #2409
    • Speed up the SSML tests, big thanks to @maxbachmann for this. #2405
    • Clean up python2 remnants, big thanks to @maxbachmann for this. #2396
    • Use flake8 instead of pycodestyle in travis. Thanks @cclauss #2251
    • Update adapt to 0.3.4 #2394
    • Simplify setting a custom wakeword #2395
    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.3(Nov 15, 2019)

    Yo it's my turn, do drop the mic, old python 3.4 will have to take a hike It's served long and well It's been nice, it won't go to hell

    We've come a long way since the early days, we moved on and changed our ways first python two had to go It's 2019 and support for 3.4 is gone so we'll follow suite drop this snake, yo, hope you enjoyed this hot take.

    Boom Mic drop.

    Actual release notes

    So as the poetry slam entry above indicated, as of this version (19.8.3) we join the rest of the Python community and dropping support for Python 3.4. This was originally planned for 19.8.0 but the packaging changes for the Mark-1 wasn't completed and tested in time. This change will allow us to start updating a couple of the dependencies to newer versions. We now officially support Python 3.5 - 3.7, 3.8 is on the horizon.

    Fix Wakeword messagebus message #2367

    The recognizer_loop:wakeword message wasn't sent until after the STT was complete. Thanks to the work of @speedfox-uk the message is now sent as soon as the wakeword is detected.

    STT and TTS error handling #2372, #2374

    In case of errors when starting up the TTS and STT systems would fail quitely, Error logging has been added and a fallback mechanism using the default services.

    Speed up external interaction with the messagebus #2371

    The simple send script in the messagebus used by some of the mycroft commandline tools (mycroft-speak, mycroft-say-to) has been sped up by not requiring the remote settings to be fetched.

    Drop python 3.4 changes #2381

    In the process of dropping python gTTS was updated along with pillow (fixing a stability issue), and the

    Bugfixes

    • Handle negative frame count in Mic code #2377
    • Remove unnecessary code when using relative time #2364
    • Fix Error when shutting down a removed skill #2376
    • Fix reference leak in websocket client #2375
    • Fix Spanish Datetime tests running on November 1 #2378
    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.2(Oct 21, 2019)

    Due to a possible major bug (voice process going haywire and filling the disk) this release got moved forward a couple of days.

    Improve mic handling #2365, #2368

    Especially the Mic Array v2 seemed prone to throw IO errors, this release adds a basic restart control allowing it to recover in some cases. The change also adds some extra safety to the mute/unmute operations which could theoretically cause an issue. In addition this resolves a possible issue with looping logging if an IOError occured.

    Ask Selection #2302

    The new MycroftSkill.ask_selection() method adds a simple way of asking the user to choose between a number of options. Many thanks to @JarbasAl for designing it. Read more about the method in the api documentation

    Fix trigger listening over messagebus for Picroft #2366

    The restructuring of how the get_response() or speak() with exepect_response=True methods triggers listening missed a special case on the Picroft platform. This small one-line change resolves the issue.

    Misc

    • Handling of fractions in Spanish #2356 (Big thanks to @ChanceNCounter)
    • Minor fixup of the project Readme #2352 (Thank you @moritzgloeckl )
    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.1(Oct 10, 2019)

    This release features mainly bugfixes for issues introduced in 19.8.0 but also a couple of very welcome improvements.

    Replace the custom IS_TRAVIS environment variable with the standard CI #2252

    Big thanks to @cclauss for handling this and making the setup more standardized.

    Remove NTP sync reboots #2326

    Recent updates has improved the stability during and after NTP updates so the reboot is no longer necessary.

    Fix Mary TTS #2262

    Many thanks to @KishCom for updating the MaryTTS backend into a functional state.

    Remove Dialog repetition #2297

    @ChanceNCounter is to be commended for this little tweak making sure that the same dialog line isn't used twice in a row.

    Make sure get_response listen trigger is sent after the correct sentence #2351, #2360, #2361

    Attaches the listen trigger to the last chunk of a sentence instead of relying on the audio_output_end message.

    Spanish extract number improvements #2347

    @ChanceNCounter fixed an issue where the numbers were summed instead of returned as a list

    Update nice duration #2330

    Thanks to @ChanceNCounter the nice_duration now takes resolution as an argument.

    Bugfixes

    • Crash in logger when starting skills #2323
    • Load skill settings once only #2336
    • Restore tail queuing of event handlers #2353
    • Add missing __delitem__ method in Settings #2354
    • Make skill logs visible in tester #2359
    • Fix default arguments for noce_number, many thanks again @ChanceNCounter #2330

    Misc

    • remove skill manager classes config property #2283
    • .gitignore updated with vscode and coverage folders #2334
    • Add better logging for voice client #2331
    • Add mute information to the mic_status file #2317
    Source code(tar.gz)
    Source code(zip)
  • release/v19.8.0(Sep 24, 2019)

    At long last the 19.08 release is here.

    During these last 8 weeks (time sure flies) we've focused on refactoring the code to improve maintainability and to make it easier to improve Mycroft in the future. This has led to some major shifts in the structure of Mycroft and some backwards-incompatible changes. Most of these changes was flagged in the 19.02.0 release and the ones that weren't generally doesn't impact skill developers.

    Depreciations

    • Skill settings: MycroftSkill.settings.store() and MycroftSkill.settings.set_changed_callback() are deprecated and will be removed in v20.02. mycroft.skills.settings.save_settings() will replace the first mentioned and MycroftSkill.settings_changed_callback can be set replacing the second. Secondly this adds warning about features of the settingsmeta that hasn't been used since the switch to the new backend.

    During the coming month we will look through and mark more deprecated features...

    The Breaks

    The following are the breaking changes included in this major release

    • MycroftSkill.config no longer exists. Any skill specific settings should be made using the settings.json in the skills folder.
    • the SkillManager api was reworked and will not work as previously, locks are missing etc.
    • the listener config parameter record_utterances was completely replaced with the save_utterances
    • Config.init() to setup bus connections for the process configuration was replaced by Config.set_config_update_handlers()
    • Message parameter (and member) type was renamed to msg_type
    • WebSocketClient was renamed to MessageBusClient
    • Skill settings feature protecting existing members during the skill initialization was removed. This was a rarely used and frankly confusing feature

    The big Reorganizations

    Skill process startup #2237, #2260, #2263, #2265, #2279, #2280, #2311, #2316

    Refactors the SkillManager, moving complex logic into a couple of helper classes SkillLoader and SkillUpdater. Refactors the startup code to a simpler flow. All of this makes the startup of skills much speedier.

    Skill Settings #2287, #2306, #2312, #2313, #2314, #2315, #2319, #2320

    Major restructure splitting the settings metadata from the actual settings. This restores the skill settings to a simple dict instead of a vastly complex object.

    Mycroft Skill #2256, #2276, #2281, #2296

    The MycroftSkill class was refactored moving some of the complexity into helper classes. This also makes way for adding some mycroft skill Utils

    Skill tester #2284

    The skill tester was reorganized to make the code easier to follow.

    The Improvements

    Pulseaudio ducking support #2282

    The TTS can now trigger pulseaudio role ducking of roles (like music and video) lowering playing media while Mycroft is speaking

    Improved operation without listening indicator #2267

    The recording sent to STT lost a couple of audio frames right after the wake word trigger, this stores and prepends the lost frames to the STT data.

    Handle Precise download errors #2245

    Precise download could fail due to network errors and never restart leaving the user with pocketsphinx wakeword. This allows retrying and will use an existing precise installation if available.

    Fedora install #2257

    @vegerot contributed an update to the dev_setup.sh to make it work better on Fedora. Many thanks!

    Mint install #2209

    @fermulator fixed a couple of issues related to detecting Debian like OSes, this adds support for Mint among other distributions. Many thanks!

    Keyword munging #2303

    Long time contributor @JarbasAI found and fixed an issue with the keyword munging causing intents to fail if the intent contained the skill id. As always great work!

    Fix Mimic 2 Cache usage #2301

    Fixes an issue when the playback of the utterance wouldn't start if the .pho file for a cached utterance was missing.

    Warn if packages may be uninstalled during dev_setup.sh #2268, #2275

    This warns if a conflict in Ubuntu could lead to packages being uninstalled.

    intent_handler decorator update #2221

    the @intent_handler() decorator can now be used with padatious .intent files as well as adapt intents.

    Updated swedish time and number handling #2234

    Big thanks to @c0r73x for fixing these issues!

    Flake8 cleanup #2241. #2242

    Many thanks to @cclauss for looking through the code and fixing these issues.

    Clean the unittest from mocks from the mock module #2274

    Instead use the builtin unittest.mock. Many thanks to @mathmauney for contributing this.

    Add support for bus.get_response in skill tester #2284

    Add a basic mock of the get_response() bus method.

    Log viewer tool #2277

    A simple tool for merging and viewing all mycroft log files.

    Configuration tool #2290

    This tool validates configuration files before storing them making it harder to destroy a config.

    Make connection test more robust #2305

    Make a dns lookup as part of the test to validate that part along with the reachability of the outside world.

    Pairing check updates #2180, #2248

    Make sure the pairing check fails early if the identity information is missing and only initiate pairing for 401 errors from STT services behind mycroft pairing.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.14(Jul 24, 2019)

    This is one of those general improvement releases with lots of minor and some major things making quite a noticeable difference.

    Refactor messagebus subsystem #2213

    The code surrounding the messagebus was heavily refactored and improved.

    voice service startup improvements #2183

    The voice config was read multiple times on boot resulting in up to 4 restarts of precise when starting the service. this was resolved by improving the configuration change detection and loading of the service.

    Speedup skill service startup #2197

    The skill startup was reorganized slightly to load skills before trying to update as well as launch the settings fetching in a thread instead of blocking skill loading.

    Speedup audio service startup #2228

    The TTS service was loaded twice on startup, a fix in handling the config hash fixed the issue.

    Update "yes" aliases #2190

    @strugee submitted a couple of extra words for use when handling ask_yes_no(). Many thanks for that.

    Improve metrics #2196, #2198

    Only report stt timing if an utterance was returned and report skill id for skill handlers.

    Misc

    • Fix readthedocs documentation #2206
    • Allow may to not be a month #2187
    • Fix resting_screen_handler code when no name is provided #2185
    • configurable log locations #2192
    • fetch settings when pairing is completed #2211
    • Fix dev_setup.sh if terminal can't display color #2216
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.13(Jul 1, 2019)

    This is the first in the reduced intensity release schedule adding a couple of fixes related to skill settings the inclusion of support for streaming STT's!

    Streaming STT #2149

    Support for streaming STT's were added thanks to the excellent work of @JPEWdev. In addition to the basic infrastructure a DeepSpeech streaming STT backend was included.

    Google Streaming STT #2160

    On top of the new Streaming STT infrastructure an update google streaming STT was added.

    Skill settings fixes #2172, #2177, #2182

    • Improve skills data cleaning before sending
    • Make sure delayed checks are resumed
    • Update msm to improve skill GID in skills manifest

    Add state requests to commoniot skill framework #2150

    This updates the common IoT skill to allow for query type requests (e.g. "what is the living room temperature," "where is my phone," and "is the bedside outlet on").

    Update packages for debian/ubuntu based distributions #2167

    Big thanks to @MichaIng for cleaning this up. Checkout his project dietPi (Mycroft is a pending feature)

    Cleanup bash scripting in dev_setup.sh #2166

    Makes the script much more concise and less prone to errors using some of the features bash supplies. Shout out to @MichaIng for providing this!

    Time to system #2158

    This time util function converts a a Time/Datetime object with timezone info to a local system time.

    Miscellaneous

    • Allow to schedule events in fractions of seconds (both ints and floats). #2154
    • Remove stop() as an abstract method, since this doesn't need to be provided by all skills. #2156
    • Remove unused subprocess module from simple audio backend. #2157
    • Update python2 style metaclass declarations to python3 style. #2163
    • Travis will now only build pull requests and the branches dev and master #2162
    • Fix bug with showing the entire help pages in the cli. #2151
    • Fix changing log level of voice service. #2169
    • Update os detection code in dev_setup.sh #2165, #2173
    • Test system now hides gui messages #2170
    • Update pychromecast to 3.2.2 #2168
    • Minor German spelling fix (@MichaIng) #2174
    • Lock cryptography module version to 2.6.1 #2176
    • Add mycroft.util.format to the api documentation #2178
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.12(Jun 6, 2019)

    🇸🇪 This release on Sweden's national day brings mainly bugfixes but also small improvements to the Mycroft GUI.

    Restore functionality to store utterances locally #2141, #2145

    During previous refactoring the ability to locally store utterances was lost. This has now been restored.

    Skill settings update #2140

    After switching over to the new backend a couple of issues in the skill settings were noticed. This cleans up a couple of them and should make the code a bit tidier. For details see the relevant pull request.

    Show webpages on the GUI #2138

    @AIIX continues to build out the features of the mycroft GUI, this time adding methods for showing webpages and HTML code.

    Miscellaneous

    • Use yaml.safe_loadwhen loading settingsmeta.yaml files #2133
    • Upgrade Adapt to 0.3.3, fixing an issue with one_of()
    • Upgrade msk to 0.3.13, fixing the default layout of the README.md
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.11(May 23, 2019)

    This release fixes rare issues where skills would not start when starting Mycroft without network connection.

    Update MSM to 0.7.6 #2136

    MSM could throw an unhandled exception if no network was available at all.

    Disable settings for padatious #2132

    Padatious was uploaded as a skill to the skill page.

    Correct the check for user / group of mycroft data folder #2135

    On systems where the user wasn't the same as the default group mycroft would request to change the permissions on each startup.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.10(May 22, 2019)

    Following the recent backend release, certain situations resulted in devices which couldn't be verified as registered by the server. Device ID is now sent as part of the registration to assist in debugging and resolving these issues.

    This release also corrects a problem with 'mycroft-use' script which would disable automatic device updates when you return to the stable mycroft-core package after testing an unstable release.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.9(May 22, 2019)

  • release/v19.2.8(May 22, 2019)

    This update brings code for better interacting with the skill settings on the new backend.

    Skill GID #2104

    Instead of the old identifier a skill_gid is used to identify the skill settings from the backend.

    Remove extra pauses when speaking initials #2126

    This fixes an error when chunking sentences for the tts service and will no longer do splits in initials like "N. Armstrong"

    Update of mycroft-say-to and mycroft-speak #2111

    You can now pipe strings to this script. Thanks for adding this @FruityWelsh

    Allow yaml in settingsmeta #2113

    Settingmeta can now also be written as a yaml file with a simpler and more forgiving syntax.

    Allow sending GUI pages over http(s) #2106

    @AIIX (Thanks!) submitted a feature to allow sending qml pages over https which is a required feature for remote GUI devices.

    Cache pre-loading for Mimic 2 #2115

    Some of the common dialogs are now prerendered and cached for Mimic2.

    Precise Input queue management #2124

    Update precise to handle a build up of unprocessed chunks.

    System QML pages for show_text and show_image #2121

    @AIIX built some nice templates for basic text and showing of images on the GUI that are accessed by self.gui.show_image() and self.gui.show_text() from a skill.

    Miscellaneous

    • Fix typo in config comment for log levels. Thanks @katecanaveral #2119
    • Switch from old pep8 to pycodestyle
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.7(May 9, 2019)

    Apart from a nice update for the IoT skills this has been a quiet few weeks.

    Value support for IoTSkills #2109

    IoT skill protocol has been updated to allow catching of value fields. This also introduces a system for declaring the skill's supported featureset

    Request limiting on 422 or server errors #2116

    If posting settingsmeta to home.mycroft.ai receives a 402, 500 or 501 error it will reschedule the next retry 5 minutes into the future instead of the normal 1 minute.

    Typo-fix for german #2086

    Big thanks to @doczkal for spotting and fixing this.

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.6(Apr 25, 2019)

    This release was made to fix a packaging issue for the Mark-1. No core changes but a change in the packaging script was made to hold the pip version at 19.0.3

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.5(Apr 25, 2019)

    One of the shorter lived versions released, around 5 hours after this one 19.2.6 were released.

    Acknowledge #2096

    There is now an acknowledge sound that can be triggered by a skill instead of a verbal response self.acknowledge()

    IoTSkill Trigger Action #2099

    The trigger action is a primitive for triggering a IoT device function. Similar to the toggle but is intended to be stateless.

    Make precise default listener #2098

    For a long time precise has been available as a listener but only default on the Mark-1 and the picroft device. Now it will be the default listener on all platforms.

    Fix bus message logging #2101

    Big thanks to @JarbasAI for noticing and correcting this error.

    Audioservice list backends #2088

    The audioservice can now report the available backends, their type and some additional information.

    Miscellaneous

    • Skill tester restores get_response after tests are run #2100
    • Fix invalid chown in dev_setup.sh #2094
    • Update if automatically generated api documentation #2095
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.4(Apr 11, 2019)

    After concentrating on the server and then quickly removing the server related changes this release got pretty small.

    Restore Settings polling to 1 minute #2091

    Polling was restored from the emergency 5 minute level to the normal 1 minute

    Paused audio bug #2090

    Paused audio wasn't stopped correctly. The procedure was updated to unpause before stopping.

    Remove stop threshold #2089

    Stop threshold was a very old idea that never was used. this removes the traces of it from the code. Thanks @KathyReid for helping out with this one!

    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.3(Apr 9, 2019)

    Try to reduce load on server to help the server issue April 5 - 7

    • Remove duplicated skill entries in skills.json before upload
    • Reduce settings polling to 5 minutes.
    Source code(tar.gz)
    Source code(zip)
  • release/v19.2.2(Mar 28, 2019)

    Make Precise sensitivity configurable #2060

    The mycroft config for hotwords can now apply sensitivity and trigger levels

    New keys: sensitivity: Network output necessary to be considered an activation trigger_level: Number of consecutive chunks that are activated to cause a wakeword detection

    Example:

    {
      [...]
      "hotwords": {
        "MY-WAKE-WORD-THAT-USES-PRECISE": {
          "sensitivity": 0.5,
          "trigger_level": 3
        }
      }
    }
    

    Mimic 2 Long sentences #2061

    Fixes issue with Mimic 2 when supplied a very long sentences in an utterance. The sentence would be split into individual letters instead of chunks based on words/ and separating characters. This also refactors mimic2 to work more like the other TTS's.

    Mimic 2 Fallback #2071

    Separate the caches for all TTS's and makes sure that the mimic fallback doesn't speak over itself when mimic2 fails.

    Handle tonight better in extract_datetime() #2065, #2068

    Tonight will now more consistently match the intended night. Big thanks to @JarbasAI for helping with this.

    Portuguese Update #2039

    Portuguese format and parse functions have been updated thanks to @JarbasAI.

    Normalize for padatious and fallbacks #2077, #2078

    The intent_service will now provide a normalized version of the stt utterance as well as the raw utterance when sending it off to the fallbacks. Allowing better Padatious matching in addition to general usefulness for fallback skills.

    Misc

    • Adjust Precise last chance priority to leave region for low prio fallbacks #2059
    • Handle exception in play_wav/mp3/ogg util functions #2012
    • Allow moving system config and websettings cache using environment variables #2058
    • Fix common_iot base class for python 3.4 #2063
    • Import keyword translations from Timer skill #2062
    • Update gTTS to 2.0.3 #2069
    Source code(tar.gz)
    Source code(zip)
Owner
Mycroft
An Open Source Artificial Intelligence for Everyone
Mycroft
Predictive AI layer for existing databases.

Website | Docs | API Docs | Community forum MindsDB is an open-source AI layer for existing databases that allows you to effortlessly develop, train a

MindsDB Inc 3.8k Jun 7, 2021
A black hole for Internet advertisements

Network-wide ad blocking via your own Linux hardware The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content, without installi

Pi-hole 31.4k Jun 5, 2021
Skygear - an open source serverless platform for modern secure app development

Next is the V2 of Skygear that aim to follow Support multi tenant at core, make cloud deploy scalable at first day. Simplify deployment. Give back app

SkygearIO 387 May 19, 2021
Personal CRM. Remember everything about your friends, family and business relationships.

Personal Relationship Manager Monica is a great open source personal relationship management system. Introduction Purpose Features Who is it for? What

Monica 12.9k Jun 6, 2021
Open source API management platform

About Fusio is an open source API management platform which helps to build and manage REST APIs. Fusio provides all tools to quickly build an API from

Apioo 970 Jun 5, 2021
Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player ( Windows / Mac / Linux ) A Butter-Project Fork

Popcorn Time A multi-platform, free software BitTorrent client that includes an integrated media player. Visit the project's website at popcorntime.ap

Popcorn Software 6k Jun 4, 2021
Multi-platform app that allows your devices to communicate

KDE Connect - desktop app KDE Connect is a multi-platform app that allows your devices to communicate (eg: your phone and your computer). (Some) Featu

KDE GitHub Mirror 1.1k Jun 7, 2021
🎧 Kaku is a highly integrated music player supports different online platform like YouTube, SoundCloud, Vimeo and more. Available on Mac, Windows and Linux.

Kaku Kaku is a highly integrated music player that supports different online platforms like YouTube, SoundCloud, Vimeo and more. Available on Windows,

Chia-Lung Chen 1k Jun 2, 2021
Open source back-end server for web, mobile and IoT. The backend for busy developers. (self-hosted or hosted)

A scalable, multitenant backend for the cloud. Para is a scalable, multitenant backend server/framework for object persistence and retrieval. It helps

Erudika 395 May 26, 2021
visualCaptcha's Main Repo. This is a collection of all the different versions/repos of visualCaptcha.

visualCaptcha Please note visualCaptcha is no longer actively developed. It still works and should continue to, but it won't be improved by the initia

null 409 May 12, 2021
Self-hosted VirusTotal / MetaDefender wannabe with API, demo UI and Scanners running in Docker.

MalwareMultiScan Self-hosted VirusTotal / OPSWAT MetaDefender wannabe API for scanning URLs and files by multiple antivirus solutions. IMPORTANT: vers

Volodymyr Smirnov 233 Jun 6, 2021
A cross-platform tool for optimizing PNG and JPG files.

Made by @kilianvalkhof Other projects: ?? Polypane - Develop responsive websites and apps twice as fast on multiple screens at once ??️ Superposition

Kilian Valkhof 620 Jun 1, 2021
Flash OS images to SD cards & USB drives, safely and easily.

Etcher Flash OS images to SD cards & USB drives, safely and easily. Etcher is a powerful OS image flasher built with web technologies to ensure flashi

balena 20.6k Jun 6, 2021