lymphatus / caesium-clt Goto Github PK
View Code? Open in Web Editor NEWCaesium Command Line Tools - Lossy/lossless image compression tool
Home Page: http://saerasoft.com/caesium
License: Other
Caesium Command Line Tools - Lossy/lossless image compression tool
Home Page: http://saerasoft.com/caesium
License: Other
Hi I just installed on ubuntu 22.04, cargo 1.68.0 using cargo build --release
Any file I trow at it, it gives me this error
[WARNING] File /home/test/htdocs/wp-content/uploads/2021/07/fashion-designer-template-hero-img-bg.jpg was not compressed. Reason: Unknown (Code: 210)
[WARNING] File /home/test/htdocs/wp-content/uploads/woocommerce-placeholder-300x300.png was not compressed. Reason: Unknown (Code: 210)
[WARNING] File /home/test/htdocs/wp-content/uploads/2021/07/fashion-designer-template-product-img-6.jpg was not compressed. Reason: Unknown (Code: 210)
im using this command:
test@server: ~/caesium-clt-main/target/release$ ./caesiumclt -q 90 -O -R -S -d -o /home/test/htdocs/wp-content/uploads /home/test/htdocs/wp-content/uploads
As described in #26 images do get placed to the root of the file system. But only if the folder specified to -o does not exist.
I would rather expect a creation of the folder in question or an error message.
I am a linux user and used caesium with Wine, but today I found caesium-clt, I was wondering is this the most maintained version?The other one seems to be stalled. Thanks for the clarification
caesiumclt -q 60 -o compresse *.JPG
outputs plain yellow images on OSX 10.11
I'm using WSL2.0 on Windows 10. My steps below;
For libcaesium
git clone https://github.com/Lymphatus/libcaesium
cd libcaesium && cargo build --release
For CLT. I followed from INSTALL.md
git clone https://github.com/Lymphatus/caesium-clt
cd caesium-clt
mkdir build && cd build
cmake .. -DLIBCAESIUM_PATH=/libcaesium/target/release
-- Configuring done
-- Generating done
-- Build files have been written to: /caesium-clt/build
make
Scanning dependencies of target caesiumclt
[ 14%] Building C object src/CMakeFiles/caesiumclt.dir/vendor/optparse.c.o
[ 28%] Building C object src/CMakeFiles/caesiumclt.dir/error.c.o
[ 42%] Building C object src/CMakeFiles/caesiumclt.dir/helper.c.o
[ 57%] Building C object src/CMakeFiles/caesiumclt.dir/main.c.o
[ 71%] Building C object src/CMakeFiles/caesiumclt.dir/shared.c.o
[ 85%] Building C object src/CMakeFiles/caesiumclt.dir/utils.c.o
[100%] Linking C executable caesiumclt
[100%] Built target caesiumclt
sudo make install
[100%] Built target caesiumclt
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/caesiumclt
-- Set runtime path of "/usr/local/bin/caesiumclt" to ""
I want to try test run command as caesiumclt
(that's only)
caesiumclt: error while loading shared libraries: libcaesium.so: cannot open shared object file: No such file or directory
But I have libcaesium.so
file in libcaesium builded dir in release/target
relative path.
Test this command as ls -l libcaesium/target/release
total 8488
drwxrwxrwx 1 fatihmert fatihmert 4096 May 18 10:42 build
drwxrwxrwx 1 fatihmert fatihmert 4096 May 18 10:46 deps
drwxrwxrwx 1 fatihmert fatihmert 4096 May 18 10:42 examples
drwxrwxrwx 1 fatihmert fatihmert 4096 May 18 10:42 incremental
-rwxrwxrwx 1 fatihmert fatihmert 764 May 18 10:46 libcaesium.d
-rwxrwxrwx 2 fatihmert fatihmert 1339070 May 18 10:46 libcaesium.rlib
-rwxrwxrwx 2 fatihmert fatihmert 7347440 May 18 10:46 libcaesium.so
How to solve this?
say you have files under /home/ubuntu/imagetests/unoptimized/
and you want to output files to /home/ubuntu/imagetests/optimized/
/home/ubuntu/imagetests/unoptimized/Ch1/image1.jpg becomes /home/ubuntu/imagetests/optimized/h1/image1.jpg
/home/ubuntu/imagetests/unoptimized/Ch1/image2.jpg becomes /home/ubuntu/imagetests/optimized/h1/image2.jpg
ext.
included is a modified helper.c file that fixes the problem.
Hi,
It's not easy to get this working on Ubuntu.
caesiumclt-jpeg.o: In function `cclt_jpeg_decompress':
/home/temp/CaesiumCLT/src/jpeg.c:211: undefined reference to `tjDecompressHeader3'
collect2: error: ld returned 1 exit status
Any idea what's the problem?
caesiumclt -l -o /path/to/images/compressed /path/to/images
Sets the output filename as "compressed", so the output is just the last image with the wrong name. The image is correctly compressed however.
OS: MacOSX 10.10.5, using a Netgear STORA as network storage
Like flat pack? You could then add it to https://flathub.org/home to have more visibility?
Hello, I found the hang bug in the master version of caesiumclt binary or its library.
Below are steps followed to reproduce the bug.
I used GCC 5.4 and AddressSanitizer (export CFLAGS="-g -fsanitize=address" CXXFLAGS="-g -fsanitize=address" LDFLAGS="-fsanitize=address" before make) to build it, this test file can cause hang bug.
Test case: hang.png
I tried to debug it with gdb using the following command: ./build/src/caesiumclt -q 80 -s 0.5 -o out hang.png
After typing r
command, it hanged, so I type Ctrl+c
to interrupt it.
The debug output is listed below:
stbi__zexpand (n=1, zout=0x7fffae5fb800 "", z=0x7fffffff7fa0) at /root/--/libcaesium/caesium/vendor/stb_image.h:3905
3905 limit *= 2;
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
──────────────────────────────────────────────────────────────[ REGISTERS ]───────────────────────────────────────────────────────────────
RAX 0x44000001
RBX 0x1
RCX 0xfffffffeffa ◂— 0x0
RDX 0x44000000
RDI 0x7fff6a5fb800 ◂— 0x2220122222212200
RSI 0x0
R8 0x0
R9 0x0
R10 0xfffffffeff8 ◂— 0x0
R11 0x44000000
R12 0x7fffffff7fa0 —▸ 0x621000019167 ◂— 0xbebebebebebebebe
R13 0x7fffffff7fc8 —▸ 0x7fffae5fb800 ◂— 0x0
R14 0x7fffffff7fb4 ◂— 0xae5fb80000000000
R15 0x7fffffff7fc0 —▸ 0x7fff6a5fb800 ◂— 0x2220122222212200
RBP 0x22
RSP 0x7fffffff7d50 —▸ 0x7fffffff7fb0 ◂— 0x1d
RIP 0x7ffff6b5cba0 (stbi.parse_zlib+1584) ◂— add esi, esi
────────────────────────────────────────────────────────────────[ DISASM ]────────────────────────────────────────────────────────────────
► 0x7ffff6b5cba0 <stbi.parse_zlib+1584> add esi, esi
0x7ffff6b5cba2 <stbi.parse_zlib+1586> cmp eax, esi
0x7ffff6b5cba4 <stbi.parse_zlib+1588> jg stbi.parse_zlib+1584 <0x7ffff6b5cba0>
↓
► 0x7ffff6b5cba0 <stbi.parse_zlib+1584> add esi, esi
0x7ffff6b5cba2 <stbi.parse_zlib+1586> cmp eax, esi
0x7ffff6b5cba4 <stbi.parse_zlib+1588> jg stbi.parse_zlib+1584 <0x7ffff6b5cba0>
↓
► 0x7ffff6b5cba0 <stbi.parse_zlib+1584> add esi, esi
0x7ffff6b5cba2 <stbi.parse_zlib+1586> cmp eax, esi
0x7ffff6b5cba4 <stbi.parse_zlib+1588> jg stbi.parse_zlib+1584 <0x7ffff6b5cba0>
↓
► 0x7ffff6b5cba0 <stbi.parse_zlib+1584> add esi, esi
0x7ffff6b5cba2 <stbi.parse_zlib+1586> cmp eax, esi
────────────────────────────────────────────────────────────[ SOURCE (CODE) ]─────────────────────────────────────────────────────────────
In file: /root/--/libcaesium/caesium/vendor/stb_image.h
3900 z->zout = zout;
3901 if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
3902 cur = (int) (z->zout - z->zout_start);
3903 limit = old_limit = (int) (z->zout_end - z->zout_start);
3904 while (cur + n > limit)
► 3905 limit *= 2;
3906 q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);
3907 STBI_NOTUSED(old_limit);
3908 if (q == NULL) return stbi__err("outofmem", "Out of memory");
3909 z->zout_start = q;
3910 z->zout = q + cur;
────────────────────────────────────────────────────────────────[ STACK ]─────────────────────────────────────────────────────────────────
00:0000│ rsp 0x7fffffff7d50 —▸ 0x7fffffff7fb0 ◂— 0x1d
01:0008│ 0x7fffffff7d58 —▸ 0x7fffffff7fa8 —▸ 0x621000019167 ◂— 0xbebebebebebebebe
02:0010│ 0x7fffffff7d60 —▸ 0x7fffffff7fb8 —▸ 0x7fffae5fb800 ◂— 0x0
03:0018│ 0x7fffffff7d68 ◂— 0x22000000
04:0020│ 0x7fffffff7d70 ◂— 0x212
05:0028│ 0x7fffffff7d78 ◂— 0x38 /* '8' */
06:0030│ 0x7fffffff7d80 —▸ 0x7fffffff841c ◂— 0x1000000010000
07:0038│ 0x7fffffff7d88 —▸ 0x107000000 ◂— 0x0
──────────────────────────────────────────────────────────────[ BACKTRACE ]───────────────────────────────────────────────────────────────
► f 0 7ffff6b5cba0 stbi.parse_zlib+1584
f 1 7ffff6b5cba0 stbi.parse_zlib+1584
f 2 7ffff6b5cba0 stbi.parse_zlib+1584
f 3 7ffff6ba2253 stbi_zlib_decode_malloc_guesssize_headerflag+307
f 4 7ffff6ba2253 stbi_zlib_decode_malloc_guesssize_headerflag+307
f 5 7ffff6ba43ee stbi.parse_png_file+7966
f 6 7ffff6bab1dc stbi.load_main+4044
f 7 7ffff6bab1dc stbi.load_main+4044
f 8 7ffff6bab1dc stbi.load_main+4044
f 9 7ffff6bc9f08 stbi.load_and_postprocess_8bit+296
f 10 7ffff6bcac2a stbi_load_from_file+442
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Program received signal SIGINT
The call stack is shown below:
>bt
#0 stbi__zexpand (n=1, zout=0x7fffae5fb800 "", z=0x7fffffff7fa0) at /root/--/libcaesium/caesium/vendor/stb_image.h:3905
#1 stbi__parse_huffman_block (a=0x7fffffff7fa0) at /root/--/libcaesium/caesium/vendor/stb_image.h:3937
#2 stbi__parse_zlib (a=a@entry=0x7fffffff7fa0, parse_header=parse_header@entry=1) at /root/--/libcaesium/caesium/vendor/stb_image.h:4113
#3 0x00007ffff6ba2253 in stbi__do_zlib (parse_header=1, exp=1, olen=<optimized out>, obuf=<optimized out>, a=0x7fffffff7fa0) at /root/--/libcaesium/caesium/vendor/stb_image.h:4126
#4 stbi_zlib_decode_malloc_guesssize_headerflag (buffer=<optimized out>, len=len@entry=103, initial_size=<optimized out>, outlen=outlen@entry=0x7fffffff9140, parse_header=parse_header@entry=1) at /root/--/libcaesium/caesium/vendor/stb_image.h:4157
#5 0x00007ffff6ba43ee in stbi__parse_png_file (z=z@entry=0x7fffffff98b0, scan=scan@entry=0, req_comp=req_comp@entry=0) at /root/--/libcaesium/caesium/vendor/stb_image.h:4798
#6 0x00007ffff6bab1dc in stbi__do_png (ri=<optimized out>, req_comp=0, n=<optimized out>, y=0x7fffffff9df0, x=0x7fffffff9db0, p=0x7fffffff98b0) at /root/--/libcaesium/caesium/vendor/stb_image.h:4856
#7 stbi__png_load (ri=<optimized out>, req_comp=0, comp=<optimized out>, y=0x7fffffff9df0, x=0x7fffffff9db0, s=0x7fffffff9c00) at /root/--/libcaesium/caesium/vendor/stb_image.h:4886
#8 stbi__load_main (s=0x7fffffff9c00, x=<optimized out>, y=<optimized out>, comp=<optimized out>, req_comp=<optimized out>, ri=<optimized out>, bpc=8) at /root/--/libcaesium/caesium/vendor/stb_image.h:967
#9 0x00007ffff6bc9f08 in stbi__load_and_postprocess_8bit (s=<optimized out>, x=0x7fffffff9db0, y=0x7fffffff9df0, comp=0x7fffffff9e30, req_comp=0) at /root/--/libcaesium/caesium/vendor/stb_image.h:1060
#10 0x00007ffff6bcac2a in stbi_load_from_file (f=f@entry=0x61600000f680, x=x@entry=0x7fffffff9db0, y=y@entry=0x7fffffff9df0, comp=comp@entry=0x7fffffff9e30, req_comp=req_comp@entry=0) at /root/--/libcaesium/caesium/vendor/stb_image.h:1146
#11 0x00007ffff6bcadb4 in stbi_load (filename=filename@entry=0x60200000efd0 "hang", x=x@entry=0x7fffffff9db0, y=y@entry=0x7fffffff9df0, comp=comp@entry=0x7fffffff9e30, req_comp=req_comp@entry=0) at /root/--/libcaesium/caesium/vendor/stb_image.h:1136
#12 0x00007ffff6be6bae in cs_png_resize (input=input@entry=0x60200000efd0 "hang", output=output@entry=0x60400000dfd0 "/root/--/caesium-clt/out/hang", factor=<optimized out>) at /root/--/libcaesium/caesium/png.c:93
#13 0x00007ffff6be7460 in cs_png_optimize (input=input@entry=0x60200000efd0 "hang", output=output@entry=0x60400000dfd0 "/root/--/caesium-clt/out/hang", options=options@entry=0x7fffffffc238) at /root/--/libcaesium/caesium/png.c:24
#14 0x00007ffff6b1957f in cs_compress (input_path=0x60200000efd0 "hang", output_path=output_path@entry=0x60400000dfd0 "/root/--/caesium-clt/out/hang", options=options@entry=0x7fffffffc210, err_n=err_n@entry=0x7fffffffa134) at /root/--/libcaesium/caesium/caesium.c:39
#15 0x0000000000409f57 in start_compression (options=options@entry=0x7fffffffc260, parameters=parameters@entry=0x7fffffffc210) at /root/--/caesium-clt/src/helper.c:310
#16 0x0000000000401de3 in main (argc=argc@entry=8, argv=argv@entry=0x7fffffffe388) at /root/--/caesium-clt/src/main.c:45
#17 0x00007ffff6457830 in __libc_start_main (main=0x401c60 <main>, argc=8, argv=0x7fffffffe388, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe378) at ../csu/libc-start.c:291
#18 0x0000000000402099 in _start ()
I hope this helps you.
I tried to compress a whole folder and get this info all the time.
malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.
My command: caesiumclt -l -o ./thumb/ -R ./thumb/*.jpg
I'm not a coder (I can barely manipulate other's python scripts), but I would like to see this project succeed. It does what I want it to do pretty well (when it works) and there's no additional frills attached. How can I test things? Should I be printing the exif data of files that crash the program? How can I determine the root of an issue without knowing the language/how to code? I'm on Windows btw.
Hi,
I am trying to install Caesium in my UBUNTU 14.04 machine. I am getting below errors while installing
Process Followed:
installed "libjpeg-turbo8-dev" before installing CLI Tool
Here is the error output:
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... no
checking whether make supports nested variables... no
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... none
checking dependency style of gcc... none
checking for in -ljpeg... no
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking stdio.h usability... yes
checking stdio.h presence... yes
checking for stdio.h... yes
checking sys/stats.h usability... no
checking sys/stats.h presence... no
checking for sys/stats.h... no
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking for off_t... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for mkdir... yes
checking for strrchr... yes
checking for strtol... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: executing depfiles commands
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# make
The program 'make' is currently not installed. You can install it by typing:
apt-get install make
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# apt-get install make
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
make-doc
The following NEW packages will be installed:
make
0 upgraded, 1 newly installed, 0 to remove and 123 not upgraded.
Need to get 119 kB of archives.
After this operation, 328 kB of additional disk space will be used.
Get:1 http://ap-southeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main make amd64 3.81-8.2ubuntu3 [119 kB]
Fetched 119 kB in 0s (6,932 kB/s)
Selecting previously unselected package make.
(Reading database ... 56741 files and directories currently installed.)
Preparing to unpack .../make_3.81-8.2ubuntu3_amd64.deb ...
Unpacking make (3.81-8.2ubuntu3) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up make (3.81-8.2ubuntu3) ...
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT#
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# make
Making all in src
make[1]: Entering directory /home/ubuntu/CaesiumCLT/src' source='main.c' object='caesiumclt-main.o' libtool=no \ DEPDIR=.deps depmode=none /bin/bash ../tools/depcomp \ gcc -DPACKAGE_NAME=\"caesiumclt\" -DPACKAGE_TARNAME=\"caesiumclt\" -DPACKAGE_VERSION=\"1.9.9\" -DPACKAGE_STRING=\"caesiumclt\ 1.9.9\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DPACKAGE=\"caesiumclt\" -DVERSION=\"1.9.9\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_GETOPT_H=1 -DHAVE_STDIO_H=1 -DHAVE_DIRENT_H=1 -DHAVE_JPEGLIB_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_MKDIR=1 -DHAVE_STRRCHR=1 -DHAVE_STRTOL=1 -I. -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -c -o caesiumclt-main.o
test -f 'main.c' || echo './'main.c source='utils.c' object='caesiumclt-utils.o' libtool=no \ DEPDIR=.deps depmode=none /bin/bash ../tools/depcomp \ gcc -DPACKAGE_NAME=\"caesiumclt\" -DPACKAGE_TARNAME=\"caesiumclt\" -DPACKAGE_VERSION=\"1.9.9\" -DPACKAGE_STRING=\"caesiumclt\ 1.9.9\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DPACKAGE=\"caesiumclt\" -DVERSION=\"1.9.9\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_GETOPT_H=1 -DHAVE_STDIO_H=1 -DHAVE_DIRENT_H=1 -DHAVE_JPEGLIB_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_MKDIR=1 -DHAVE_STRRCHR=1 -DHAVE_STRTOL=1 -I. -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -c -o caesiumclt-utils.o
test -f 'utils.c' || echo './'utils.c utils.c: In function ‘scan_folder’: utils.c:234:5: warning: implicit declaration of function ‘chdir’ [-Wimplicit-function-declaration] chdir(dir); ^ utils.c:236:9: warning: implicit declaration of function ‘lstat’ [-Wimplicit-function-declaration] lstat(entry->d_name, &statbuf); ^ utils.c:258:5: warning: return from incompatible pointer type [enabled by default] return *files; ^ source='lossless.c' object='caesiumclt-lossless.o' libtool=no \ DEPDIR=.deps depmode=none /bin/bash ../tools/depcomp \ gcc -DPACKAGE_NAME=\"caesiumclt\" -DPACKAGE_TARNAME=\"caesiumclt\" -DPACKAGE_VERSION=\"1.9.9\" -DPACKAGE_STRING=\"caesiumclt\ 1.9.9\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DPACKAGE=\"caesiumclt\" -DVERSION=\"1.9.9\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_GETOPT_H=1 -DHAVE_STDIO_H=1 -DHAVE_DIRENT_H=1 -DHAVE_JPEGLIB_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_MKDIR=1 -DHAVE_STRRCHR=1 -DHAVE_STRTOL=1 -I. -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -c -o caesiumclt-lossless.o
test -f 'lossless.c' || echo './'lossless.c source='compress.c' object='caesiumclt-compress.o' libtool=no \ DEPDIR=.deps depmode=none /bin/bash ../tools/depcomp \ gcc -DPACKAGE_NAME=\"caesiumclt\" -DPACKAGE_TARNAME=\"caesiumclt\" -DPACKAGE_VERSION=\"1.9.9\" -DPACKAGE_STRING=\"caesiumclt\ 1.9.9\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DPACKAGE=\"caesiumclt\" -DVERSION=\"1.9.9\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_GETOPT_H=1 -DHAVE_STDIO_H=1 -DHAVE_DIRENT_H=1 -DHAVE_JPEGLIB_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_MKDIR=1 -DHAVE_STRRCHR=1 -DHAVE_STRTOL=1 -I. -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -c -o caesiumclt-compress.o
test -f 'compress.c' || echo './'compress.c compress.c: In function ‘cclt_compress’: compress.c:17:6: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] int status; ^ compress.c: In function ‘cclt_decompress’: compress.c:58:9: warning: variable ‘res’ set but not used [-Wunused-but-set-variable] int res = 0; ^ gcc -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -o caesiumclt caesiumclt-main.o caesiumclt-utils.o caesiumclt-lossless.o caesiumclt-compress.o caesiumclt-utils.o: In function
jcopy_markers_execute':
/home/ubuntu/CaesiumCLT/src/utils.c:145: undefined reference to jpeg_write_marker' caesiumclt-lossless.o: In function
cclt_get_markers':
/home/ubuntu/CaesiumCLT/src/lossless.c:15: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:17: undefined reference to
jpeg_CreateDecompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:30: undefined reference to jpeg_stdio_src' /home/ubuntu/CaesiumCLT/src/lossless.c:34: undefined reference to
jpeg_save_markers'
/home/ubuntu/CaesiumCLT/src/lossless.c:37: undefined reference to jpeg_read_header' caesiumclt-lossless.o: In function
cclt_optimize':
/home/ubuntu/CaesiumCLT/src/lossless.c:60: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:61: undefined reference to
jpeg_CreateDecompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:62: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:63: undefined reference to
jpeg_CreateCompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:76: undefined reference to jpeg_stdio_src' /home/ubuntu/CaesiumCLT/src/lossless.c:86: undefined reference to
jpeg_read_header'
/home/ubuntu/CaesiumCLT/src/lossless.c:89: undefined reference to jpeg_read_coefficients' /home/ubuntu/CaesiumCLT/src/lossless.c:93: undefined reference to
jpeg_copy_critical_parameters'
/home/ubuntu/CaesiumCLT/src/lossless.c:113: undefined reference to jpeg_simple_progression' /home/ubuntu/CaesiumCLT/src/lossless.c:116: undefined reference to
jpeg_stdio_dest'
/home/ubuntu/CaesiumCLT/src/lossless.c:119: undefined reference to jpeg_write_coefficients' /home/ubuntu/CaesiumCLT/src/lossless.c:134: undefined reference to
jpeg_finish_compress'
/home/ubuntu/CaesiumCLT/src/lossless.c:135: undefined reference to jpeg_destroy_compress' /home/ubuntu/CaesiumCLT/src/lossless.c:136: undefined reference to
jpeg_finish_decompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:137: undefined reference to jpeg_destroy_decompress' /home/ubuntu/CaesiumCLT/src/lossless.c:81: undefined reference to
jpeg_save_markers'
/home/ubuntu/CaesiumCLT/src/lossless.c:129: undefined reference to jpeg_destroy_decompress' caesiumclt-compress.o: In function
cclt_compress':
/home/ubuntu/CaesiumCLT/src/compress.c:30: undefined reference to tjInitCompress' /home/ubuntu/CaesiumCLT/src/compress.c:32: undefined reference to
tjCompress2'
/home/ubuntu/CaesiumCLT/src/compress.c:48: undefined reference to tjDestroy' /home/ubuntu/CaesiumCLT/src/compress.c:49: undefined reference to
tjFree'
caesiumclt-compress.o: In function cclt_decompress': /home/ubuntu/CaesiumCLT/src/compress.c:67: undefined reference to
tjAlloc'
/home/ubuntu/CaesiumCLT/src/compress.c:71: undefined reference to tjInitDecompress' /home/ubuntu/CaesiumCLT/src/compress.c:72: undefined reference to
tjDecompressHeader2'
/home/ubuntu/CaesiumCLT/src/compress.c:74: undefined reference to ceil' /home/ubuntu/CaesiumCLT/src/compress.c:75: undefined reference to
ceil'
/home/ubuntu/CaesiumCLT/src/compress.c:82: undefined reference to tjAlloc' /home/ubuntu/CaesiumCLT/src/compress.c:84: undefined reference to
tjDecompress2'
/home/ubuntu/CaesiumCLT/src/compress.c:94: undefined reference to tjDestroy' collect2: error: ld returned 1 exit status make[1]: *** [caesiumclt] Error 1 make[1]: Leaving directory
/home/ubuntu/CaesiumCLT/src'
make: *** [all-recursive] Error 1
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# make install
Making install in src
make[1]: Entering directory /home/ubuntu/CaesiumCLT/src' gcc -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99 -g -O2 -o caesiumclt caesiumclt-main.o caesiumclt-utils.o caesiumclt-lossless.o caesiumclt-compress.o caesiumclt-utils.o: In function
jcopy_markers_execute':
/home/ubuntu/CaesiumCLT/src/utils.c:145: undefined reference to jpeg_write_marker' caesiumclt-lossless.o: In function
cclt_get_markers':
/home/ubuntu/CaesiumCLT/src/lossless.c:15: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:17: undefined reference to
jpeg_CreateDecompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:30: undefined reference to jpeg_stdio_src' /home/ubuntu/CaesiumCLT/src/lossless.c:34: undefined reference to
jpeg_save_markers'
/home/ubuntu/CaesiumCLT/src/lossless.c:37: undefined reference to jpeg_read_header' caesiumclt-lossless.o: In function
cclt_optimize':
/home/ubuntu/CaesiumCLT/src/lossless.c:60: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:61: undefined reference to
jpeg_CreateDecompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:62: undefined reference to jpeg_std_error' /home/ubuntu/CaesiumCLT/src/lossless.c:63: undefined reference to
jpeg_CreateCompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:76: undefined reference to jpeg_stdio_src' /home/ubuntu/CaesiumCLT/src/lossless.c:86: undefined reference to
jpeg_read_header'
/home/ubuntu/CaesiumCLT/src/lossless.c:89: undefined reference to jpeg_read_coefficients' /home/ubuntu/CaesiumCLT/src/lossless.c:93: undefined reference to
jpeg_copy_critical_parameters'
/home/ubuntu/CaesiumCLT/src/lossless.c:113: undefined reference to jpeg_simple_progression' /home/ubuntu/CaesiumCLT/src/lossless.c:116: undefined reference to
jpeg_stdio_dest'
/home/ubuntu/CaesiumCLT/src/lossless.c:119: undefined reference to jpeg_write_coefficients' /home/ubuntu/CaesiumCLT/src/lossless.c:134: undefined reference to
jpeg_finish_compress'
/home/ubuntu/CaesiumCLT/src/lossless.c:135: undefined reference to jpeg_destroy_compress' /home/ubuntu/CaesiumCLT/src/lossless.c:136: undefined reference to
jpeg_finish_decompress'
/home/ubuntu/CaesiumCLT/src/lossless.c:137: undefined reference to jpeg_destroy_decompress' /home/ubuntu/CaesiumCLT/src/lossless.c:81: undefined reference to
jpeg_save_markers'
/home/ubuntu/CaesiumCLT/src/lossless.c:129: undefined reference to jpeg_destroy_decompress' caesiumclt-compress.o: In function
cclt_compress':
/home/ubuntu/CaesiumCLT/src/compress.c:30: undefined reference to tjInitCompress' /home/ubuntu/CaesiumCLT/src/compress.c:32: undefined reference to
tjCompress2'
/home/ubuntu/CaesiumCLT/src/compress.c:48: undefined reference to tjDestroy' /home/ubuntu/CaesiumCLT/src/compress.c:49: undefined reference to
tjFree'
caesiumclt-compress.o: In function cclt_decompress': /home/ubuntu/CaesiumCLT/src/compress.c:67: undefined reference to
tjAlloc'
/home/ubuntu/CaesiumCLT/src/compress.c:71: undefined reference to tjInitDecompress' /home/ubuntu/CaesiumCLT/src/compress.c:72: undefined reference to
tjDecompressHeader2'
/home/ubuntu/CaesiumCLT/src/compress.c:74: undefined reference to ceil' /home/ubuntu/CaesiumCLT/src/compress.c:75: undefined reference to
ceil'
/home/ubuntu/CaesiumCLT/src/compress.c:82: undefined reference to tjAlloc' /home/ubuntu/CaesiumCLT/src/compress.c:84: undefined reference to
tjDecompress2'
/home/ubuntu/CaesiumCLT/src/compress.c:94: undefined reference to tjDestroy' collect2: error: ld returned 1 exit status make[1]: *** [caesiumclt] Error 1 make[1]: Leaving directory
/home/ubuntu/CaesiumCLT/src'
make: *** [install-recursive] Error 1
root@ip-172-31-7-149:/home/ubuntu/CaesiumCLT# whereis caesiumclt
caesiumclt:
c:\Users\Admin\Documents\caesium\caesium-clt\build>cmake .. -G "MinGW Makefiles"
-- The C compiler identification is GNU 8.1.0
-- The CXX compiler identification is GNU 8.1.0
-- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe
-- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe
-- Check for working CXX compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/Admin/Documents/caesium/caesium-clt/build
c:\Users\Admin\Documents\caesium\caesium-clt\build>mingw32-make
Scanning dependencies of target caesiumclt
[ 14%] Building C object src/CMakeFiles/caesiumclt.dir/vendor/optparse.c.obj
[ 28%] Building C object src/CMakeFiles/caesiumclt.dir/error.c.obj
[ 42%] Building C object src/CMakeFiles/caesiumclt.dir/helper.c.obj
C:\Users\Admin\Documents\caesium\caesium-clt\src\helper.c: In function
parse_arguments':
C:\Users\Admin\Documents\caesium\caesium-clt\src\helper.c:72:55: error: 'MAX_PATH' undeclared (first use in this function); did you mean 'MAX_PATH_SIZE'?
_fullpath(parameters.output_folder, opts.optarg, MAX_PATH);
^~~~~~~~
MAX_PATH_SIZE
C:\Users\Admin\Documents\caesium\caesium-clt\src\helper.c:72:55: note: each undeclared identifier is reported only once for each function it appears in
C:\Users\Admin\Documents\caesium\caesium-clt\src\helper.c: At top level:cc1.exe: warning: unrecognized command line option '-Wno-nullability-completeness'
mingw32-make[2]: *** [src\CMakeFiles\caesiumclt.dir\build.make:91: src/CMakeFiles/caesiumclt.dir/helper.c.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:93: src/CMakeFiles/caesiumclt.dir/all] Error 2
mingw32-make: *** [Makefile:129: all] Error 2
c:\Users\Admin\Documents\caesium\caesium-clt\build>
If input is a jpg image, program will output a compressed jpg image.
Could caesium-clt provide a argument to compress the input image to specified format?
I have several Debian 8 & 9 servers that were running version 0.10.2 (timestamps say Nov 21 is when I downloaded and installed it).
After updating to the latest code (version 0.11.0), I get the error 203. I've tried several different images, with this command:
/opt/caesium/caesiumclt -q 80 -o /tmp/caesium /home/me/jpeg-9c/testorig.jpg
That particular test image is part of this package: http://www.ijg.org/files/jpegsrc.v9c.tar.gz
Altering the output folder does not seem to help, omitting it says "cannot create output folder", which is probably expected.
Dropping the quality to 0 (lossless) or removing that parameter results in this, which might be the first clue:
Wrong JPEG library version: library is 90, caller expects 62
I did recently update libjpeg on these machines from 9b to 9c, but so far as I can tell, Caesium is configured to use it's own mozjpeg compiled in the libcaesium folder, and I do also have mozjpeg installed in /opt/mozjpeg/ (but that was not updated recently).
Referencing from #10
it crashes whenever I try to optimise a folder with the following error:
Segmentation fault (core dumped)
Would you please release binaries inclduing for arm64 because I'd like to use this on Termux on Android.
I am trying to install it on servers to process 100Gb+ of images on recurring basis. With Jpegoptim i have used -
find /web/html/skin/ -name '*.jpg' | xargs jpegoptim --strip-all --all-progressive
When i am using the same with
find /web/html/skin/ -name '*.jpg' | xargs -0 caesiumclt -q 90 -o /web/html/skin/
Its not able to take the parameters. Error coming -
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
[ERROR] 6: Cannot check if is a directory.
Any way to process in bulk using find? Let me know what i am doing wrong here?
I am trying to install in ubuntu 14.04. I successfully installed zopfli but I don't know why but still I am getting this error Cannot find libzopflipng.
Command
caesiumclt -l -e -o compresse
fails with error
[ERROR] Failed to open file "".
It's all ok if we don't give the -e
parameter.
When using -q 80 for example with a cmyk image it causes the result to be an empty black image.
/caesium # caesiumclt -q80 -o out cmyk.jpg
(1/1) cmyk.jpg -> out/cmyk.jpg
1.17 MB -> 2.70 KB [-99.77%]
-------------------------------
Compression completed in 0m0s170ms
1.17 MB -> 2.70 KB [-99.77% | -1.17 MB]
Using an older version of Caesium
on Windows, I can compress images in .tiff or .tif format.
But in the newer version it doesn't work.
I can edit the
src\models\CImage.h
class CImage {
const QList<QByteArray> supported formats = { "png", "jpg", "jpeg", "webp" };
adding "tiff", "tif"
But it would be great if they added it in a new version.
caesiumclt -q 0 -RS -o "\\mynetworkstrg\IAmRoot2\=2_NEED_RENAMED" "\\mynetworkstrg\IAmRoot2\unsorted\manga2bp\=1_NEED_CRUSHED"
Collecting files...
(1/33744) 001.jpg -> \\mynetworkstrg\IAmRoot2\=2_NEED_RENAMED\Ase to Sekken by Yamada Kintetsu\0007 - Vol. 001 Ch. 007 - Tears\001.jpg
Compressing...Output file write error --- out of disk space?
This is being done to files on my network storage device, which has approximately 5 TB of space left. The files in question total approximately 25.5 GB.
The dry run presented no issues.
I am using the latest Windows binary (v0.15.1-beta) on a Win10 computer.
Just installed Caesium on Ubuntu 19.04 running on a server. It performs fantastically, but crashes after 1021 images no matter which images it is given with error 203. Unrecognized error.
I used the following command caesiumclt -q 30 -o ~/compressimages/ /home/MasterImages
The code seems to process images non-sequentially, so I can't simply point it to the remaining images in an efficient way.
This issue appears different to #27
Has anyone encountered anything similar?
stuff@stuff-VirtualBox:~$ cd /home/stuff/Downloads/caesium-clt-0.10.2-beta
stuff@stuff-VirtualBox:~/Downloads/caesium-clt-0.10.2-beta$ mkdir build && cd build
stuff@stuff-VirtualBox:~/Downloads/caesium-clt-0.10.2-beta/build$ cmake ..
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/stuff/Downloads/caesium-clt-0.10.2-beta/build
stuff@stuff-VirtualBox:/Downloads/caesium-clt-0.10.2-beta/build$ make
Scanning dependencies of target caesiumclt
[ 16%] Building C object src/CMakeFiles/caesiumclt.dir/helper.c.o
[ 33%] Building C object src/CMakeFiles/caesiumclt.dir/error.c.o
[ 50%] Building C object src/CMakeFiles/caesiumclt.dir/optparse.c.o
[ 66%] Building C object src/CMakeFiles/caesiumclt.dir/main.c.o
[ 83%] Building C object src/CMakeFiles/caesiumclt.dir/utils.c.o
[100%] Linking C executable caesiumclt
[100%] Built target caesiumclt
stuff@stuff-VirtualBox:/Downloads/caesium-clt-0.10.2-beta/build$ sudo make install
[sudo] password for stuff:
[100%] Built target caesiumclt
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/caesiumclt
stuff@stuff-VirtualBox:/Downloads/caesium-clt-0.10.2-beta/build$ caesiumclt -v
0.10.2
stuff@stuff-VirtualBox:/Downloads/caesium-clt-0.10.2-beta/build$ caesium
caesium: command not found
Any idea?
I tested caesum-clt with a 14mb heavy png photo, the terminal cursor scrolled down to a next line, therefore caesium-clt was working as expected. However a blank space with a stuck cursor for 6 minutes didn't help me to understand what was going on.
I propose two ideas which could be implemented:
Shows a status bar displaying how much is left to wait or alternatively display the % as "file photo.png is being compressed 40%"
detect the size of the input file and if over a certain amount (5?10mb?) display a warning message like: warning the file is heavy, compression might take a long time"
Hi, is there any command that can be used to resize the image while compressing in command line tool?
Hi Team,
Can you please help to install caesium in linux (ubuntu) machine.
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for in -ljpeg... no
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking stdio.h usability... yes
checking stdio.h presence... yes
checking for stdio.h... yes
checking sys/stats.h usability... no
checking sys/stats.h presence... no
checking for sys/stats.h... no
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking jpeglib.h usability... no
checking jpeglib.h presence... no
checking for jpeglib.h... no
Cannot find jpeglib.h.
6. # make
make: *** No targets specified and no makefile found. Stop.
I am root in this process.
Cloud you please help me to fix this problem.
Thanks,
Satya
If the output is INSIDE the folder we are passing as input, ignore it or we're gonna go in a infinite loop
say you have files under /home/ubuntu/imagetests/unoptimized/
and you want to output files to /home/ubuntu/imagetests/optimized/
/home/ubuntu/imagetests/unoptimized/Ch1/image1.jpg becomes /home/ubuntu/imagetests/optimized/h1/image1.jpg
/home/ubuntu/imagetests/unoptimized/Ch1/image2.jpg becomes /home/ubuntu/imagetests/optimized/h1/image2.jpg
ext.
included is a modified helper.c file that fixes the problem
helper.zip
Using
caesiumclt.exe -R --overwrite all
or
caesiumclt.exe -R --overwrite bigger
Any non-image file, which in fact throws an error, is nuked. This is a non-desired behavior and really dangerous, specially since you allow recursion.
Either allow a mask input to filter files to process (which should default to compatible images) or just process only compatible images.
hi, i found something interesting in this repo.
./caesiumclt -q 80 -e -S -o /dev/null crash_sample
==71957==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x44c980 in strdup /home/bupt/Desktop/tools/llvm-12.0.1/llvm/projects/compiler-rt/lib/asan/asan_interceptors.cpp:437
#1 0x501209 in get_filename /home/bupt/Desktop/caesium-clt/src/utils.c:182:14
#2 0x4fdd7b in start_compression /home/bupt/Desktop/caesium-clt/src/helper.c:240:26
#3 0x4fee98 in main /home/bupt/Desktop/caesium-clt/src/main.c:51:2
#4 0x7fb3203d7c86 in __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:310
Direct leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x4af350 in malloc /home/bupt/Desktop/tools/llvm-12.0.1/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145
#1 0x4fd267 in parse_arguments /home/bupt/Desktop/caesium-clt/src/helper.c:196:62
#2 0x4fee27 in main /home/bupt/Desktop/caesium-clt/src/main.c:46:12
#3 0x7fb3203d7c86 in __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:310
Direct leak of 18 byte(s) in 1 object(s) allocated from:
#0 0x4af6e8 in realloc /home/bupt/Desktop/tools/llvm-12.0.1/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164
#1 0x7fb321608d2f in alloc::alloc::realloc::hc736fd5de89fa3ef /build/rustc-0m8Yd4/rustc-1.59.0+dfsg1~ubuntu1~llvm/library/alloc/src/alloc.rs:124:14
#2 0x7fb321608d2f in alloc::alloc::Global::grow_impl::hf0049006e7ebdb0d /build/rustc-0m8Yd4/rustc-1.59.0+dfsg1~ubuntu1~llvm/library/alloc/src/alloc.rs:201:31
#3 0x7fb321608d2f in _$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$::grow::hb9fcdcf97d0e846b /build/rustc-0m8Yd4/rustc-1.59.0+dfsg1~ubuntu1~llvm/library/alloc/src/alloc.rs:254:18
#4 0x7fb321608d2f in alloc::raw_vec::finish_grow::hd9007cf6faf1aed9 (.llvm.9900164880652801993) /build/rustc-0m8Yd4/rustc-1.59.0+dfsg1~ubuntu1~llvm/library/alloc/src/raw_vec.rs:466:13
SUMMARY: AddressSanitizer: 66 byte(s) leaked in 3 allocation(s).
With this plugin you can create an user interface to help users run caesium-clt, and caesium-clt would be alowed to receive image source directly from GIMP for operating.
Hi,
I'm using caesiumclt
to compress my image library, and it works great so far.
But since my phone camera (and I guess nowadays most phones do) takes really large pictures (~5000x3000 resolution) I'd like to reduce this a little bit as well.
Currently, It is possible to specify something like --width 3000
and the height will be kept in the same aspect ratio, which works great for landscape photos, but not on portrait photos.
So an option to specify either the width or the height (chosen by the larger dimension) would be awesome, or maybe something like:
--max-width 3000 --max-height 3000
could work to achieve this?
Also, in my library I also have some older photos which are at a lower resolution and which I then don't want to upscale to a 3000
pixel width. Would it be possible to add something like a --no-upscaling
flag or so as well? Or if the --max-width
/ --max-height
parameter from above were to be included it could become unnecessary I guess, that would be great as well.
My current workflow, which works but is basically a hack around this limitation just divides my library first into three separate folders:
I then run caesiumclt
on each of those, and afterwards combine the results again. But some more options like those specified above would make that workaround unnecessary.
Anyway thanks for an awesome tool and would love to hear additional thoughts on the feature ideas I described 😄
My env:
Microsoft Windows 10 Build 19043
cmake version 3.23.0
mingw32-make.exe --version -> GNU Make 4.3
gcc/g++ (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 12.2.0
Step:
cd ./libcaesium/
cargo build --release
cd ../caesium-clt
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DLIBCAESIUM_PATH=C:/XXXX/libcaesium/target/release -G "CodeBlocks - MinGW Makefiles"
cmake --build . --target caesiumclt
ERROR 1:
\src\helper.h:38:5: error: unknown type name 'bool'
38 | bool keep_metadata;
I Fix this error with #include <stdbool.h>
Whether Windows or Linux.
ERROR 2:
helper.c:81:70: error: 'MAX_PATH' undeclared (first use in this function); did you mean 'MAX_PATH_SIZE'?
81 | _fullpath(parameters.output_folder, opts.optarg, MAX_PATH);
I Fix this error with this replace MAX_PATH
to MAX_PATH_SIZE
.
ERROR 3:
src\error.h:23:5: error: expected identifier before numeric constant
23 | ERROR = 0,
I Fix this error with undef ERROR.
PR is : #54
finally , I successfully completed the compilation , get caesiumclt.exe
and caesium.dll
, i put them in C:\caesiumclt ,and add the floder to PATH , i can use caesiumclt.exe command now.
BUT another big problem is caesiumclt always return nothing as output, whatever image i give whatever quality parameter i set.
eg:
# ls .\in\1.png
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/4 15:50 249039 1.png
# caesiumclt.exe -q 80 -o ./out ./in/1.png
Collecting files...
(1/1) ./in/1.png -> C:\Users\ubuntu\Desktop\test\input\out\./in/1.png
Compressing...[WARNING] 7: Cannot calculate file size
243.20 KB -> 0.00 B [-100.00%]
-------------------------------
Compression completed in 0m0s2ms
243.20 KB -> 0.00 B [-100.00% | -243.20 KB]
# ls .\out\ //output nothing
need your help @Lymphatus
make doesnt do anything
Could you please release Windows binary for 0.11.0-beta?
0.10.2-beta often throws exceptions.
Hello,
i have a question for you. When i run caesiumclt -v
from Terminal it says:
pi@raspberry:~ $ caesiumclt -v caesiumclt: error while loading shared libraries: libcaesium.so: cannot open shared object file: No such file or directory
I have already compiled and installed the libcaesium
library on my system. It is located at:
-- Installing: /usr/local/lib/libcaesium.so -- Set runtime path of "/usr/local/lib/libcaesium.so" to "/opt/mozjpeg/lib"
The question is:
libcaesium.so
missing library that the caesiumclt -v
command looks for, once you launch it?Thanks
We need more logs when compress failed. But there are no change when I set verbose to 9.
caesiumclt -e -S -R --width 3000 -O bigger -q 70 --threads 11 -o . .
# from help
caesiumclt -e -S -R --width 3000 -O bigger -q 70 --threads 11 --verbose 1 -o . .
# try like unix style
caesiumclt -e -S -R --width 3000 -O bigger -q 70 --threads 11 --verbose 9 -o . .
make
[ 14%] Building C object src/CMakeFiles/caesiumclt.dir/vendor/optparse.c.o
[ 28%] Building C object src/CMakeFiles/caesiumclt.dir/error.c.o
[ 42%] Building C object src/CMakeFiles/caesiumclt.dir/helper.c.o
[ 57%] Building C object src/CMakeFiles/caesiumclt.dir/main.c.o
[ 71%] Building C object src/CMakeFiles/caesiumclt.dir/shared.c.o
[ 85%] Building C object src/CMakeFiles/caesiumclt.dir/utils.c.o
[100%] Linking C executable caesiumclt
ld: library not found for -lcaesium
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/caesiumclt] Error 1
make[1]: *** [src/CMakeFiles/caesiumclt.dir/all] Error 2
make: *** [all] Error 2
test:build test$ make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
I am trying to build it in monterey mac machine.
I'm not sure, but it seems that CaesiumCLT doesn't manipulate the JPG file, which contains Chinese or special characters. Thank you!
(1/1) /home/kashu/a/天津利顺德豪华精选酒店/me.jpg -> /home/kashu/a/天津利顺德豪华精选酒店_q90/me.jpg
caesiumclt: malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.
(1/1) /home/kashu/a/天津利顺德豪华精选酒店/me (copy).jpg -> /home/kashu/a/天津利顺德豪华精选酒店
._q90/me (copy).jpg
(1/1) /home/kashu/a/北京出差/通行证件要求通知02.jpg -> /home/kashu/a/北京出差_q90/通行证件要求通知02.jpg
caesiumclt: malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.
(1/1) /home/kashu/a/北京出差/通行证件要求通知01.jpg -> /home/kashu/a/北京出差_q90/通行证件要求通知01.jpg
caesiumclt: malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.
Tested Systems: Win7x64, Win10
I had tested this on a small group of files and it worked beautifully, so I decided to go big (183 files):
caesiumclt -q 0 -RS -o "C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed" "C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\tocompress"
[WARNING] 3: Empty input folder.
(1/183) 000.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\000.jpg
1.48 MB -> 1.30 MB [-12.29%]
(2/183) 0000.png -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\0000.png
239.57 KB -> 177.59 KB [-25.87%]
(3/183) 001.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\001.jpg
2.03 MB -> 1.85 MB [-9.30%]
(4/183) 002.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\002.jpg
853.61 KB -> 709.89 KB [-16.84%]
(5/183) 003.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\003.jpg
40.46 KB -> 7.81 KB [-80.69%]
(6/183) 004.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\004.jpg
85.14 KB -> 47.87 KB [-43.77%]
(7/183) 005.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\005.jpg
69.26 KB -> 32.88 KB [-52.52%]
(8/183) 006.jpg -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\006.jpg
534.81 KB -> 491.10 KB [-8.17%]
(9/183) 007.png -> C:\Users\ME\Downloads\ComicMangaNovel\[APPROVED]\Joou to Shitateya by Scarlet Beriko\compressed\[Scarlet Beriko] Joou to Shitateya ch. 1 [Eng]\007.png
Then caesium-clt crashes. Every time on the 9th file. On Win 10, it just silently stops at file 9.
Could it be the length of the path name? - Maybe not, since I moved it closer to my user profile folder and it still crashed on file 9.
I used 2 computers, moved directories, made sure it wasn't my antivirus. Not sure what else to check. Also, what up with the [WARNING] 3: Empty input folder
error?
Hi,
I have noticed that when I input the Output Folder with a name that starts eactly as my input folder, the compression throws the error "[ERROR] 12: Cannot set output folder inside the input one
".
I have attached a screenshot showing just that
But once you change the name slightly, it all works fine
What is it about the 6 files in my provided zip file nextfilewillcrash.zip that stops the process or causes the process to hang? (On a local Win10 system, using the 0.15.2-beta)
PS C:\Users\ME> caesiumclt -q 0 -RS -o "C:\Users\ME\Downloads\manga_factory\tst-cc" "C:\Users\ME\Downloads\manga_factory\testo"
Collecting files...
(1/10) 001.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.jpg
776.47 KB -> 769.36 KB [-0.92%]
(2/10) 001.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.png
509.36 KB -> 310.91 KB [-38.96%]
(3/10) 002.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.jpg
1.26 MB -> 1.25 MB [-0.55%]
(4/10) 002.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.png
656.82 KB -> 406.01 KB [-38.19%]
(5/10) 003.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.jpg
104.67 KB -> 97.56 KB [-6.79%]
(6/10) 003.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.png
546.47 KB -> 328.09 KB [-39.96%]
(7/10) 004.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.jpg
821.05 KB -> 813.94 KB [-0.87%]
(8/10) 004.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.png
565.50 KB -> 350.47 KB [-38.02%]
(9/10) 037.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\037.png
906.00 B -> 906.00 B [0.00%]
(10/10) 218.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\218.png
Compressing...
==================> PROGRAM ENDS
111.png
is a problem file and is followed by a known working JPG)PS C:\Users\ME> caesiumclt -q 0 -RS -o "C:\Users\ME\Downloads\manga_factory\tst-cc" "C:\Users\ME\Downloads\manga_factory\testo"
Collecting files...
(1/10) 001.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.jpg
776.47 KB -> 769.36 KB [-0.92%]
(2/10) 001.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.png
509.36 KB -> 310.91 KB [-38.96%]
(3/10) 002.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.jpg
1.26 MB -> 1.25 MB [-0.55%]
(4/10) 002.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.png
656.82 KB -> 406.01 KB [-38.19%]
(5/10) 003.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.jpg
104.67 KB -> 97.56 KB [-6.79%]
(6/10) 003.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.png
546.47 KB -> 328.09 KB [-39.96%]
(7/10) 004.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.jpg
821.05 KB -> 813.94 KB [-0.87%]
(8/10) 004.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.png
565.50 KB -> 350.47 KB [-38.02%]
(9/10) 111.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\111.png
906.00 B -> 906.00 B [0.00%]
(10/10) 112.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\112.jpg
821.05 KB -> 813.94 KB [-0.87%]
-------------------------------
Compression completed in 0m45s
5.94 MB -> 5.05 MB [-15.08% | -918.21 KB]
In order to get this successful process, I took one of the known working files in the same folder, copied and renamed it 112.jpg
so that it would immediately be processed after 111.png
. This causes the process to hang for a while. Without 111.png
the process takes 15 sec. By adding in 111.png
, it is lengthened to 45 sec.
PS C:\Users\ME> caesiumclt -q 0 -RS -o "C:\Users\ME\Downloads\manga_factory\tst-cc" "C:\Users\ME\Downloads\manga_factory\testo"
Collecting files...
(1/9) 001.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.jpg
776.47 KB -> 769.36 KB [-0.92%]
(2/9) 001.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.png
509.36 KB -> 310.91 KB [-38.96%]
(3/9) 002.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.jpg
1.26 MB -> 1.25 MB [-0.55%]
(4/9) 002.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.png
656.82 KB -> 406.01 KB [-38.19%]
(5/9) 003.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.jpg
104.67 KB -> 97.56 KB [-6.79%]
(6/9) 003.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.png
546.47 KB -> 328.09 KB [-39.96%]
(7/9) 004.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.jpg
821.05 KB -> 813.94 KB [-0.87%]
(8/9) 004.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.png
565.50 KB -> 350.47 KB [-38.02%]
(9/9) 112.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\112.jpg
821.05 KB -> 813.94 KB [-0.87%]
-------------------------------
Compression completed in 0m15s
5.94 MB -> 5.05 MB [-15.09% | -918.21 KB]
I also tried having a known working PNG follow the problem file. Again, the known working file is just a copy of one of the files in the same folder, renamed 112.png
to follow after 111.png
.
111.png
is a problem file and is followed by a known working PNG)PS C:\Users\ME> caesiumclt -q 0 -RS -o "C:\Users\ME\Downloads\manga_factory\tst-cc" "C:\Users\ME\Downloads\manga_factory\testo"
Collecting files...
(1/10) 001.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.jpg
776.47 KB -> 769.36 KB [-0.92%]
(2/10) 001.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\001.png
509.36 KB -> 310.91 KB [-38.96%]
(3/10) 002.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.jpg
1.26 MB -> 1.25 MB [-0.55%]
(4/10) 002.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\002.png
656.82 KB -> 406.01 KB [-38.19%]
(5/10) 003.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.jpg
104.67 KB -> 97.56 KB [-6.79%]
(6/10) 003.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\003.png
546.47 KB -> 328.09 KB [-39.96%]
(7/10) 004.jpg -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.jpg
821.05 KB -> 813.94 KB [-0.87%]
(8/10) 004.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\004.png
565.50 KB -> 350.47 KB [-38.02%]
(9/10) 111.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\111.png
906.00 B -> 906.00 B [0.00%]
(10/10) 112.png -> C:\Users\ME\Downloads\manga_factory\tst-cc\New folder - Copy\112.png
Compressing...
==================> PROGRAM ENDS
Here are some known working files (workingfiles.zip).
/caesium # caesiumclt -o /tmp ./toll.jpg
(1/1) toll.jpg -> /toll.jpg
1.23 MB -> 1.23 MB [-0.20%]
-------------------------------
Compression completed in 0m0s82ms
1.23 MB -> 1.23 MB [-0.20% | -2.47 KB]
Previous versions did place the image to /tmp/toll.jpg then. The current version doesn't do this.
After compressing 509 files caesium throws and error and exits.
[ERROR] 203: Failed to open JPEG file while compressing
[ERROR] 201: Failed to open input JPEG file while optimizing
No matter what group of images I run this against it always errors once it tries to work on the 510th file.
OS: Windows 10 64-bit
Version: current beta.
The standard way of installing software (especially open-source) one is via brew
and it seems that Caesium was not added to http://brew.sh
Now having one makes harder to people to install it and is also a sign of lack of maturity.
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.