22 Dec 2024
Planet KDE | English
This Week in KDE Apps: Search in Merkuro Mail, Tokodon For Android, LabPlot new documentation and more
Welcome to a new issue of "This Week in KDE Apps"! Every week we cover as much as possible of what's happening in the world of KDE apps.
AudioTube YouTube Music app
AudioTube now shows synchronized lyrics provided by LRCLIB. This automatically falls back to normal lyrics if synced lyrics are not available. (Kavinu Nethsara, 25.04.0. Link)
Dolphin Manage your files
Quickly renaming multiple files by switching between them with the keyboard arrow keys now correctly starts a renaming of the next file even if a sorting change moved it. (Ilia Kats, 25.04.0. Link)
Fixed a couple of regressions in the 24.12.0 release. (Akseli Lahtinen, 24.12.1. Link 1, link 2, link 3)
KDE Itinerary Digital travel assistant
Improved the touch targets of the buttons in the bottom drawer which appears on mobile. (Carl Schwan, 24.05.0. Link)
Akonadi Background service for KDE PIM apps
Improve the stability of changing tags. Now deleting a tag will properly remove it from all items. (Daniel Vrátil, 24.12.1. Link 1 and link 2)
KMail A feature-rich email application
The tooltip of your folder in KMail will now show the absolute space quota in bytes. (Fabian Vogt, 25.04.0. Link)
KMyMoney Personal finance manager based on double-entry bookkeeping
An initial port of KMyMoney for Qt6 was merged. (Ralf Habacker. Link)
Krita Digital Painting, Creative Freedom
Krita has a new plugin for fast sketching. You can find more about this on their blog post.
KTorrent BitTorrent Client
Added the support for getting IPv6 peers from peer exchange. (Jack Hill, 25.04.0. Link)
LabPlot Interactive Data Visualization and Analysis
We now show more plot types in the "Add new plot" context menu. (Alexander Senke. Link)
LabPlot has announced a new dedicated user manual page.
Okular View and annotate documents
We improved how we are displaying the signature and certificate details in the mobile version of Okular. (Carl Schwan, 25.04.0. Link)
When selecting a certificate to use when digitally signing a PDF with the GPG backend, the fingerprints are rendered more nicely. (Sune Vuorela, 25.04.0. Link)
It's now possible to choose a custom default zoom level in Okular. (Wladimir Leuschner, 25.04.0. Link)
Merkuro Mail Read your emails with speed and ease
Merkuro Mail now lets you search across your emails with a full text search. (Carl Schwan, 25.04.0. Link)
Additionally, the Merkuro Mail sidebar will now remember which folders were collapsed or expanded as well as the last selected folder across application restarts. (Carl Schwan, 25.04.0. Link)
PowerPlant Keep your plants alive
We started the "KDE Review" process for PowerPlant, so expect a release in the comming weeks.
We added support for Windows and Android. (Laurent Montel, 1.0.0. Link 1, link 2 and link 3)
Ruqola Rocket Chat Client
Ruqola 2.4.0 is out. You can now mute/unmute other users, cleanup the room history and more. Read the full announcement.
Tokodon Browse the Fediverse
This week, Joshua spent some time improving Tokodon for mobile and in particular for Android. This includes performance optimization, adding missing icons and some mobile specific user experience improvements. (Joshua Goins, 25.04.0. Link 1, link 2 and link 3). A few more improvements for Android, like proper push notifications via unified push, are in the work.
Joshua also improved the draft and scheduled post features, allowing now to discard scheduled posts and drafts and showing when a draft was created. (Joshua Goins, 25.04.0. Link)
We also added a keyboard shortcut configuration page in Tokodon settings. (Joshua Goins and Carl Schwan, 25.04.0. Link 1 and link 2)
Finally, we created a new server information page with the server rules and made the existing announcements page a subpage of it. Speaking of announcements, we added support for the announcement's emoji reactions. (Joshua Goins, 25.04.0. Link)
WashiPad Minimalist Sketchnoting Application
WashiPad was ported to Kirigami instead of using its own custom QtQuick components. (Carl Schwan. Link)
…And Everything Else
This blog only covers the tip of the iceberg! If you're hungry for more, check out Nate's blog about Plasma and be sure not to miss his This Week in Plasma series, where every Saturday he covers all the work being put into KDE's Plasma desktop environment.
For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.
Get Involved
The KDE organization has become important in the world, and your time and contributions have helped us get there. As we grow, we're going to need your support for KDE to become sustainable.
You can help KDE by becoming an active community member and getting involved. Each contributor makes a huge difference in KDE - you are not a number or a cog in a machine! You don't have to be a programmer either. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.
You can also help us by donating. Any monetary contribution, however small, will help us cover operational costs, salaries, travel expenses for contributors and in general just keep KDE bringing Free Software to the world.
To get your application mentioned here, please ping us in invent or in Matrix.
22 Dec 2024 12:50pm GMT
KDE @ 38C3
In less than a week from now KDE will again be present at the 38th Chaos Communication Congress (38C3) in Hamburg, Germany.
Chaos Communication Congress
Even bigger than FOSDEM and much wider in scope many impactful collaborations during the past couple of years can be traced back to contacts made at Congress. Be it KDE Eco, joint projects with the Open Transport community, the weather and emergency alert aggregation server or indoor routing to just name a few.
KDE Assembly
At last year's edition, 37C3, we had a KDE assembly (think "stand" or "booth" at other events) for the first time. That not only helps people to find us, it's also very useful anchor point for the growing KDE delegation.
This year we'll further improve on that, by being there with even more people and by having the KDE assembly as part of the Bits & Bäume Habitat. That not only comes with some shared infrastructure like a workshop space but also puts us next to some of our friends, like OSM, FSFE and Wikimedia.
We'll be in the foyer on floor level 1 next to the escalators (map).
More of our friends and partners have their own assemblies elsewhere as well, such as Matrix and Linux on Mobile.
A special thanks goes again to the nice people at CCC-P and WMDE who helped us get tickets!
Talks & Workshops
We'll also have three talks by KDE people, all of them featuring collaborations beyond the classical KDE scope.
- Jonah will talk about the free and open public transport routing service Transitous on day 2 at 12:00 on stage YELL.
- Nucleus from FOSSWarn and I will present the joint work on emergency and weather alert aggregation and distribution infrastructure, on day 4 at 16:40 on stage HUFF.
- Joseph's talk Opt Green: Coordinating a Windows 10-to-Linux upcycling campaign across Free Software communities worldwide will be on day 2 at 11:00 on stage YELL.
There will also be two workshops chaired by Jospeh on the latter subject:
- Upcycling old laptops with Linux for kids, on day 3 from 12:00 to 15:00 in Saal 5.
- A BoF on Coordinating a Windows 10-to-Linux upcycling campaign, on day 4 from 13:00 to 15:00 in the Bits & Bäume workshop area.
Make sure to monitor the schedule for last-minute changes though.
See you in Hamburg!
Looking forward to many interesting discussions, if you are at 38C3 as well make sure to come by the KDE assembly!
22 Dec 2024 7:00am GMT
21 Dec 2024
Planet KDE | English
This Week in Plasma: end-of-year bug fixing
Lots of KDE folks are winding down for well-deserved end-of-year breaks, but that didn't stop a bunch of people from landing some awesome changes anyway! This will be a short one, and I may skip next week as many of us are going to be focusing on family time. But in the meantime, check out what we have here:
Notable UI Improvements
When applying screen settings fails due to a graphics driver issue, the relevant page in System Settings now tells you about it, instead of failing silently. (Xaver Hugl, 6.3.0. Link)
Added a new Breeze open-link
icon with the typical "arrow pointing out of the corner of a square" appearance, which should start showing up in places where web URLs are opened from things that don't clearly look like blue clickable links. (Carl Schwan, Frameworks 6.10. Link)
Notable Bug Fixes
Fixed one of the most common recent Powerdevil crashes. (Jakob Petsovits, 6.2.5. Link)
Recording a specific window in Spectacle and OBS now produces a recording with the correct scale when using any screen scaling (Xaver Hugl, 6.2.5. Link)
When using a WireGuard VPN, the "Persistent keepalive" setting now works. (Adrian Thiele, 6.2.5. Link)
Implemented multiple fixes and improvements for screen brightness and dimming. (Jakob Petsovits, 6.3.0. Link 1, link 2, link 3, and link 4)
Auto-updates in Discover now work again! (Harald Sitter, 6.3.0. Link)
Vastly improved game controller joystick support in Plasma, fixing many weird and random-seeming bugs. (Arthur Kasimov, 6.3.0. Link)
For printers that report per-color ink levels, System Settings' Printers page now displays the ink level visualization in the actual ink colors again. (Kai Uwe Broulik, 6.3.0. Link)
Pager widgets on very thin floating panels are now clickable in all the places they're supposed to be clickable. (Niccolò Venerandi, 6.3.0. Link)
Wallpapers with very very special EXIF metadata can no longer generate text labels that escape from their intended boundaries on Plasma's various wallpaper chooser views. (Jonathan Riddell and Nate Graham, Frameworks 6.10. Link)
Fixed one of the most common Qt crashes affecting Plasma and KDE apps. (Fabian Kosmale, Qt 6.8.2. Link)
Other bug information of note:
- 2 Very high priority Plasma bugs (same as last week). Current list of bugs
- 34 15-minute Plasma bugs (up from 32 last week). Current list of bugs
- 125 KDE bugs of all kinds fixed over the last week. Full list of bugs
Notable in Performance & Technical
Significantly reduced the CPU usage of System Monitor during the time after you open the app but before you visit to the History page. More CPU usage fixes are in the pipeline, too! (Arjen Hiemstra, 6.2.5. Link)
Plasma Browser Integration now works for the Flatpak-packaged version of Firefox. (Harald Sitter, 6.3.0. Link)
How You Can Help
KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.
You can help KDE by becoming an active community member and getting involved somehow. Each contributor makes a huge difference in KDE - you are not a number or a cog in a machine!
You don't have to be a programmer, either. Many other opportunities exist:
- Triage and confirm bug reports, maybe even identify their root cause
- Contribute designs for wallpapers, icons, and app interfaces
- Design and maintain websites
- Translate user interface text items into your own language
- Promote KDE in your local community
- …And a ton more things!
You can also help us by donating to our yearly fundraiser! Any monetary contribution - however small - will help us cover operational costs, salaries, travel expenses for contributors, and in general just keep KDE bringing Free Software to the world.
To get a new Plasma feature or a bugfix mentioned here, feel free to push a commit to the relevant merge request on invent.kde.org.
21 Dec 2024 4:00am GMT
20 Dec 2024
Planet KDE | English
Old New Blog
I started this blog back in 2010. Back then I used Wordpress and it worked reasonably well. In 2018 I decided to switch to a static generated site, mostly because the Wordpress blog felt slow to load and it was hassle to maintain. Back then the go-to static site generator was Jekyll, so I went with that. Lately I've been struggling with it though, because in order to keep all the plugins working, I needed to use older versions or Ruby, which meant I had to use Docker to build the blog locally. Overall, it felt like too much work and for the past few years I've been eyeing Hugo - more so since Carl and others migrated most of KDE websites to it. I mean, if it's good enough for KDE, it's good enough for me, right?
So this year I finally got around to do the switch. I migrated all the content from Jekyll. This time I actually went through every single post, converted it to proper Markdown, fixed formatting, images etc. It was a nice trip down the memory lane, reading all the old posts, remembering all the sprints and Akademies… I also took the opportunity to clean up the tags and categories, so that they are more consistent and useful.
Finally, I have rewritten the theme - I originally ported the template from Wordpress to Jekyll, but it was a bit of a mess, responsivity was "hacked" in via JavaScript. Web development (and my skills) has come a long way since then, so I was able to leverage more modern CSS and HTML features to make the site look the same, but be more responsive and accessible.
Comments
When I switched from Wordpress to Jekyll, I was looking for a way to preserve comments. I found Isso, which is basically a small CGI server backed with SQLite that you can run on the server and embed it into your static website through JavaScript. It could also natively import comments from Wordpress, so that's the main reason why I went with it, I think. Isso was not perfect (although the development has picked up again in the past few years) and it kept breaking for me. I think it haven't worked for the past few years on my blog and I just couldn't be bothered to fix it. So, I decided to ditch it in favor of another solution…
I wanted to keep the comments for old posts by generating them as static HTML from the Isso's SQLite database, alas the database file was empty. Looks like I lost all comments at some point in 2022. It sucks, but I guess it's not the end of the world. Due to the nature of how Isso worked, not even the Wayback Machine was able to archive the comments, so I guess they are lost forever…
For this new blog, I decided to use Carl's approach with embedding replies to a Mastodon. I think it's a neat idea and it's probably the most reliable solution for comments on a static blog (that I don't have to pay for, host myself or deal with privacy concerns or advertising).
I have some more ideas regarding the comments system, but that's for another post ;-) Hopefully I'll get to blog more often now that I have a shiny new blog!
Happy Holidays 🎄
Enjoy the holidays and see you in 2025 🥳!
20 Dec 2024 3:55pm GMT
Web Review, Week 2024-51
Let's go for my web review for the week 2024-51.
Advice for First-Time Open Source Contributors
Tags: tech, foss, community
Definitely a good list of advices for first time contributors.
https://www.yegor256.com/2024/12/15/open-source-beginner-advice.html
Europe's Starlink competitor is go - The Verge
Tags: tech, internet, geospatial
IRIS² is the friendly reminder that tens of thousand of low orbit satellites is not the only design… and likely not the smartest one.
https://www.theverge.com/2024/12/16/24322358/iris2-starlink-rival-europe-date-cost
Buying a TV in 2025? Expect lower prices, more ads, and an OS war. - Ars Technica
Tags: tech, tv, attention-economy, advertisement
The TV market is really turning into an anti-consumer one.
Re: Re: Bluesky and Decentralization
Tags: tech, social-media, bluesky, fediverse, architecture
Yet another long piece in this interesting and in depth conversation about Bluesky. The fact that it stays civil is called out explicitly and this is appreciated.
https://dustycloud.org/blog/re-re-bluesky-decentralization/
Bluesky at a crossroads as users petition to ban Jesse Singal over anti-trans views, harassment
Tags: tech, social-media, moderation, bluesky, politics
Bluesky is already hitting growth pains regarding moderation and its guidelines. By being centralized it is also more at risk within the current US political climate.
Yes, That Viral LinkedIn Post You Read Was Probably AI-Generated
Tags: tech, social-media, linkedin, ai, machine-learning, gpt, fake
Kind of unsurprising right? I mean LinkedIn is clearly a deformed version of reality where people write like corporate drones most of the time. It was only a matter of time until robot generated content would be prevalent there, it's just harder to spot since even humans aren't behaving genuinely there.
https://www.wired.com/story/linkedin-ai-generated-influencers/
AI and Internet Hygiene - by kate wagner - the late review
Tags: tech, internet, web, ai, machine-learning, gpt, fake, knowledge
Indeed, we'll have to relearn "internet hygiene", it is changing quickly now that we prematurely unleashed LLM content on the open web.
https://www.late-review.com/p/ai-and-internet-hygiene
Is AI progress slowing down?
Tags: tech, ai, machine-learning, gpt, criticism
A good balanced post on the topic. Maybe we'll finally see a resurgence of real research innovation and not just stupid scaling at all costs. Reliability will stay the important factor of course and this one is still hard to crack.
https://www.aisnakeoil.com/p/is-ai-progress-slowing-down
Analog AI Startup Aims to Lower the Power of Gen AI - IEEE Spectrum
Tags: tech, analogic, ai, machine-learning, neural-networks, hardware
It looks like analog chips for neural network workloads are on the verge of finally becoming reality. This would reduce consumption by an order of magnitude and hopefully more later on. Very early days for this new attempt, let's see if it holds its promises.
https://spectrum.ieee.org/analog-ai-2669898661
When should we require that firmware be free?
Tags: tech, hardware, foss
A good question, it is somewhat of a grey area at times. We need to come up with better answers.
https://mjg59.dreamwidth.org/70895.html
In search of a faster SQLite
Tags: tech, databases, sqlite, asynchronous, rust, system, filesystem
Interesting explanation of a research paper exploring the possibility of a faster SQLite by focusing on async I/O.
https://avi.im/blag/2024/faster-sqlite/
Java in the Small
Tags: tech, java, tools
I wouldn't use it as much as advocated in this article, still this is a good reminder that Java became way more approachable for smaller programs in recent years.
https://horstmann.com/unblog/2024-12-11/index.html
How do you do, fellow web developers? A growing disconnect.
Tags: tech, career, complexity, learning
It tries hard at not being a "get off my lawn" post. It clearly points some kind of disconnects though. They're real. I guess it's to be expected with the breadth of our industry. There are so many abstractions piled onto each other that it's difficult to explore them all.
https://rakhim.exotext.com/web-developers-a-growing-disconnect
Visitor Pattern Considered Pointless - Use Pattern Switches Instead
Tags: tech, design, pattern, java, type-systems
One of my favorite of the traditional design patterns in object oriented languages. Now obviously when you get pattern matching in your language… you don't need the visitor pattern anymore.
https://nipafx.dev/java-visitor-pattern-pointless/
Estimating projects sells them short (and that's okay)
Tags: tech, project-management, estimates
I don't exactly use this approach to factor in the uncertainty… but I guess there's something to be made out of this proposal. I'll keep it in mind for my next project.
https://ntietz.com/blog/estimating-projects-short-sale/
The One Way I Know a Team is in Trouble
Tags: leadership, management, communication
Interesting ideas about leadership lacking in impact. Indeed it should be seen as a communal function, it's not about individuals leading each in their own directions. Think about it in a systemic way.
https://suzansfieldnotes.substack.com/p/the-one-way-i-know-a-team-is-in-trouble
Seven quiet breakthroughs for climate and nature in 2024 you might have missed
Tags: ecology, politics, law, energy
This is not all bad news, there are a few things to rejoice about.
Bye for now!
20 Dec 2024 12:32pm GMT
New LabPlot User Documentation
In recent weeks we have been working on transferring LabPlot's documentation to a new format.
We decided to move the documentation from the DocBook and MediaWiki format to the Sphinx/reStrcutredText framework. In our perception Sphinx offers a user-friendly and flexible way to create and manage documentation. Easy math typing and code formatting also come along. Additionally, Sphinx supports basic syntax checks, and modern documentation practices, such as versioning and integration with various output formats like HTML, PDF and ePub.
The new user's manual is available on a dedicated page: https://docs.labplot.org. Please check it out and let us know what you think.
The manual still needs to be supplemented with new content, so we encourage you to contribute to the documentation, e.g. by fixing and adding new sections, updating images, as collaborative efforts can lead to a more comprehensive resource for everyone. Please check the Git repository dedicated to the documentation to find more details on how to help make it better.
20 Dec 2024 7:37am GMT
Digging into the Fast Sketch Cleanup Plugin for Krita
Fast Sketch Cleanup plugin
Introduction
We started this project with the intent of providing users a tool helpful in inking sketches. It is based on a research article by Simo & Sierra published in 2016, and it uses neural networks (now commonly called simply AI) to work. The tool has been developed in partnership with Intel and it's still considered experimental, but you can already use it and see the results.
In the section below there are some real life examples of use cases and the results from the plugin. The results vary, but it can be used for extracting faint pencil sketches from photos, cleaning up lines, and comic book inking.
Regarding the model used in the tool, we trained it ourselves. All the data in the dataset is donated from people who sent their pictures to us themselves and agreed on this specific use case. We haven't used any other data. Moreover, when you use the plugin, it processes locally on your machine, it doesn't require any internet connection, doesn't connect to any server, and no account is required either. Currently it works only on Windows and Linux, but we'll work on making it available on MacOS as well.
Use cases
It averages the lines into one line and creates strong black lines, but the end result can be blurry or uneven. In many cases however it still works better than just using a Levels filter (for example in extracting the pencil sketch). it might be a good idea to use Levels filter after using the plugin to reduce the blurriness. Since the plugin works best with white canvas and grey-black lines, in case of photographed pencil sketches or very light sketch lines, it might be a good idea to use Levels also before using the plugin.
Extracting photographed pencil sketch
This is the result of the standard procedure of using Levels filter on a sketch to extract the lines (which results in a part of the image getting the shadow):
sketch_girl_original_procedure_comparison_small1843×1209 165 KB
The sketch was drawn by Tiar (link to KA profile)
This is the procedure using the plugin with SketchyModel (Levels → plugin → Levels):
sketch_girl_new_procedure_comparison_small1843×2419 267 KB
Comparison (for black lines):
sketch_girl_procedures_comparison_small1920×1260 215 KB
Another possible result is to just stop at the plugin without forcing black lines using Levels, which results in a nicer, more pencil-y look while keeping the lower part of the page still blank:
sketch_girl_after_plugin_small1536×2016 161 KB
Comic book-like inking
Picture of a man made by BeARToys
Here in the pictures above you can see the comic book style inking. The result, which is a bit blurry compared to the original, can be further enhanced by using a Sharpen filter. The dragon was sketched by David Revoy (CC-BY 4.0).
Cleaning up lines
Examples of sketches I made and the result of the plugin, showing the strong and weak points of the plugin. All of the pictures below were made using the SketchyModel.
flower_001_detail681×456 22.1 KB
portrait_man_portrait_2_comparison_2_small1305×505 139 KB
portrait_man_portrait_2_detail646×1023 26.6 KB
All of the pictures above painted by Tiar (link to KA profile)
On the pictures below, on the scales of the fish, you can see how the model discriminates lighter lines and enhances the stronger lines, making the scales more pronounced. In theory you could do that using the Levels filter, but in practice the results would be worse, because the model takes into account local strength of the line.
fish_square_sketchy_comparison_small1920×968 156 KB
Picture of the fish made by Christine Garner (link to portfolio)
How to use it in Krita
To use the Fast Sketch Cleanup plugin in Krita, do the following:
-
Prepare Krita:
-
On Windows:
-
Either in one package: download Krita 5.3.0-prealpha with Fast Sketch Cleanup plugin already included: https://download.kde.org/unstable/krita/5.3.0-prealpha-fast-sketch/krita-x64-5.3.0-prealpha-cdac9c31.zip
-
Or separately:
- Download portable version of Krita 5.2.6 (or similar version - should still work)
- Download separately the Fast Sketch Cleanup plugin here: https://download.kde.org/stable/krita/FastSketchPlugin-1.0.2/FastSketchPlugin1.0.2.zip
- Unzip the file into krita-5.2.6/ folder (keeping the folder structure).
- Then go to Settings → Configure Krita → Python Plugin Manager, enable Fast Sketch Cleanup plugin, and restart Krita.
-
-
On Linux:
- Download the appimage: https://download.kde.org/unstable/krita/5.3.0-prealpha-fast-sketch/krita-5.3.0-prealpha-cdac9c31c9-x86_64.AppImage
-
-
(Optional) Install NPU drivers if you have NPU on your device (practically only necessary on Linux, if you have a very new Intel CPU): Configurations for Intel® NPU with OpenVINO™ - OpenVINO™ documentation (note: you can still run the plugin on CPU or GPU, it doesn't require NPU)
-
Run the plugin:
- Open or create a white canvas with grey-white strokes (note that the plugin will take the current projection of the canvas, not the current layer).
- Go to Tools → Fast Sketch Cleanup
- Select the model. Advanced Options will be automatically selected for you.
- Wait until it finishes processing (the dialog will close automatically then).
- See that it created a new layer with the result.
Advice for processing
Currently it's better to just use the SketchyModel.xml, in most cases it works significantly better than the SmoothModel.xml.
You need to make sure the background is pretty bright, and the lines you want to keep in the result are relatively dark (either somewhat dark grey or black; light grey might result in many missed lines). It might be a good idea to use a filter like Levels beforehand.
After processing, you might want to enhance the results with either Levels filter or Sharpen filter, depending on your results.
Technology & Science behind it
Unique requirements
First unique requirement was that it had to work on canvases of all sizes. That meant that the network couldn't have any dense/fully or densely connected linear layers that are very common in most of the image processing neural networks (which require input of a specific size and will produce different results for the same pixel depending on its location), only convolutions or pooling or similar layers that were producing the same results for every pixel of the canvas, no matter the location. Fortunately, the Simo & Sierra paper published in 2016 described a network just like that.
Another challenge was that we couldn't really use the model they created, since it wasn't compatible with Krita's license, and we couldn't even really use the exact model type they described, because one of those model files would be nearly as big as Krita, and the training would take a really long time. We needed something that would work just as well if not better, but small enough that it can be added to Krita without making it twice as big. (In theory, we could do like some other companies and make the processing happen on some kind of a server, but that wasn't what we wanted. And even if it resolved some of our issues, it would provide plenty of its own major challenges. Also, we wanted for our users to be able to use it locally without a reliance on our servers and the internet). Moreover, the model had to be reasonably fast and also modest in regards to RAM/VRAM consumption.
Moreover, we didn't have any dataset we could use. Simo & Sierra used a dataset, where the expected images were all drawn using a constant line width and transparency, which meant that the results of the training had those qualities too. We wanted something that looked a bit more hand-drawn, with varying line-width or semi-transparent ends of the lines, so our dataset had to contain those kinds of images. Since we haven't been aware of any datasets that would match our requirements regarding the license and the data gathering process, we asked our own community for help, here you can read the Krita Artists thread about it: https://krita-artists.org/t/call-for-donation-of-artworks-for-the-fast-line-art-project/96401 .
The link to our full dataset can be found below in the Dataset section.
Model architecture
All main layers are either convolutional or deconvolutional (at the end of the model). After every (de)convolutional layer except for the last one there is a ReLu activation layer, and after the last convolution there is a sigmoid activation layer.
Python packages used: Pillow, Numpy, PyTorch and Openvino
Numpy is a standard library for all kinds of arrays and advanced array operations and we used Pillow for reading images and converting them into numpy arrays and back. For training, we used PyTorch, while in the Krita plugin we used Openvino for inference (processing through the network).
Using NPU for inference
This table shows the result of benchmark_app, which is a tool that's provided with Intel's python package openvino. It tests the model in isolation on random data. As you can see, the NPU was several times faster than the CPU on the same machine.
On the other hand, introducing NPU added a challenge: the only models that can run on NPU are static models, meaning the input size is known at the time of saving the model to file. To solve this, the plugin first cuts the canvas into smaller parts of a specified size (which depends on the model file), and then proceeds to process all of them and finally stitch the results together. To avoid artifacts on the areas next to the stitching, all of the parts are cut with a little bit of a margin and the margin is later cut off.
How to train your own model
To train your own model, you'll need some technical skills, pairs of pictures (input and the expected output) and a powerful computer. You might also need quite a lot of space on your hard drive, though you can just remove unnecessary older models if you start having issues with lack of space.
Drivers & preparation
You'll need to install Python3 and the following packages: Pillow, openvino, numpy, torch. For quantization of the model you will also need nncf and sklearn. If I missed anything, it will complain, so just install those packages it mentions too.
If you're on Windows, you probably have drivers for NPU and dedicated GPU. On Linux, you might need to install NPU drivers before you'll be able to use it: https://docs.openvino.ai/2024/get-started/configurations/configurations-intel-npu.html .
Moreover if you want to use iGPU for training (which might still be significantly faster than on CPU), you'll probably need to use something like IPEX which allows PyTorch to use an "XPU" device, which is just your iGPU. It's not tested or recommended since I personally haven't been able to use it because my Python version was higher than the instruction expects, but the instruction is here: https://pytorch-extension.intel.com/installation?platform=gpu&version=v2.5.10%2Bxpu .
The sanity check for the installation is as follows:
python3 -c "import torch; import intel_extension_for_pytorch as ipex; print(f'Packages versions:'); print(f'Torch version: {torch.__version__}'); print(f'IPEX version: {ipex.__version__}'); print(f'Devices:'); print(f'Torch XPU device count: {torch.xpu.device_count()}'); [print(f'[Device {i}]: {torch.xpu.get_device_properties(i)}') for i in range(torch.xpu.device_count())];"
It should show more than 0 devices with some basic properties.
If you manage to get XPU device working on your machine, you'll still need to edit the training scripts so they'll able to use it: https://intel.github.io/intel-extension-for-pytorch/xpu/latest/tutorials/getting_started.html (most probably you'll just need to add this line:
import intel_extension_for_pytorch as ipex
to the script on the very top, just underneath "import torch", and use "xpu" as the device name when invoking the script, and it should work. But as I said, the scripts hasn't been tested for that.
Dataset
You'll need some pictures to be able to train your model. The pictures must be in pairs, every pair must contain a sketch (input) and a lineart picture (expected output). The better quality of the dataset, the better the results.
Before training, it's best if you augment the data: that means the pictures are rotated, scaled up or down, and mirrored. Currently the data augmentation script also performs an inversion with the assumption that training on inverted pictures would bring the results faster (considering that black means zero means no signal, and we'd like that to be the background, so the models learn the lines, not the background around lines).
How to use the data augmentation script is explained below in the detailed instruction for the training part.
Here's the dataset that we used (please read the license carefully if you want to use it): https://files.kde.org/krita/extras/FastSketchCleanupPluginKritaDataset.zip
Choice of model and other parameters
For quick results, use tooSmallConv; if you have more time and resources, typicalDeep might be a better idea. If you have access to a powerful GPU machine, you might try original or originalSmaller, which represent the original description of the model from the SIGGRAPH article by Simo-Sierra 2016, and a smaller version of it.
Use adadelta as the optimizer.
You can use either blackWhite or mse as the loss function; mse is classic, but blackWhite might lead to faster results since it lowers the relative error on the fully white or fully black areas (based on the expected output picture).
Training
-
Clone the repository at https://invent.kde.org/tymond/fast-line-art (at 33869b6)
git clone https://invent.kde.org/tymond/fast-line-art.git -
Then, prepare the folder:
- Create a new folder for the training.
- In the folder, run:
python3 [repository folder]/spawnExperiment.py --path [path to new folder, either relative or absolute] --note "[your personal note about the experiment]"
-
Prepare data:
- If you have existing augmented dataset, put it all in data/training/ and data/verify/, keeping in mind that paired pictures in ink/ and sketch/ subfolders must have the exact same names (for example if you have sketch.png and ink.png as data, you need to put one in sketch/ as picture.png and another in ink/ as picture.png to be paired).
- If you don't have existing augmented dataset:
- Put all your raw data in data/raw/, keeping in mind that paired pictures should have the exact same names with added prefix either ink_ or sketch_ (for example if you have picture_1.png being the sketch picture and picture_2.png being the ink picture, you need to name them sketch_picture.png and ink_picture.png respectively.)
- Run the data preparer script:
python3 [repository folder]/dataPreparer.py -t taskfile.yml
That will augment the data in the raw directory in order for the training to be more successful.
-
Edit the taskfile.yml file to your liking. The most important parts you want to change are:
- model type - code name for the model type, use tinyTinier, tooSmallConv, typicalDeep or tinyNarrowerShallow
- optimizer - type of optimizer, use adadelta or sgd
- learning rate - learning rate for sgd if in use
- loss function - code name for loss function, use mse for mean squared error or blackWhite for a custom loss function based on mse, but a bit smaller for pixels where the target image pixel value is close to 0.5
-
Run the training code:
python3 [repository folder]/train.py -t taskfile.yml -d "cpu"On Linux, if you want it to run in a background, add "&" at the end. If it runs in a foreground, you can pause the training just by pressing ctrl+C, and if it runs in a background, find a process id (using either "jobs -l" command or "ps aux | grep train.py" command, the first number would be the process id) and kill it using "kill [process id]" command. Your results will still be in the folder, and you'll be able to resume the training using the same command.
-
Convert the model to an openvino model:
python3 [repository folder]/modelConverter.py -s [size of the input, recommended 256] -t [input model name, from pytorch] -o [openvino model name, must end with .xml] -
Place both the .xml and .bin model files in your Krita resource folder (inside pykrita/fast_sketch_cleanup subfolder) alongside other models to use them in the plugin.
20 Dec 2024 12:00am GMT
19 Dec 2024
Planet KDE | English
Kdenlive 24.12.0 released
Under the hood, we've dropped support for Qt5 and now require Qt6, alongside updated dependencies (MLT 7.28 and KF 6.3). This release comes with a lot of code cleanups and refactored Whisper settings. Optimized threading and memory management. Additionally, fail-safe measures have been taken to prevent invalid project profiles and script names.
Subtitles
We've added support for Advanced SubStation Alpha (ASS) subtitles, a widely used text-based format renowned for its flexibility in creating highly styled and customizable subtitles. ASS subtitles support advanced features such as font family, size, and color; text outlines and shadows; alignment and positioning; scaling and rotation; margins and spacing; and effects, including masking and other enhancements. This feature was developed by Chengkun Chen as part of Google Summer of Code (GSOC).
Subtitle Manager
The new subtitle manager is now integrated with style management and has been divided into four sections: Files, Layers and Content, Style, and Info, which correspond to the four main components of ASS subtitles.
Subtitle Style Editor
The new and powerful Subtitle Style Editor allows you to control all the styling capabilities of the ASS format.
Animated Subtitles
The ASS format supports three types of effects: Banner, where the text scrolls sideways across the screen; Scroll, where the text moves vertically; and Karaoke, where each word is highlighted in sync with the audio.
Currently, only the Banner and Scroll effects are accessible through the user interface, but additional styling, including Karaoke effects, can be applied using ASS tags.
Speech-to-Text
We've polished the Speech to Text features ensuring a smoother and more reliable experience. Seamless installation, GPU translation and threading issues have fixed. We've also resolved issues with the display of Vosk, Whisper and Seamless model folder sizes on Windows. Added the ability to update all virtual environment packages have updated to the latest version of Whisper. Lastly, the Whisper settings interface has been refactored.
Effects
With this version, we complete the final task of our fundraiser: builtin effects and a redesigned effects interface. Rendering of keyframe types like Bounce, Circular, and Exponential has been improved, alongside fixes for zone-based effects, rotoscoping lag, shape filter rendering, improved precision for time remapping, motion tracker models and prev/next seeking in monitor. It is also now possible to have single-frame mixes (same track transitions).
Interface redesign
The new Effect Stack redesign enhances usability with clearer organization of keyframeable and non-keyframeable parameters, improved layout consistency, more compact and clean. We've also added info buttons in effect headers for quick access to documentation.
Built-in Effects
To make your workflow much more fluid, the new effects panel gives direct access to effect parameters, allowing to quickly and easily adjust them. Currently built-in effects are Transform and Flip for video clips and Volume for audio clips. Built-in effects can be enabled/disabled in the settings.
New Effects
As usual there is always room for some eye candy, so we've added two color correction effects, HSL Primaries and HSL Range as well as GPS Effects (Images below displaying Distance, Altitude and Speed among many other values).
Other Highlights
- Fix audio capture issues
- Added Shift + Del shortcut to extract clip from timeline
- Fix clip monitor history menu not showing up on audio clips
- Fix spacer tool leaving a few frames after last clip
- Implement resizing multiple timeline items
- Fix Pexels Videos provider
- Fix Alt+click to loop between clips using an effect in project monitor
- Titler: ensure only plain text can be pasted
- Titler: added support for tabulations
- Add Actions to quickly add Marker/Guides in a specific category
Full changelog
- Save extracted frames in project folder is project is supposed to save files in its parent folder. Commit. Fixes bug #496486.
- Fix proxied image messes exif orentation. Commit. Fixes bug #496681.
- Fix audio capture, ensure default monitor scene is active to start recording. Commit. See bug #496263.
- Don't allow question mark in script names (not supported by MLT). Commit. Fixes bug #496763.
- Fix motion tracker effect link to documentation and create models folder in any case to avoid error message. Commit.
- Allow creating 1 frame mixes. Commit.
- Fix resizing mix to 1 frame duration breaking mix position. Commit.
- Move enable builtin effects from asset panel to Kdenlive Settings dialog. Commit.
- Various built in effect fixes on copy effect. Commit.
- Properly display the full log on missing render file. Commit.
- Ensure we display an error if the render job finishes but rendered file does not exist. Commit.
- Don't enable keyframes in timeline if an effect is disabled. Commit.
- Disable keep original size feature as it has issues (causes distortion if another transform is added in timeline). Commit.
- Archiving: don't show two abort buttons. Commit.
- Fix incorrect code change that broke tests. Commit.
- Don't allow creating invalid project profiles with strange pixel aspect ratio. Commit.
- Don't change timeline audio/video targets while dragging. Commit. Fixes bug #496354.
- Minor cleanup, ProjectClip cannot be of type Timeline. Commit.
- Fix title widget incorrectly showing text color as gradient if it was once switched to gradient. Commit.
- Fix wrong HW profile selected when transcoding. Commit.
- Add shortcut to extract clip from timeline. Commit.
- Add the new MLT HSL color correction effects to the correct category. Commit.
- Fix guides not appearing in first timeline of newly created projects. Commit.
- Fix corners effect broken and lag. Commit.
- Fix crash in effectstack. Commit.
- Fix disabled built-in effects incorrectly flagged as non built-in. Commit.
- Fix crash trying to remove keyframes when there are none. Commit. Fixes bug #496391.
- Fix merge error in fix for windows crash in file with missing drive. Commit.
- Fix Clip In Project Bin not opening the item's folder in secondary bins. Commit.
- Fix rotoscoping lag on keyframe change. Commit.
- Fix recent commit breaking tests. Commit.
- Cleanup, fix incorrect invokation of setProducer. Commit.
- Master effects: don't try to refresh both monitors on each effect param change, simply mark the inactive monitor as needing a refresh on next focus action. Commit.
- Fix render dialog cleanup always disabled. Commit.
- Minor cleanup in renderjob. Commit.
- Disable inactive timeline tabs. Commit.
- Fix abort rendering. Commit.
- Fix Windows crash openening a project with a missing file on a non available drive. Commit.
- Fix fit to width/height when clip sample aspect ratio != 1. Commit. See bug #96404.
- Don't try opening invalid sequence. Commit.
- Mark sequence clips with 0 tracks as invalid. Commit.
- Gpsgraphics: Fix default value for bg scale and opacity. Commit.
- Fix subtitle style editor scaling. Commit.
- Fix seamless transalation on GPU. Commit.
- Fix vosk model size calculation on Windows. Commit.
- Fix crash loading project with effect zone. Commit.
- Fix display of Whisper/Seamless model folder size on Windows. Commit.
- Fix another missing slash in tag end. Commit.
- Fix missing slash in tag end. Commit.
- Fix clip monitor history menu not showing up on audio clips. Commit.
- Cleanup subtitle edit ui. Commit.
- Fix incorrect param name. Commit.
- Gpsgraphic: fix range and comment. Commit.
- Fix gpsgraphic default values. Commit.
- Disable failing shared_ptr check. Commit.
- Cleanup Subtitles style dialog to better follow the app UI style. Commit.
- Effects XML changes to include keyframes. Commit.
- Remove reference to unused file. Commit.
- Fix crash/corruption in qml after sequence close. Commit.
- Only set timeline context properties once. Commit.
- Cleanup renderjob. Commit.
- Update avfilter_drawgrid.xml. Commit.
- Update avfilter_drawbox.xml. Commit.
- Fix missing change in last commit. Commit.
- Fix highdpi painting of color wheels. Commit.
- Fix colorwheel drawing on highdpi. Commit.
- Add some debug around project close. Commit.
- Fix Lift(Gamma/Gain layout issues. Commit.
- Bump MLT dependency to 7.28. Commit.
- Fix threading issue in seamless install, add context info buttons to settings page. Commit.
- Bump KF dependency to 6.3. Commit.
- Update all venv packages on request. Commit.
- Various fixes for TTS. Commit.
- Don't include quiet packages in feature_summary. Commit.
- Fix possible concurrency crash in settings caused by pthon deps check. Commit.
- Enforce latest version of whisper. Commit.
- Fix tests and snapping bug introduced in recent spacer tool fix. Commit.
- Refactor whisper settings. Commit.
- Cleaunp. Commit.
- Fix spacer tool leaving a few frames after last clip. Commit.
- Don't update subtitle edit on each selection change. Commit.
- Fix changing font size in subtitle editor. Commit.
- Add classes for specific clip types (timeline, playlist clips), cleanup. Commit.
- [dev-docs] Remove Qt5 mentions from build instructions. Commit.
- Implement resizing multiple timeline items. Commit.
- Fix Pexels Videos provider. Commit.
- Fix resetting Help shortcuts on each application launch. Commit. Fixes bug #495373.
- Fix replacing bin AV clip with mlt playlist. Commit.
- Fix .mlt playlist files lose audio thumb on project reopen. Commit.
- Dont try to read .mlt playlists as kdenlive project files on reload. Commit.
- Fix shadowed variable causing incorrect clip removal on project opening, fix crash opening project with timeline clip missing in bin. Commit. See bug #493486.
- Fix monitor seek to prev/next keyframe not working in rotoscoping. Commit.
- Fix rendering custom image sequence profile. Commit.
- Fix incorrect string param. Commit.
- QString refactor: replace QString() with QStringLiteral(). Commit.
- Fix mdocument modified on open: don't try to convert already updated subtitles. Commit.
- Subtitles: fix cut on newline handling after recent change. Commit.
- Fix: A/V Check for avformat files is swapped. Commit.
- Fix newline handling in subtitles, fix crash on delete in simple editor. Commit.
- Fix clip jobs like stabilize creating invalid folders. Commit.
- Fix freeze loading project with invalid folder id. Commit.
- Update packaging instructions. Commit.
- Don't invalidate timeline preview when replacing an audio clip in bin. Commit.
- Ensure monitor is cleared and ruler hidden when no clip or a folder is selected in bin. Commit.
- Fix title producer update on edit undo. Commit. Fixes bug #494142.
- Revert incorrect change. Commit.
- Fix typo in dance.xml. Commit.
- Fix single item(s) move. Commit.
- Cleanup. Commit.
- Fix cycle effects playling timeline and sometimes broken after reopening project. Commit.
- Fix recent regression breaking all sort of things when opening projects. Commit.
- Fix crash when dragging clip and using mouse wheel. Commit.
- Don't play when clicking monitor container if disabled in settings. Commit.
- Fix effect zones lost on project reopening. Commit.
- Fix effect zone for timeline clips. Commit.
- Render jobs: differentiate status between waiting and starting. Commit.
- Various fixes for bin clip effects. Commit.
- Disable check for ghost effects that currently removes valid effects. Commit.
- Detect and fix track producers with incorrect effects. Commit.
- Include cleanup. Commit.
- Fix bin effects not deleted from timeline instances. Commit.
- Don't try to build clone effect it if does not apply to the target. Commit.
- Fix deleting effect does not reset on monitor view and crash applying effect zone to bin clip. Commit.
- Don't unnecessarily check MLT tractors. Commit.
- Fix crash opening file with missing clips. Commit.
- Remove unused code. Commit.
- Don't erase temporary playlists in debug mode. Commit.
- Remove dead code. Commit.
- Fix null disconnect error in tests. Commit.
- Disable workaround to better understand failures in test suite. Commit.
- Fix crash on project close. Commit.
- In render debug mode, enforce MLT's repository to fix AppImage render suite failure. Commit.
- Add more debug output to render log files. Commit.
- Renderer: add debug option to prevent deleting the render log file. Commit.
- Fix possible crash opening an interlaced project. Commit.
- Remember last used zone in effect zone. Commit. See bug #493555.
- Only show system notifications for MLT error messages. Commit.
- Fix builtin effects sometimes appear after normal effects. Commit.
- Ensure clip properties tab icons are not rotated. Commit.
- Fix Shape Alpha filter affecting project audio. Commit.
- Git pushMerge branch 'master' of invent.kde.org:multimedia/kdenlive. Commit.
- Fix group effect button displayed in empty effect stack. Commit.
- Drop DBus in favor of QLocalSocket to communicate between renderer and main app. Commit.
- Fix Alt+click to loop between clips using an effect in project monitor. Commit.
- Fix crash on close. Commit.
- Fix copy/paste clip duplicates builtin effect. Commit.
- Add MLT_REPOSITIORY to render log. Commit.
- Add more checks for render progress report. Commit.
- Don't delete render log file if rendering does not create an output file. Commit.
- Fix possible crash on quit. Commit.
- Fix render job possibly aborting before starting. Commit.
- Correctly handle failure to create venv: give feedback to the user and don't keep a broken venv setup. Commit.
- [REUSE] Port to REUSE.toml. Commit.
- Fix crash loading audio clip. Commit.
- Subtitle edit: fix character count and editor font size. Commit.
- Fix some warnings, add some debug info if a rendered file is missing or empty. Commit.
- Built-in effects fixes, add option to keep source clip size on import. Commit.
- Don't try to connect to dbus jobview on command line rendering. Commit.
- Fix recent Qt6 warnings. Commit.
- Add message box informing user we will open a browser window when clicking documentation button in effect/transition. Commit.
- FIx looping through clips in project monitor effect scene. Commit.
- Fix loop selected clip. Commit.
- Effect stack now updates when switching between Project Bin and Timeline, fix a few focus issues. Commit.
- Properly hide "built-in stack" and "group effects" button when needed, add an info link button for compositions. Commit.
- Fix type. Commit.
- Properly hide/show the save stack icon. Commit.
- Fix minor typo. Commit.
- Replace : and ? chars in guides names for rendering. Commit. See bug #492595.
- Don't trigger timeline scroll when mouse exits timeline on a clip drag, it caused incorrect droppings and ghost clips. Commit. See bug #492720.
- Effect Stack: add info button in effect headers redirecting to our documentation. Commit.
- Fix scolling timeline with rubberband or when dragging from file manager can move last selected clip in timeline. Commit. Fixes bug #492635.
- Fix adding marker from project notes always adds it at 00:00. Commit. Fixes bug #492697.
- Improve the ASS format subtitling support. Commit.
- Correctly draw other Keyframe types in timeline (Bounce, circular, cubic, exponential). Commit.
- Fix blurry widgets on high DPI displays. Commit.
- Fix keyframe param not correctly enabled on first keyframe click. Commit.
- Fix curveeditor crash on empty track. Commit.
- Fix on monitor seek to next/previous keyframe buttons. Commit.
- Ensure rendering with separate file for each audio track keeps the correct audio tag in the file name. Commit.
- Switch time remap to the new precision spin box allowing 6 decimals instead of previous 2. Commit. See bug #492274.
- Fix render project folder sometimes lost, add proper enums instead of unreadable ints. Commit. See bug #492476.
- Fix MLT lumas not correctly recognized by archive feature. Commit. Fixes bug #492435.
- Use custom spin box allowing arbitrary digits for speed dialog. Commit. See bug #492274.
- Fix configure toolbars messing UI layout. Commit.
- Fix mouse wheel changing parameter effect on scroll. Commit.
- Fix effect stack layout issues. Commit. See bug #492314.
- Port away from depreciated qSetGlobalQHashSeed(). Commit.
- Port QCheckBox away from depreciated stateChanged to checkStateChanged. Commit.
- Port depreciated qAsConst to std::as_const. Commit.
- Drop support for Qt5. Commit.
- Effects List: ensure deprecated category is always listed last. Commit.
- Fix tabulations in Titler (requires latest MLT git). Commit.
- Titler: ensure only plain text can be pasted, prepare support for tabulations (needs MLT patch). Commit.
- Disable track / clip effect stack now create an undo entry. Commit.
- Archiving: when archiving used clips only, remove unused clips from Project Bin. Commit.
- Fix archive doesn't save the video assets when run multiple times. Commit.
- Automatic backup now correctly saves and restores subtitles. Commit. See bug #490459.
- After a crash, recover last subtitle file if possible. Commit. See bug #490459.
- Fix document notes timecode links may be broken after project reload. Commit. See bug #443597.
- Correctly refresh EffectStack when en/disabling built-in effects. Commit.
- Ensure non keyframeable params appear on top of keyframable, fix effect stack layout glitch. Commit.
- Fix some effects like obscure broken in monitor. Commit.
- Fix broken qml font on AppImage. Commit.
- Cleanup Text Based Edit Widget to make it more consistent and use less space. Commit.
- Remove virtual keyword when we use override. Commit.
- Remove incorrect taskmanager unlock. Commit.
- Fix transcode log sometimes empty. Commit.
- Fix various composition parameter layout issues. Commit.
- Minor fixes for MSVC. Commit.
- Update kiss_fft. Commit.
- Revert "Fix checkpackages generating an exception when run". Commit.
- Fix checkpackages generating an exception when run. Commit.
- Remove duplicate include. Commit.
- Fix some compile warning. Commit.
- Align all job progress to same width in clip monitor. Commit.
- Fix mem leak in asset params and composition view corruption. Commit.
- Improve drag and drop of effects, don't create 2 separate entries on dropping effect from list. Commit.
- Fix effect stack scroll on drag. Commit.
- Add Actions to quickly add Marker/Guides in a specific category. Commit.
- Redesign effect parameter widgets and introduce built in effects. Commit.
- Add a control uuid to each bin clip to ensure clips can not get mixed on project opening. Commit.
The post Kdenlive 24.12.0 released appeared first on Kdenlive.
19 Dec 2024 4:09pm GMT
New: the Fast Sketch Plugin for Krita
Together with Intel, we have been working a new plugin for Krita: the fast sketch plugin, or maybe, better, a fast inking plugin. This is an experimental plugin that makes it (sometimes) possible to automatically ink a sketch, using neural networks.
This plugin uses models to figure out how to ink a sketch: the included models were trained on openly available data: there was no scraping or stealing involved! The plugin comes with a manual that explains how to get the scripts you can use to create a model trained on your own data: what you need are before and after images of your sketch and your uncolored inked drawing, and the training software can run on your own hardware (it will take a lot of time, though).
Throughout the development process we've been discussing this plugin with artists on the Krita Artists forum.
Artwork by @BeARToys (CC BY-SA)
The plugin can be downloaded and extracted in a Windows Krita 5.2.6 folder and should then be enabled in the plugin manager in Krita's settings dialog.
There is also a download of Krita 5.3.0 pre-alpha available that includes the plugin for Windows and Linux. Currently, we don't have a working MacOS version ready, and since the plugin is implemented in Python, there will be no Android packages.
Download
Windows
- Plugin: Fast Sketch Plugin 1.0.2 FastSketchPlugin1.0.2.zip
- Portable zip file: Krita 5.3.0 pre-alpha krita-x64-5.3.0-prealpha-cdac9c31.zip
Linux
- 64 bits Linux: krita-x64-5.3.0-prealpha-cdac9c31.zip
19 Dec 2024 12:00am GMT
18 Dec 2024
Planet KDE | English
Maui Release Briefing #7
Today, we bring you a report on the brand-new release of the Maui Project.
Community
To follow the Maui Project's development or to just say hi, you can join us on our Telegram group @mauiproject
We are present on X and Mastodon:
Thanks to the KDE contributors who have helped to translate the Maui Apps and Frameworks!
Downloads & Sources
You can get the stable release packages [APKs, AppImage, TARs] directly from the KDE downloads server at https://download.kde.org/stable/maui/
All of the Maui repositories have the newly released branches and tags. You can get the sources right from the Maui group: https://invent.kde.org/maui
MauiKit 4 Frameworks & Apps
With the previous version released, MauiKit Frameworks and Maui Apps were ported over to Qt6, however, some regressions were introduced and those bugs have now been fixed with this new revision version.
Currently, there are over 10 frameworks, with two new ones recently introduced. They all, for the most part, have been fully documented, and although, the KDE doxygen agent has some minor issues when publishing some parts, you can find the documentation online at https://api.kde.org/mauikit/ (and if you find missing parts, confusing bits, or overall sections to improve - you can open a ticket at any of the framework repos and it shall be fixed shortly after)
A brief list of changes and fixes introduced to the frameworks are the following:
For MauiKit Controls
- MauiKit is now no longer dependent on MauiKit-Style, so any other QQC2 style can be used with Maui Apps (other styles are not supported).
- MauiKit documentation has been updated with notes on the new attached controls properties - https://api.kde.org/mauikit/mauikit/html/classControls.html
- MauiKit fixes the toast area notifications. The toast notifications can now take multiple contextual actions.
- MauiKit Demo app has been updated to showcase all the new control properties
- New controls: TextField, Popup, DropDownIndicator,
- MauiKit fixes the template delegates and the IconItem control
- MauiKit fixes to the Page autohide toolbars
- Update style and custom controls to use MauiKit Controls' attached properties for level, status, title, etc.
- Display keyboard shortcut info in the MenuItems
- Update MauiKit Handy properties for isMobile, isTouch, and hasTransientTouchInput and fixes to the lasso selection on touch displays
- Added more resize areas to the BaseWindow type
- Check for system color scheme style changes and update accordingly. This works on other systems besides Plasma or Maui, such as Gnome or Android
- The type AppsView has been renamed to SwipeView, and AppViewLoader to SwipeViewLoader
- Update MauiKit-Style to support MauiKit Controls attached properties and respect the flat properties in buttons
- Fixes to the MauiKit bug in the GridBrowser scrollbars policy
- Fixes to the action buttons layout in Dialog and PopupPage controls
- Refresh the icon when a system icon-theme change is detected - a workaround for Plasma is used and for other systems the default Qt API
For the MauiKit Frameworks
- FileBrowsing fixes bugs with the Tagging components
- Fixes to the models using dates. Due to a bug in Qt getting a file date time is too slow unless the UTC timezone is specified
- Update FileBrowsing controls to use the latest Mauikit changes
- Added a new control: FavButton, to mark files as favorites using the Tagging component quickly
- Update and fixes to the regressions in the other frameworks
- ImageTools fixes the OCR page
- TextEditor fixes the line numbers implementation.
All of the frameworks are now at version 4.0.1
All of the apps have been reviewed for the regressions previously introduced in the porting to Qt6; those issues have been solved and a few new features have been added, such as:
- Station, now allows opening selected links externally
- Index fixes to the file previewer and support for quickly tagging files from the previewer
- Vvave fixes to the minimode window closing
- Update the apps to remove usage of the Qt5Compat effects module
- Fix issues in Fiery, Strike, and Agenda
- Fix the issue of selecting multiple items in the apps not working
- Clip fixes to the video thumbnail previews and the opening file dialog
- Implement the floating viewer for Pix, Vvave, Shelf, and Clip for consistency
- Correctly open the Station terminal at the current working directory when invoked externally
- Among many few other details
** Index, Vvave, Pix, Nota, Buho, Station, Shelf, Clip, and Communicator versions have been bumped to 4.0.1
*** Strike and Fiery browser versions have been bumped to 2.0.1
**** Agenda and Arca versions have been bumped to 1.0.1
And as for Bonsai, Era, and other applications still under development, there is still not a ported version to Qt6 as of now
Maui Shell
Although Maui Shell has been ported over to Qt6 and is working with the latest MauiKit4, a lot of pending issues are still present and being worked on. The next release will be dedicated fully on Maui Shell and all of its subprojects, such as Maui Settings, Maui Core, CaskServer, etc.
That's it for now. Until the next blog post, that will be a bit closer to the 4.0.1 stable release.
Release schedule
The post Maui Release Briefing #7 appeared first on MauiKit - #UIFramework.
18 Dec 2024 4:27pm GMT
Ruqola 2.4.0
Ruqola 2.4.0 is a feature and bugfix release of the Rocket.chat messenger app.
Some of the new features in this release of Ruqola include:
- Allow to clean up room history when room was not opened for a long time.
- Add restore button in administrator server settings dialog.
- Improve changing password (show validation info).
- Improve register new account (Add reason support).
- Implement mute/unmute user.
- Add color to the text in the account tab.
- Allow to show private installed applications.
Some bug fixing:
- Fix editing message.
- Show permissions in Rocket.Chat Marketplace.
- Fix reconnect server.
- Fix single application on Windows/MacOs
- Fix select created room/discussion/teams
- Fix filter discussion in administrator mode
- Fix message video support
- Fix highlight text in quoted message
- Fix open discussion channel
- Allow to show application market settings
URL: https://download.kde.org/stable/ruqola/
Source: ruqola-2.4.0.tar.xz
SHA256: f532e421ae731dfc2e88b78ab61de01e0e367a31a4fe34497664a66fc737225c
Signed by: E0A3EB202F8E57528E13E72FD7574483BB57B18D
Jonathan Riddell jr@jriddell.org
https://jriddell.org/jriddell.pgp
18 Dec 2024 12:00am GMT
17 Dec 2024
Planet KDE | English
Qt 6.9 - Android Updates
Qt 6.9 brings some useful new features to improve the development process for developers targeting the Android platform. Keep in mind that the following list is not exhaustive of all changes around Qt for Android, and some other features might get their own blog.
Support for Uncompressed Native Libraries
Android 6 and above produces uncompressed native libraries that are only part of the APK by default. However, Qt had this behavior explicitly disabled with the following setting under build.gradle
:
android {
...
packagingOptions.jniLibs.useLegacyPackaging true
...
}
Or via the now deprecated extractNativeLibs
manifest flag, because Qt didn't support loading libraries directly from the APK. With this release, such support for reading and loading shared libraries directly from the APK without having them extracted to disk but rather, map those shared libraries to memory. Qt apps and APIs such as QLibrary and QPluginLoader should work the same as before and iterate libraries under the native libraries' directory.
There are few things to consider when this mode is enabled (it's enabled by default on 6.9+). For example, QCoreApplication::applicationDirPath()
would now return a path that points to a shared library filename that's inside the app's APK, usually in the form:
/data/data/package-path/base.apk!/lib/arm64-v8a/libmyapp_arm64_v8a.so
Paths returned by similar API calls might have previously returned a writable path, after this however, the returned paths won't be writable.
Enabling this might increase slightly the total size of produced APKs, but saves on disk space after installation and also on update sizes from the Play Store and slightly faster startups. For more information, see Improvements for smaller app downloads on Google Play.
Apps with the older way using compressed libraries still work as before if the relevant flag is explicitly enabled as mentioned above.
New Command-Line App/Test Runner
When developing for Android, you're expected for the most part to be using an IDE that handles the build and deployment and running the app. That process doesn't need to be that complicated, because of that we've added wrapper scripts that handle that job for you. Especially, on CI environments or if you're one of the people who can get by using a lightweight code editor and a terminal for development, this can be quite handy for you. All you need to do is build your project's APK and run the app as follows:
cd build
qt-cmake -S .. -B . -GNinja
cmake --build . --target apk
MY_ENV_VAR=value ./my_app --install --my_arg value
This last command would handle all the underlying adb
commands behind the scenes by installing the app to the device, starting it and printing the logcat
of the app, making it a more seamless experience and hassle free. For Windows, the runner has the .bat
file extension.
You can pass environment variables directly from your shell so they end up being passed to the app's runtime on the device. The same applies for command line arguments, where arguments not reserved by the runner are passed as app's arguments. For all parameters that the wrapper accepts, call it with --help
.
The same applies for auto tests, you would be able to simply do the following:
cd build
QTEST_FUNCTION_TIMEOUT=900000 ./tst_android test_case_1
And that would simply handle everything with androidtestrunner
under the hood. In this case, you don't need to manually issue the APK build command because androidtestrunner
takes care of that.
CMake Android APIs
We keep improving the integration of Android builds with CMake to make it easier to manage and maintain Android-specific requirements. Here's what's new:
Add App Permissions
Managing permissions for Android apps often requires manual edits to the AndroidManifest.xml. The newqt_add_android_permission() function removes this hassle by letting you declare permissions directly within your CMakeLists file. This function still allows auto inclusion of Qt modules' managed permissions. This approach simplifies project management, making it more straightforward by keeping project configurations in one place.
Setting an App's Name and Icon
Setting the app's name is now as simple as specifying it with QT_ANDROID_APP_NAME in your CMake configuration. No more manual setting of the app's name in the AndroidManifest.xml
file. Similarly, you can now define your app's icon drawable/mipmap in your project's CMake configuration with QT_ANDROID_APP_ICON. This expects the icon drawables to be under the appropriate Android resource directory hierarchy and the use of QT_ANDROID_PACKAGE_SOURCE_DIR.
Setting Java/Kotlin Compile SDK Level
The new property QT_ANDROID_COMPILE_SDK_VERSION allows you to specify the Android SDK version for compiling Java code. With this property, you can ensure your project is always built against the desired API level.
Improved Background Event Management
Background processes, particularly those involving UI updates, can be a source of performance bottlenecks if not managed properly. To address this, now it's possible for developers to set a maximum limit for queued background UI events by setting the new environment variable QT_ANDROID_BACKGROUND_ACTIONS_QUEUE_SIZE.
This enhancement prevents potential memory overload caused by an excessive number of tasks waiting in the queue. By defining a limit, developers can ensure smoother performance and prevent lagging or unresponsive behavior in their apps.
That's all from me this time! As always, we continue to improve Qt for Android, and we welcome your feedback and suggestions on this blog post or over bugreports.qt.io.
17 Dec 2024 1:31pm GMT
One more striped wallpaper
I recently saw one of my old branded "stripes" wallpapers in a screenshot of FreeBSD by someone on X, and that triggered me to make a new wallpaper in a similar style.
There was a call for artwork for the next Debian release - Trixie, and I made a modified version of one of my old wallpapers for it. As it was not chosen to be the default in Trixie, I decided to post it here for people who might like it.
It is, like all my wallpapers, a calm non-distracting one. (it is much prettier full-4k-size than in the thumbnail below)
If you like it, you can download it from Debian's Wiki - in 1920x1080 and 4k versions. There is also a version with the Debian logo there for inspiration if you want to create a custom distribution-branded one.
17 Dec 2024 1:11pm GMT
Improvements to Mozilla’s Searchfox Code Browser
Mozilla is the maker of the famous Firefox web browser and the birthplace of the likes of Rust and Servo (read more about Embedding the Servo Web Engine in Qt).
Firefox is a huge, multi-platform, multi-language project with 21 million lines of code back in 2020, according to their own blog post. Navigating in projects like those is always a challenge, especially at the cross-language boundaries and in platform-specific code.
To improve working with the Firefox code-base, Mozilla hosts an online code browser tailored for Firefox called Searchfox. Searchfox analyzes C++, JavaScript, various IDLs (interface definition languages), and Rust source code and makes them all browsable from a single interface with full-text search, semantic search, code navigation, test coverage report, and git blame support. It's the combination of a number of projects working together, both internal to Mozilla (like their Clang plugin for C++ analysis) and external (such as rust-analyzer maintained by Ferrous Systems).
It takes a whole repository in and separately indexes C++, Rust, JavaScript and now Java and Kotlin source code. All those analyses are then merged together across platforms, before running a cross-reference step and building the final index used by the web front-end available at searchfox.org.
Mozilla asked KDAB to help them with adding Java and Kotlin support to Searchfox in prevision of the merge of Firefox for Android into the main mozilla-central repository and enhance their C++ support with macro expansions. Let's dive into the details of those tasks.
Java/Kotlin Support
Mozilla merged the Firefox for Android source code into the main mozilla-central repository that Searchfox indexes. To add support for that new Java and Kotlin code to Searchfox, we reused open-source tooling built by Sourcegraph around the SemanticDB and SCIP code indexing formats. (Many thanks to them!)
Sourcegraph's semanticdb-javac and semanticdb-kotlinc compiler plugins are integrated into Firefox's CI system to export SemanticDB artifacts. The Searchfox indexer fetches those SemanticDB files and turns them into a SCIP index, using scip-semanticdb. That SCIP index is then consumed by the existing Searchfox-internal scip-indexer tool.
In the process, a couple of upstream contributions were made to rust-analyzer (which also emits SCIP data) and scip-semanticdb.
A few examples of Searchfox at work:
- Searching for the Java class: org.mozilla.geckoview.GeckoSession$PromptDelegate$AutocompleteRequest shows the definition, a superclass, some uses in Java source code and some uses in Kotlin tests.
- Searching for the Java interface method: org.mozilla.geckoview.Autocomplete$StorageDelegate$onAddressFetch shows the definition, a couple of users, and a couple of implementers across Java and Kotlin code.
- Querying the callers of a method with up to 2 indirections: calls-to:'org::mozilla::geckoview::Autofill::Session::getDefaultDimensions' depth:2
If you want to dive into more details, see the feature request on Bugzilla, the implementation and further discussion on GitHub and the release announcement on the mozilla dev-platform mailing list.
Java/C++ Cross-language Support
GeckoView is an Android wrapper around Gecko, the Firefox web engine. It extensively uses cross-language calls between Java and C++.
Searchfox already had support for cross-language interfaces, thanks to its IDL support. We built on top of that to support direct cross-language calls between Java and C++.
First, we identified the different ways the C++ and Java code interact and call each other. There are three ways Java methods marked with the native
keyword call into C++:
- Case A1: By default, the JVM will search for a matching C function to call based on its name. For instance, calling
org.mozilla.gecko.mozglue.GeckoLoader.nativeRun
from Java will callJava_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun
on the C++ side. - Case A2: This behavior can be overridden at runtime by calling the
JNIEnv::RegisterNatives
function on the C++ side to point at another function. - Case A3: GeckoView has a code generator that looks for Java items decorated with the
@WrapForJNI
andnative
annotations and generates a C++ class template meant to be used through the Curiously Recurring Template Pattern. This template provides anInit
static member function that does the rightJNIEnv::RegisterNatives
calls to bind the Java methods to the implementing C++ class's member functions.
We also identified two ways the C++ code calls Java methods:
- Case B1: directly with
JNIEnv::Call…
functions. - Case B2: GeckoView's code generator also looks for Java methods marked with
@WrapForJNI
(without thenative
keyword this time) and generates a C++ wrapper class and member functions with the rightJNIEnv::Call…
calls.
Only the C++ side has the complete view of the bindings; so that's where we decided to extract the information from, by extending Mozilla's existing Clang plugin.
First, we defined custom C++ annotations bound_as
and binding_to
that the clang plugin transforms into the right format for the cross-reference analysis. This means we can manually set the binding information:
class __attribute__((annotate("binding_to", "jvm", "class", "S_jvm_sample/Jni#"))) CallingJavaFromCpp
{
__attribute__((annotate("binding_to", "jvm", "method", "S_jvm_sample/Jni#javaStaticMethod().")))
static void javaStaticMethod()
{
// Wrapper code
}
__attribute__((annotate("binding_to", "jvm", "method", "S_jvm_sample/Jni#javaMethod().")))
void javaMethod()
{
// Wrapper code
}
__attribute__((annotate("binding_to", "jvm", "getter", "S_jvm_sample/Jni#javaField.")))
int javaField()
{
// Wrapper code
return 0;
}
__attribute__((annotate("binding_to", "jvm", "setter", "S_jvm_sample/Jni#javaField.")))
void javaField(int)
{
// Wrapper code
}
__attribute__((annotate("binding_to", "jvm", "const", "S_jvm_sample/Jni#javaConst.")))
static constexpr int javaConst = 5;
};
class __attribute__((annotate("bound_as", "jvm", "class", "S_jvm_sample/Jni#"))) CallingCppFromJava
{
__attribute__((annotate("bound_as", "jvm", "method", "S_jvm_sample/Jni#nativeStaticMethod().")))
static void nativeStaticMethod()
{
// Real code
}
__attribute__((annotate("bound_as", "jvm", "method", "S_jvm_sample/Jni#nativeMethod().")))
void nativeMethod()
{
// Real code
}
};
(This example is, in fact, extracted from our test suite, jni.cpp vs Jni.java.)
Then, we wrote some heuristics that try and identify cases A1 (C functions named Java_…
), A3 and B2 (C++ code generated from @WrapForJNI
decorators) and automatically generate these annotations. Cases A2 and B1 (manually calling JNIEnv::RegisterNatives
or JNIEnv::Call…
functions) are rare enough in the Firefox code base and impossible to reliably recognize; so it was decided not to cover them at the time. Developers who wish to declare such bindings could manually annotate them.
After this point, we used Searchfox's existing analysis JSON format and mostly re-used what was already available from IDL support. When triggering the context menu for a binding wrapper or bound function, the definitions in both languages are made available, with "Go to" actions that jump over the generally irrelevant binding internals.
The search results also display both sides of the bridge, for instance:
- searching for the mozilla::widget::GeckoViewSupport::Open C++ member function links to its Java binding org.mozilla.geckoview.GeckoSession$Window.open.
- searching for the org.mozilla.geckoview.GeckoSession.getCompositorFromNative Java method links to its generated C++ binding mozilla::java::GeckoSession::GetCompositor.
If you want to dive into more details, see the feature request and detailed problem analysis on Bugzilla, the implementation and further discussion on GitHub, and the release announcement on the Mozilla dev-platform mailing list.
Displaying Interactive Macro Expansions
Aside from this Java/Kotlin-related work, we also added support for displaying and interacting with macro expansions. This was inspired by KDAB's own codebrowser.dev, but improves it to:
- Display all expansion variants, if they differ across platforms or by definition:
- Make macros fully indexed and interactive:
This work mainly happened in the Mozsearch Clang plugin to extract macro expansions during the pre-processing stage and index them with the rest of the top-level code.
Again, if you want more details, the feature request is available on Bugzilla and the implementation and further technical discussion is on GitHub.
Summary
Because of the many technologies it makes use of, from compiler plugins and code analyzers written in many languages, to a web front-end written using the usual HTML/CSS/JS, by way of custom tooling and scripts in Rust, Python and Bash, Searchfox is a small but complex and really interesting project to work on. KDAB successfully added Java/Kotlin code indexing, including analyzing their C++ bindings, and are starting to improve Searchfox's C++ support itself, first with fully-indexed macro expansions and next with improved templates support.
If you like this article and want to read similar material, consider subscribing via our RSS feed.
Subscribe to KDAB TV for similar informative short video content.
KDAB provides market leading software consulting and development services and training in Qt, C++ and 3D/OpenGL. Contact us.
The post Improvements to Mozilla's Searchfox Code Browser appeared first on KDAB.
17 Dec 2024 8:00am GMT
16 Dec 2024
Planet KDE | English
Qt Creator 15 - CMake Update
Here are the new CMake features and fixes in Qt Creator 15:
16 Dec 2024 10:49am GMT