Update FUTO Keyboard authored by Aleksandras Kostarevas's avatar Aleksandras Kostarevas
FUTO Keyboard is a keyboard being developed, forked from the [AOSP keyboard](https://android.googlesource.com/platform/packages/inputmethods/LatinIME/). FUTO Keyboard is a keyboard being developed, forked from the [AOSP keyboard](https://android.googlesource.com/platform/packages/inputmethods/LatinIME/).
The goal is to create a good, customizable keyboard that doesn't sacrifice on privacy or freedoms The goal is to create a good, customizable keyboard that doesn't sacrifice on privacy or freedoms.
If you're testing this, please join either the [Discord server](https://keyboard.futo.org/discord) or the [FUTO chat](https://chat.futo.org/). Your feedback is valuable during this testing period! If you're testing this, please join either the [Discord server](https://keyboard.futo.org/discord) or the [FUTO chat](https://chat.futo.org/). Your feedback is valuable during this testing period!
Current features: # Current features
* Transformer-based predictions and autocorrect (using llama.cpp)
* * This may run slow on lower-end devices, you can turn it off in predictive text settings
* * Model management menu
* Action bar
* * Settings action
* * Undo/redo/paste actions (sends ctrl+z, ctrl+y, ctrl+v respectively)
* * Text editor action
* * Theme action
* * Voice input action
* * Emoji action
* Scrolling emoji menu, with modern emoji, categories and recent
* Theming with dynamic colors or a few preset themes, and togglable key borders
* Integrated voice input (using whisper.cpp and [faster models](https://github.com/ggerganov/whisper.cpp/issues/1951))
* Swipe the spacebar to move cursor, swipe the delete key to delete
* System personal dictionary gets prompted to transformer model and voice input
* Emoji suggestions (keyword matching)
* Long-press suggestions to blacklist them
* Custom dictionaries and voice input models can be imported for other language support
* No features require the app to access network except the crash reporter and updater. The ultimate goal is for the app to not have network permission whatsoever
* Basic swipe typing
* Number row toggle and resizing height
* Ability to add different layouts (most languages only have 1 layout currently)
Current limitations:
* Languages other than English are not well supported
* Model finetuning is implemented and enableable, but needs more evaluations and tuning
* Emoji menu lacks a search
## Roadmap ## Transformer-based predictions and autocorrect
Short-term: This is quite experimental and may not run well on low end devices. If this is the case, you can turn it off in the predictive text settings. It also only works for English currently.
* Stability improvements, bug fixes, quality of life improvements
* F-Droid publishing The current methodology is documented here: https://gitlab.futo.org/alex/keyboard-wiki/-/wikis/Keyboard-LM-docs. We're still experimenting with different ways of incorporating neural networks to improve suggestions and autocorrect, and we may have an entirely different system in the near future.
* One handed mode
Fine-tuning the model is also supported, but this is disabled by default as it may be unstable or ineffective.
## Integrated voice input
No external app is necessary in order to use voice input. To use the integrated voice input, make sure it's not disabled in the keyboard settings, as during setup it's possible to disable it.
The voice input runs entirely offline and on-device, just like the rest of the keyboard.
You can download and import different models from https://keyboard.futo.org/voice-input-models
Technically you can import any whisper.cpp compatible model, but they may exhibit endless text repetition as we use the `audio_ctx` parameter extensively, which requires finetuning with the ACFT method as documented here: https://github.com/futo-org/whisper-acft
Personal dictionary for the voice input is extracted from your system personal dictionary. However, due to context size limits, if too many words are present then only a subset of them will be included. We will add better UI for this to make it clear which words are included.
If you have a Bluetooth headset connected, you can toggle it by tapping on the Bluetooth icon on the recording menu.
## Action bar
The suggestions bar above the keyboard has an arrow that expands into action icons. There's a few actions at the moment:
* Emoji
* Themes
* Clipboard manager
* Text editor
* Voice input
* Undo/redo/paste (these send CTRL+Z, CTRL+Y and CTRL+V respectively)
* Settings shortcut
Some of these actions take up the entire window. When this is the case, you can pop the action above the keyboard with the arrow in the top right.
You can also drag the actions around by long-tapping and dragging.
## Emoji menu
This emoji menu is entirely scrollable, contains modern emoji and skintones. There currently isn't a search, but if you type an emoji name (e.g. "joy"), the suggestions bar will suggest the emoji for quick insertion.
## Theming
A few preset themes are included, and you can also toggle key borders. In the theming menu you'll also find the sliders for adjusting keyboard height and offset.
We plan to add full theming and customization in the future.
## Quick shortcuts
You can swipe the spacebar to move the cursor, and swipe the delete key to delete multiple characters.
If you don't want to see a suggestion again, you can blacklist it by long-pressing on it. Note that blacklisting the rightmost suggestion (what you typed) has no effect.
## Custom dictionary support
You can import any AOSP compatible dictionaries. This may be a necessity for some languages, as the app does not come with a built-in dictionary for many languages.
## Basic swipe typing
Basic swipe typing is supported, although the algorithm is not very well-tuned currently. We will be experimenting with ways to improve it.
# Current gotchas
The keyboard is not direct boot aware. If you have a text password, you will need a different keyboard app installed for entering the password on first unlock after reboot.
There is no one-handed mode or split/floating layout for landscape/tablets.
## Roadmap
Short to mid term: Short to mid term:
* Improved onboarding, explaining the various features * Stability improvements, bug fixes, quality of life improvements
* Automatic personal dictionary, take common user words and feed them to models automatically so that the user doesn't have to manually add them * Language screen improvements
* Improve the built-in dictionary by removing some entries that are potentially annoying (common misspellings of common words that the dictionary contains as a capitalized acronym, e.g. jts becomes JTS instead of it's) * Improved action UI (customizable, draggable, settings for clipboard manager)
* General improved UX
* Emoji search
Mid-term: Mid-term:
* The actions need to be customizable, draggable, removable, instead of being hardcoded into their places * Improved modularity with keyboard layouts
* Improved modularity, possibly allow importing keyboard layouts, dictionaries and models all as one file * Improvements for other languages wherever practical
* Improve emoji menu with search or other features people want
* Model reworking * Model reworking
Long-term: Long-term:
* Fully customizable theming (crazy ideas for this) * Fully customizable theming
* More advanced swipe typing * More advanced swipe typing
Missing something? Let us know in the Discord or FUTO Chat! Missing something? Let us know in the Discord or FUTO Chat!
\ No newline at end of file