jacobdev1 / xl-converter Goto Github PK
View Code? Open in Web Editor NEWEasy-to-use image converter for modern formats. Supports multithreading, drag 'n drop, and downscaling.
Home Page: https://codepoems.eu/xl-converter
License: Other
Easy-to-use image converter for modern formats. Supports multithreading, drag 'n drop, and downscaling.
Home Page: https://codepoems.eu/xl-converter
License: Other
AM is a bash package manager of portable apps for Linux, which contains a repo of AppImage & .tar.gz scripts to download, update, remove & integrate supported apps into desktop environment. With a note that AppImage is main format for AM.
PRs which added your software:
ivan-hc/AM@2ed8c08
Portable-Linux-Apps/Portable-Linux-Apps.github.io@3688b8c
Info about the project:
https://github.com/ivan-hc/AM
I used your software because it's the only one I know which supports JPEG-XL format for converting images in form of GUI.
libjxl packaged for Fedora doesn't support manipulation of images for some reason,
distroboxes are clunky to setup &
flatpaks which support JPEG-XL converting are not available.
Thanks for your work!
First thank you for your hard work and great tool for picture conversion!
It is one of the first one which efficiency use the new jpeg encoder jpegli with fantastic results in quality and size.
I intense tested the jpegli encoder of the JPEGXL 0.10.2 package under windows and
some settings are very interesting for better compression and an equal good quality.
The settings for chroma sub sampling (switch e.g. --chroma_subsampling=420) would be a nice option
to reduce the filesize with very small quality reduction.
I tried to analyse your sourcecode, but did not find the programcode which set the chroma subsampling.
If you want to enhance your xl-converter it would be nice to set chroma subsampling (4:4:4, 4:2:2 or 4:2:0).
Further there is an option for progressive jpeg (--progressive_level=0..2).
You can save further space for the saved picture.
Do your program use it or is there a default value?
I propose to add a docked window at the bottom of the program window, where the current process would be displayed: what files are currently being processed, their size, format and location; if an error occurs, there should be a message in red (an audio signal is also possible). At the end, the total size of the incoming files, the files after conversion and the difference should be indicated.
I'm not saying this is absolutely necessary, but if you someday want to improve your program and sharpen your programming skills at the same time, here's an area where you can put your efforts.
So i have about 145 gifs that i wanted converted and their filesize reduced. Put them all in the program, gave it lossless intelligent conversion and left it for several hours. Came back to progress (and program) stuck at 92%. Restarting it with skipping converted files option makes it skip all of them. Some gifs themselves are slowed down too much as well. Don't think it's size related. Program doesn't have a viewable log so Win10 22H2, i7-8700k, 24gig ram is all the relevant info i can think of.
In the 'Building' section for Windows, the command to install dependencies should be pip install -r requirements
instead of 'python install -r requirements`
Let me clarify that the files have the same name, but different extensions. I have not yet discovered any patterns, I can only say that both types of files open normally in the viewer and look the same. As I understand it, if enable the "PNG Fallback" option, then a PNG should be created when it is impossible to "unpack" the JPG from JXL. However, all the files in the folder were created at once with the same encoding parameters and the JPG was successfully unpacked. What's going on?
I cannot provide these files.
Hi Jacob
I've writted a short paper about XL-Converter 1.0. It's in french, with some argotic words. Read it on https://linuxfr.org/news/xl-converter-1-0-billet-d-humeur-et-plaidoyer
Previously, when encoding JPG to JXL (lossless, not Modular), if set the parameter to "effort 10" and then enable "intelligent", the process went quickly. It seems that the second option cancels the effect of the first. But now it seems that "intelligent" has no effect on anything. Or am I misunderstanding something.
when a custom downscale algorithm is selected, downscaling increases the image size when the image is smaller then the requested max size.
Suppose there are several files in one folder with the same name, but in different formats (which the converter understands). If I send them for processing at the same time (multithreading option), what will happen then? Will the converter consider that some files have supposedly already been processed and skip them? Or will it silently delete and overwrite the file? I'm guessing you've added some logic to handle this situation, however I'm not sure if this will work in multi-threading.
When trying to tell it to process files in a path or a filename that has Japanese characters (like numbered files that have "cover" at the start of the name but in a directory called "劇場版") it just ends almost instantly and processes nothing but when I rename the folder or files to have nothing but ANSI characters and it works as expected.
I haven't tried the other formats but this happens with JXL for sure.
I have come across a situation many times where after installing some random program, many other programs suddenly stopped working. And each time the reason was that that program silently installed outdated versions of VC Redist. I was forced to uninstall all versions of VC Redist and use a special installer (this or this), which would sequentially install the required versions. I also had to use a third-party program (Process Lasso) to prevent these things from being installed secretly.
Therefore, I suggest that you do not repeat the mistakes of others (after all, the version that your converter installs will also one day become outdated) and at least during installation offer a choice whether to install VC Redist or not.
Version 1.0.0 AppImage, Ubuntu 24.04
Conversions always fail with attached log files :
xl_converter_exceptions JPG.csv
xl_converter_exceptions JXL.csv
xl_converter_exceptions webp.csv
Terminal output :
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgioremote-volume-monitor.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgioremote-volume-monitor.so
(xl-converter:123966): Gtk-WARNING **: 19:18:34.752: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:18:34.752: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:18:34.756: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:18:34.756: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:18:34.756: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:18:34.756: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:18:34.757: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:18:34.757: Loading IM context type 'wayland' failed
** (xl-converter:123966): WARNING **: 19:18:48.440: atk-bridge: get_device_events_reply: unknown signature
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgioremote-volume-monitor.so
(xl-converter:123966): Gtk-WARNING **: 19:19:04.978: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.978: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:04.982: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.982: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:04.983: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.983: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:04.983: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.983: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:04.985: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.985: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:04.988: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:04.988: Loading IM context type 'wayland' failed
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgioremote-volume-monitor.so
(xl-converter:123966): Gtk-WARNING **: 19:19:27.234: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.234: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:27.238: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.238: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:27.238: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.238: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:27.239: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.239: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:27.240: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.240: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:19:27.244: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:19:27.244: Loading IM context type 'wayland' failed
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgioremote-volume-monitor.so
(xl-converter:123966): Gtk-WARNING **: 19:20:35.459: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.459: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:20:35.463: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.463: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:20:35.464: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.464: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:20:35.464: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.464: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:20:35.466: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.466: Loading IM context type 'wayland' failed
(xl-converter:123966): Gtk-WARNING **: 19:20:35.469: /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-wayland.so: undefined symbol: g_string_free_and_steal
(xl-converter:123966): Gtk-WARNING **: 19:20:35.469: Loading IM context type 'wayland' failed
However, these files open perfectly in different image viewing programs and do not have any visual defects anywhere. Here is an example of such an image; there are 230 photos in this series, and the converter cannot process only one.
I suggest adding some JPG decoders and if an error occurs, try using them. Of course, it would be desirable for this situation to be displayed in the log.
After start the conversion, a progress window will appear. If minimize the program window and then restore it, the progress window will be compressed vertically. If minimize and restore again, only the title of this window will remain visible.
Let me clarify that I have a 1920*1080 display and 25% image scaling is activated in the Windows settings. I don't know if this has anything to do with the bug.
Hello. Win10, 22h2, cpu 5700x. Converted a large batch of gifs and some of them gave me errors without really explaining what that error is. I tried converting them to webp as well and they all came out empty, zero bytes.
xl_converter_exceptions.csv
Will XL Converter update the JPEG XL from version 0.8.1 to version 0.10.0?
I created a pull request for Windows (e0bbe3f) before I realize you said you will ignore PL in the README.
Exif metadata fails to be carried over to the converted file no matter what settings I use. I've used both the encoder and Exiftool for metadata preservation. This is a deal breaker for me, since I have a lot of photographs that I'd like to convert.
First thank you for your great and fast picture converter.
I have a directory structure for my photos (main folder with different subfolders) and want to convert them to a destination dirctory.
My problem is, that your program can not create directories and subdirectories from the source folder and create them in the destination folder. Is it possible to add this feature in one of the next releases? That would be fantastic. Thank you in advance.
Lovely app this! Is there any chance it could show up in Flathub?
There was a lot of improvements for lossless JPEG XL encoding in version 0.10 of libjxl. Looking at the release notes for 0.9.7 of XL Converter I can’t tell if it uses libjxl 0.10 or later. It would be good if release notes for XL Converter showed encoder versions.
Hi Jacob,
Thanks for a great software and easy to use !
I understand that addition of new format can be tedious. As you suggested in your code, I tried to add Tiff with Image Magick.
I was able to convert tiff files but with some caveats.
JPEG
only reduced to a certain extent.Properties of Image after Double Conversion.
JPEG
. Hence multi downscale options might be required for TIFFs
with priority, which one to do first.Images Comparing Details of Original TIFF and JPEG Converted with Final Image Size
Image Magick
as encoder manually as I knew it supported (Other one Failed). When Tiff
Image is used, automatic change to Image Magick
will require some modifications.Version | 0.9.9 | |
---|---|---|
OS | Windows | |
Output | ||
format | JPG | |
quality | 100 | |
lossless | False | |
lossless_if_smaller | False | |
max_compression | False | |
effort | 7 | |
intelligent_effort | False | |
reconstruct_jpg | True | |
jxl_mode | Default | |
jpg_encoder | JPEGLI from JPEG XL | |
if_file_exists | Rename | |
custom_output_dir | True | |
keep_dir_struct | False | |
delete_original | False | |
delete_original_mode | To Trash | |
smallest_format_pool | [('png', True), ('webp', True), ('jxl', True)] | |
Downscaling | ||
enabled | True | |
mode | File Size | |
percent | 80 | |
width | 2000 | |
height | 2000 | |
file_size | 9700 | |
shortest_side | 1080 | |
longest_side | 1920 | |
resample | Default | |
Misc. | ||
keep_metadata | Encoder - Wipe | |
attributes | False | |
Exceptions | ||
ID | Exception | Extension |
P2 | Conversion failed, output not found. | .tif |
Try to add this when you have time !
Well, I already said what I wanted to say.
First: thanks for the app; it's great!
I'm using xl-converter-win-0.9.4-x86_64.exe in Windows 11.
Second time in a large batch conversion it gets stuck right at the end like this:
I literally plan to gift this app to my mom for Christmas. She's older and has a massive collection of family photos in very suboptimal formats.
MacOS support?
The "ExifTool - Preserve" does not copy over any metadata to the resulting .jxl file. Tested with multiple .jpg and .png inputs
I have reinstalled exiftool and xl converter yet this persists. ExifTool is also in PATH and functions from there by itself
Why? I usually install in Program Files / Program Files (x86)
only those programs that are integrated into the system (for example, Windows resets file associations if the program is installed in another location). And all the rest are in another folder C:\MyPrograms
- this allows them to maintain a certain amount of portability when the settings are written to the program folder, which is quite convenient if I have to reinstall Windows.
I converted a lot of files (JPG to JXL), and at a certain point I noticed that the result files became very small. More precisely, the first result in the list was small, and the remaining files were zero size. Unfortunately, I did not track the situation properly at that time and, perhaps, some of the files were completely deleted.
I suggest you add a check for free space to the converter (so that user can specify it in the settings), which should take place not only when the conversion starts, but also periodically during the process. If you have any better ideas on how to avoid this problem, please share.
It is also advisable to add a check for the difference in size between the incoming and outgoing files. If the difference is too large (user can adjust the percentage), then this should be displayed in the log and the incoming file should not be deleted.
Hello,
Thank you for your great application,
i use it to convert images to Avif, but conversion speed does not use all available CPU resources (Ryzen 3900x)
and it fluctuates from 5% to 50%. so average ~25%.
Could you please add a function to select the number of parallel jobs/workers, as implemented in MegaPixel and in MegaPixel-Qt by Alkl58 (also Python language), when converting to Avif. MegaPixel convert images to Avif about ~4 times faster, by using all CPU resources.
But, your application better realised and more convenient to use.
Thank you for all your great work.
Hi,
The linux installer does not work, due to a mistake in the install.sh
script
install.sh: line 64 : [: == : unary operator expected
To fix it, just on line 64:
if [ $choice == "1" ]; then
by
if [ $choice = "1" ]; then
Save, installs runs now...
Repoduce:
Expectation:
It would be really handy to have a portable version of this app, a simple archive that can be downloaded and extracted. Thanks.
I'm using a light theme, but this window still remains dark. In addition, gray font on a black background is difficult to see. On the contrary, such things need to be made clearly visible.
Sometimes I needed to see the file name in this window, but by default the width of the name column is too narrow, and when I tried to change the column size, it turned out that this was not possible.
If I started the conversion, then minimized the window, the process ended with errors and I try to switch to the program using Alt-Tab, then I switch only to the log window. If I close this window, the main program window will still be minimized.
Using ExifTool - Safe Wipe produces faded image output.
And also an option, just not in the settings, but in the “Output” section “rotate by X degrees,” that is, -90, 90 and 180. And let this setting be automatically reset after one use.
This is really necessary, especially EXIF. If I convert images with XnConvert, this option is always enabled.
First, I'm a new user so sorry if I don't get all the understanding of xl-converter settings.
But from my knowledge of jxl, I had difficult time to try to understand what the conversion will do. So maybe I won't be the only one...
If the user want to convert from jpeg to jxl, the UI is not really clear if it will do a lossless conversion from jpeg to jxl or if it will convert the jpeg to the lossless jxl format. After finding and testing the "Reconstruct JPG from JPEG XL" setting, I now know that it is doing the 1st one. But both could make sense in different use cases.
I have the feeling that the "Lossless" option has a different behavior depending on the input format and it's difficult for the user to understand it:
I think some feedback/explanation to the user would be good.
Or some UI changes in the settings. 2 possibilities:
Another thing:
Is there a good reason to have put the jxl->jpeg lossless conversion "Reconstruct JPG from JPEG XL" in the PNG output format? Or is it a bug?
Because I would never look at it here if I wanted to use that feature. It makes more sense to have it in "JPG" format options for me.
Thanks in advance for the feedback.
Note: XL Converter v1.0.0 (Windows)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.