I started using Fedora KDE a couple of months ago and am a fan. I have no coding background, I have only scripted things a handful of times and have basic css knowledge. I would love to learn though and was hoping for guidance in making a daily wallpaper plugin. I already have the hosted images, one for each day of a year, and would like to learn how to put this together.
One thing to keep in mind would be that if you make changes in kdeplasma-addons, the preferred way of getting your plugin shipped would be by submitting a merge request on KDE Invent to get it shipped with Plasma directly. This will involve some additional scrutiny for code and wallpaper licensing (but also learning opportunites). Whereas QML wallpaper plugins on the KDE Store can be submitted by any third party, but need to be discovered and downloaded by each user individually.
The images in question are small/medium-sized web-friendly images. For the most part, the images won't be changed. The folder containing them will only grow in size as images are added. A concern is that the image folder may grow to a large size over time by combination of large images or a lot of images.
Are your images original work or can they be recovered (guaranteed?) from elsewhere? Are they needed to ship a software unit built from source? If they are original, they need backing up. Put them in your revision control, if they never change, the space penalty is the same as a backup, and they are where you need them.
Can they be edited to change the appearance of the software, accidentally or intentionally? Yes - then they MUST be revision controlled somehow, why use another way when you have a perfect solution already. Why introduce "copy and rename" version control from the dark ages?
I have seen an entire project's original artwork go "poof" when the graphics designer's MacBook hard drive died, all because someone, with infinite wisdom, decided that "binaries don't belong in rev control", and graphics designers (at least this one) don't tend to be good with backups.
This question is pretty old but this is a common question that comes up when dealing with Git and there has some progress on modern solutions to storing large files in a Git repo since the last answer.
Worst case, if you have tons, store them somewhere else or use externals or an extension for binary support. And if the images won't be changed that often, then where's the problem? You won't get a big fat delta. And if they get removed over time, it's only your server that suffers a bit from storing the history, but clients won't see a thing.
What you could do though, is only store "source" images: SVGs, LaTeX macros, etc... and have the final images generated by your build system.That's probably even better, if you can. If not, then don't bother.
The whole "don't store binaries in source control" is set forth for a specific reason: If you have source code that compiles, don't store the actual compilation, but just the source code. Images and visual assets do not have a "source," so they should be tracked in version control.
I believe the recommended way with Git is to use a sub-module (introduced in Git 1.5.3) which is basically a separate repository that is associated with the main one. You store your images (and other binary assets) in the sub-module. This can then be checked-out with the main repository or left, depending on what is required.
"Git's submodule support allows a repository to contain, as a subdirectory, a checkout of an external project. Submodules maintain their own identity; the submodule support just stores the submodule repository location and commit ID, so other developers who clone the containing project ("superproject") can easily clone all the submodules at the same revision. Partial checkouts of the superproject are possible: you can tell Git to clone none, some or all of the submodules."
If it is part of the Project, it has to be in the VCS. How to achieve this best may depend on the VCS, or how you organize a Project. Maybe a repo for the designers, and only the results in the coder's repo, or only the 'Image sources' (i once had a project with a only a .svg file, and the images where generated via make/inscape cli).
git is very good with text files, but by its very nature isn't too hot with binaries. You will have issues with the size of the data transferred when you clone or push, your .git directories will grow, and you could get in a right mess with merging (ie how do you merge 2 images!)
One answer is to use submodules, as this means the link between your project and the images will be weaker - so you won't have to manage the images as if they were part of your source, yet still keeping them controlled, and not having worries with branching them - assuming the subproject is just a 'flat' repository of data that doesn't go through the same churn during the usual development process.
The other answer is to put them in a different project, never branch it, and ensure that everyone who commits to that project pushes it upstream immediately - never let 2 people change the same version of the file - you'll find this the most difficult aspect as git isn't designed for such a non-distributed workflow. You'll have to use old-fashioned communication methods to enfore this rule.
Lets say you release software version 1.0. For version 2.0 you decide to redo all the pictures to be with shadows. So you do this, and release 2.0. Then some customer who is using 1.0 and cannot upgrade to 2.0 decides they want the program in another language. They give you $1G to do it, so you say sure. But in a different culture, some of your pictures do not make sense, so you have to change them...
If you would keep your images in source control, this is easy, based on 1.0 you make changes to images (among other things), build, release. If you did not have these in source control, you would have a much harder time, since you would have to find the old images, change them, and then build.
Adding to @haylem's answer, note that size plays a large factor in this. Depending on the VCS it might not work well with tons of images. When clones or large pushes starting taking all night then its really too late as all the images are already in your repository.
I definitely agree that technically and economically storing them is feasible. Question I would as is "are these images part of the shipping product or part of the content of a shipping product?" Not that you can't store content in GIT (or any other VCS) but that it is a separate problem for a separate VCS.
WebP is a modern image format that provides superior lossless andlossy compression for images on the web. Using WebP, webmasters and webdevelopers can create smaller, richer images that make the web faster.
Lossless WebP supports transparency (also known as alpha channel) at acost of just 22% additional bytes. For cases when lossy RGB compressionis acceptable, lossy WebP also supports transparency, typically providing3 smaller file sizes compared to PNG.
Lossy WebP compression uses predictive coding to encode an image, the samemethod used by the VP8 video codec to compress keyframes in videos. Predictivecoding uses the values in neighboring blocks of pixels to predict the valuesin a block, and then encodes only the difference.
A WebP file consists of VP8 or VP8L image data, and a containerbased on RIFF. The standalone libwebp library serves as a referenceimplementation for the WebP specification, and is available fromour git repository or as a tarball.
WebP is natively supported in Google Chrome, Safari, Firefox, Edge, the Operabrowser, and by many other tools and software libraries. Developers havealso added support to a variety of image editing tools.
WebP includes the lightweight encoding and decoding library libwebpand the command line tools cwebp and dwebp for convertingimages to and from the WebP format, as well as tools for viewing, muxing andanimating WebP images. The full source code is available on thedownload page.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
ImageMagick is widely used in industries such as web development, graphic design, and video editing, as well as in scientific research, medical imaging, and astronomy. Its versatile and customizable nature, along with its robust image processing capabilities, make it a popular choice for a wide range of image-related tasks.
ImageMagick includes a command-line interface for executing complex image processing tasks, as well as APIs for integrating its features into software applications. It is written in C and can be used on a variety of operating systems, including Linux, Windows, and macOS.
The main website for ImageMagick can be found at The most recent version available is ImageMagick 7.1.1-35. The source code for this software can be accessed through a repository. In addition, we maintain a legacy version of ImageMagick, version 6.
Creating a security policy that fits your specific local environment before making use of ImageMagick is highly advised. You can find guidance on setting up this policy. Also, it's important to verify your policy using the validation tool.
One of the key features of ImageMagick is its support for scripting and automation. This allows users to create complex image manipulation pipelines that can be run automatically, without the need for manual intervention. This can be especially useful for tasks that require the processing of large numbers of images, or for tasks that need to be performed on a regular basis.
In addition to its core image manipulation capabilities, ImageMagick also includes a number of other features, such as support for animation, color management, and image rendering. These features make it a versatile tool for a wide range of image-related tasks, including graphic design, scientific visualization, and digital art.
c80f0f1006