I wanted to learn how does a Git repository with a significant amount of blob content (i.e., images) behave when it starts to adopt the use of Git LFS.

To start the experiment, I created a GitLab repository and started to populate it with some blob content from https://gegl.org/operations/images. I committed only a selection of those image files because my goal was to see how much the history of a file (changes, deletion) affects the total size instead of pushing the repo size to its limits.

The repo I created has the following history

cd27b73537a5d6dc6c550b91d0c647b379531559 Add 15 PNG images
09832f0c92ed29e1c1f450ef41ce0c6093577339 Update README
9e9d2ada58bdc808cfa52cf1f67f4de0cbced375 Add 22 PNG images
85902ccf6e73f3172b45a1f58193f6de5c0a8e92 Remove 8 PNG images
7e8d6e464bebe114239445c6f3b90bdcae1d37a0 Add 8 PNG images
b6c6107eac9ccb7de8926408f2d2fa7f41cb8468 Change 2 PNG images
dde8836c97388b255db25cebf4199ff714ca6fcc Add 3 PNG images
c54f9c38a9ce3cd161ce9c7cda5687a2c367726a Add 2 PNG images
27e2463fce42ccc82eb23a1a9320b01df640cb25 Initial commit

and the following file structure

; tree -a -L1
.
├── gegl-absolute.png
├── gegl-add.png
├── gegl-edge.png
├── gegl-emboss.png
├── gegl-mantiuk06.png
├── gegl-map-absolute.png
├── gegl-map-relative.png
├── gegl-matting-global.png
├── gegl-matting-levin.png
├── gegl-maze.png
├── gegl-mean-curvature-blur.png
├── gegl-median-blur.png
├── gegl-mirrors.png
├── gegl-mix.png
├── gegl-mono-mixer.png
├── gegl-mosaic.png
├── gegl-motion-blur-circular.png
├── gegl-motion-blur-linear.png
├── gegl-motion-blur-zoom.png
├── gegl-multiply.png
├── .git
├── .gitattributes
├── README.md
├── svg-clear.png
├── svg-color-burn.png
├── svg-color-dodge.png
├── svg-darken.png
├── svg-difference.png
├── svg-dst-atop.png
├── svg-dst-in.png
├── svg-dst-out.png
├── svg-dst-over.png
├── svg-dst.png
├── svg-exclusion.png
├── svg-hard-light.png
├── svg-lighten.png
├── svg-overlay.png
├── svg-plus.png
├── svg-screen.png
├── svg-src-atop.png
├── svg-src-in.png
├── svg-src-out.png
├── svg-src-over.png
├── svg-src.png
└── svg-xor.png

The total size of the repository (after cloning a freshly pushed revision), as reported by du -sh, is 8.8M.

Before we add LSF into the loop, let’s use git filter-repo --analyze to get a better idea of how the blobs affect the repository.

; cat .git/filter-repo/analysis/path-all-sizes.txt 
=== All paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name
      371240     371337 <present>  gegl-absolute.png
      310636     310718 <present>  gegl-add.png
      240147     240231 <present>  gegl-edge.png
      233061     233116 2025-09-09 gegl-whirl-pinch.png
      230614     230566 2025-09-09 gegl-wavelet-blur.png
      212271     212345 2025-09-09 gegl-wavelet-blur-1d.png
      203201     203050 <present>  gegl-mix.png
      201299     201365 2025-09-09 gegl-wind.png
      203853     184968 <present>  gegl-emboss.png
      179082     179129 <present>  svg-color-burn.png
      179047     179094 <present>  svg-difference.png
      178255     178302 <present>  svg-exclusion.png
      174454     174501 <present>  svg-darken.png
      172475     172522 2025-09-09 gegl-weighted-blend.png
      162784     162826 <present>  svg-dst-over.png
      162190     162214 2025-09-09 gegl-watershed-transform.png
      162171     162213 <present>  svg-hard-light.png
      161829     161871 <present>  svg-dst.png
      161563     161543 <present>  svg-src-atop.png
      159857     159899 <present>  svg-xor.png
      158151     158164 <present>  svg-src-over.png
      156130     156161 <present>  svg-overlay.png
      155179     155221 <present>  svg-dst-out.png
      153732     153774 <present>  svg-screen.png
      150686     150728 <present>  svg-color-dodge.png
      149290     149329 <present>  svg-lighten.png
      145362     145389 <present>  svg-plus.png
       61095      60624 <present>  svg-dst-atop.png
       60195      59732 <present>  svg-dst-in.png
       33754      31952 <present>  svg-src-in.png
       30100      28324 <present>  svg-src.png
       15005      14129 <present>  svg-src-out.png
        5527       5508 2025-09-09 gegl-waterpixels.png
        6415       2820 <present>  README.md
         880        282 <present>  svg-clear.png
         880        282 2025-09-09 gegl-warp.png

; cat .git/filter-repo/analysis/blob-shas-and-paths.txt 
=== Files by sha and associated pathnames in reverse size ===
Format: sha, unpacked size, packed size, filename(s) object stored as
  4da24b7db8f75185b9d14fc75887f52e5c298322     240147     240231 gegl-edge.png
  fc7402689622850cac1d40083772d3a67d9d1596     233061     233116 gegl-whirl-pinch.png
  0bc700231efcdb5cdee87d370dbf0f4c8b07edb1     230614     230566 gegl-wavelet-blur.png
  e4db420a41a4dcba3c4c3cfc6e0b5ca27d9eed03     212271     212345 gegl-wavelet-blur-1d.png
  dec0da64679bdaeeebcbfc6682ca04df17359c2f     209411     209466 gegl-absolute.png
  47124fec70468c56bfed2207099d18e92fc447a9     203201     203050 gegl-mix.png
  7c5be0c409f7cfa02757b1b9a46bf68a16a1a00e     201299     201365 gegl-wind.png
  a16b989ef596390e851978d3ced8d037ec4180e9     203853     184968 gegl-emboss.png
  6bc7f8ea7cf6bc566a0096b2b05239f74b555896     179082     179129 svg-color-burn.png
  5f75b8e1ea41a5c07dd26959a942ccfbf66b85a6     179047     179094 svg-difference.png
  20b11e18549987d30616778bdfb6c485ce3ce374     178255     178302 svg-exclusion.png
  8e75bb85c9dba476b509fe45a17288410b88a273     174454     174501 svg-darken.png
  c978c57b887a9e454a269d049fef1bc168e2525f     172475     172522 gegl-weighted-blend.png
  48f43567f4adf5d6c275307cab17584332e93520     162784     162826 svg-dst-over.png
  3927cafccf2f8c36de510745bb2b56b66dc6f845     162190     162214 gegl-watershed-transform.png
  c0461683630ba26c5cf01d9b2fb3433ffc173561     162171     162213 svg-hard-light.png
  b71a36b5e9c0332263e05e5b6381bb60acbc14be     161829     161871 [gegl-absolute.png, svg-dst.png]
  10039b888ce74ee8e51de9e8aa28b0f3686b71be     161563     161543 svg-src-atop.png
  263656d8307f054500b7220ccf47d96491cb31db     161429     161469 gegl-add.png
  64383a99e7b216cf11756b1bacf54b3831d99cf2     159857     159899 svg-xor.png
  2dc040dfd7972f83a3cf86638e1b28fa7c995554     158151     158164 svg-src-over.png
  34be8402b77d578a49fa2b1b536969e8c3efaf09     156130     156161 svg-overlay.png
  1b1bad6a3f54fd6147a41345298ad367d46e22cf     155179     155221 svg-dst-out.png
  04630ced51a85df0c6d0fee87371538af8231ada     153732     153774 svg-screen.png
  b9047d59f5caf61625b5679032dbc13a38835bff     150686     150728 svg-color-dodge.png
  c211cf0d2ad678b287b456a92f76ec8d2045cbd8     149290     149329 svg-lighten.png
  673f17a9168c417e918016d41fb4ad98a33192cd     149207     149249 gegl-add.png
  eff05256016dc4390c513c9c7100b4878bfd754e     145362     145389 svg-plus.png
  dc58d8237c3ef5a01517967a1ecc7c483b459839      61095      60624 svg-dst-atop.png
  04d6e9ec28111a12825a95d9a735d735637f3ddd      60195      59732 svg-dst-in.png
  b17d7ce0da64a5c0d61592f9f3cc1b152086ea64      33754      31952 svg-src-in.png
  ac0abd080f5701970bb2a7d85c0ac76b2a2a96af      30100      28324 svg-src.png
  a0169d75273ac7753bb4e21dc7475795474a0be9      15005      14129 svg-src-out.png
  88ac936e1d0583646f3a1786a6850f0536d2fd3f       5527       5508 gegl-waterpixels.png
  c9bb54b53b825bdae31b68951f122247de6be4ef       6154       2645 README.md
  fbc3fa34b08de66b07c95206b29562d825504dbc        880        282 [gegl-warp.png, svg-clear.png]
  e68f00d6215c6b87a68bb3448ee1e9b30279ae9d        261        175 README.md

Most of the size comes from the sheer number of PNG files but some noteworthy parts are related to images that have been deleted (e.g., gegl-wind.png) or have been updated (e.g., gegl-add.png). So, this would only get worse with the history of the file getting longer.

Let’s add LSF into the mix. The first step is that the extension needs to be installed. On Fedora it is packed as git-lfs. Then, LSF needs to be installed. What this means tells the documentation:

; git lfs install --help
git lfs install [options]

Perform the following actions to ensure that Git LFS is setup properly:

* Set up the clean and smudge filters under the name "lfs" in the global
  Git config.
* Install a pre-push hook to run git lfs pre-push for the current
  repository, if run from inside one. If "core.hooksPath" is configured in
  any Git configuration (and supported, i.e., the installed Git version is
  at least 2.9.0), then the pre-push hook will be installed to that
  directory instead.

This installation can be done globally, locally (i.e., in a repository) or per-worktree.

An important setting is --skip-smudge. Smudge refers to automatic download of objects from LSF on clone or pull. You want this setting to be set in your installation, if you do not want to pull objects automatically.

; cd

; git lfs install --skip-smudge
Git LFS initialized.

Now, let’s do the same but for the cloned repository and let’s set LFS to track .png files.

; cd lfs-playground

; git lfs install --local --skip-smudge
Updated Git hooks.
Git LFS initialized.

; git lfs track "*.png"
Tracking "*.png"

; git add ./*.png .gitattributes

; cat .gitattributes 
*.png filter=lfs diff=lfs merge=lfs -text

; git commit -m "Track PNG files using Git LFS"
[main 88a1c78] Track PNG files using Git LFS                                                                                                
 28 files changed, 1 insertion(+)                                                                                                           
 create mode 100644 .gitattributes

; du -sh ./
13M     ./

LFS uses the .gitattributes file to know which file types (or files) it should track. Keep track of it.

So… what’s the benefit now? The repository has (locally) increased in size, the PNG images are still in the repository, they are still being pulled on each clone and now I need to have LSF installed to even pull the repository.

Let’s take a look at the output of git clone.

; git clone git@ssh.gitlab.gnome.org:martymichal/lfs-playground.git lfs-playground-v2
Cloning into 'lfs-playground-v2'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 56 (delta 7), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (56/56), 4.92 MiB | 3.17 MiB/s, done.
Resolving deltas: 100% (7/7), done.
Encountered 27 files that should have been pointers, but weren't:
        gegl-absolute.png
        gegl-add.png
        gegl-edge.png
        gegl-emboss.png
        gegl-mix.png
        svg-clear.png
        svg-color-burn.png
        svg-color-dodge.png
        svg-darken.png
        svg-difference.png
        svg-dst-atop.png
        svg-dst-in.png
        svg-dst-out.png
        svg-dst-over.png
        svg-dst.png
        svg-exclusion.png
        svg-hard-light.png
        svg-lighten.png
        svg-overlay.png
        svg-plus.png
        svg-screen.png
        svg-src-atop.png
        svg-src-in.png
        svg-src-out.png
        svg-src-over.png
        svg-src.png
        svg-xor.png

Aha, LFS is enabled, tracks .png files but we still have files that are not PNGs. That’s because we had those already committed by the time LFS was enabled. How can they be converted to LFS pointers?

The most straightforward tool for this is git lfs migrate. It serves for migrating both to and from LFS. And it can do so either destructively by rewriting the repo history or non-destructively. Before trying to do the migration, we can see the state of the repository using git lfs migrate info:

; git lfs migrate info --everything
migrate: Sorting commits: ..., done.                                                                                     
migrate: Examining commits: 100% (10/10), done.                                                                          
*.png           5.3 MB  37/37 files     100%
*.md            6.4 KB    2/2 files     100%
*.gitattributes 42 B      1/1 file      100%

As expected, the most space is used by the PNG files. Let’s take a look at the non-destructive approach.

; git lfs migrate import --no-rewrite -m "Migrate PNG files to use LFS" *.png
migrate: override changes in your working copy?  All uncommitted changes will be lost! [y/N] y
migrate: changes in your working copy will be overridden ...
migrate: checkout: ..., done.

; git log --format=oneline
c587f933bfef4d27b9b04e8479381a9ad45faa10 (HEAD -> main) Migrate PNG files to use LFS
abec235a53ce7b8d1da5162c24b43583125a14e5 (origin/main, origin/HEAD) Track PNG files using Git LFS
84313a0ac89f77b9bca03a40ef412869d220da80 Update README
40bae48e551cc51c6e2d881d60cfc3162575034a Remove 8 PNG images
fb314f480c9fe6f3600eea08016075dd262b003b Add 22 PNG images
90510bec4aae5c3a3f159909fa62397e2babf64c Add 8 PNG images
c38b179b609e16db6aee2ff170bc9efca02286ee Change 2 PNG images
1943349b140c040ea535bb1e7dcb8eb4c6a17936 Add 3 PNG images
6b9ef2eb36bdfa9073455c91631c4f2087b0dcab Add 2 PNG images
53f17dcb7e6f77ddbf77fd443e98d0175563b8f6 Initial commit

Checking the size of the repository again with du -sh now reports 9.2M. We’re getting somewhere. How does clone behave now?

; git clone git@ssh.gitlab.gnome.org:martymichal/lfs-playground.git lfs-playground-v3
Cloning into 'lfs-playground-v3'...
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (83/83), done.
remote: Total 85 (delta 7), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (85/85), 4.92 MiB | 1.48 MiB/s, done.
Resolving deltas: 100% (7/7), done.

As expected, using a non-destructive import to LFS doesn’t solve the issue of the initial clone being too large. The blobs are still in the history of the repository. Let’s take a look at the destructive approach.

As the first step, let’s reset the last commit.

; git reset HEAD^ --hard
HEAD is now at abec235 Track PNG files using Git LFS
Encountered 27 files that should have been pointers, but weren't:
        gegl-absolute.png
        gegl-add.png
        gegl-edge.png
        gegl-emboss.png
        gegl-mix.png
        svg-clear.png
        svg-color-burn.png
        svg-color-dodge.png
        svg-darken.png
        svg-difference.png
        svg-dst-atop.png
        svg-dst-in.png
        svg-dst-out.png
        svg-dst-over.png
        svg-dst.png
        svg-exclusion.png
        svg-hard-light.png
        svg-lighten.png
        svg-overlay.png
        svg-plus.png
        svg-screen.png
        svg-src-atop.png
        svg-src-in.png
        svg-src-out.png
        svg-src-over.png
        svg-src.png
        svg-xor.png

abec235a53ce7b8d1da5162c24b43583125a14e5 (HEAD -> main) Track PNG files using Git LFS
84313a0ac89f77b9bca03a40ef412869d220da80 Update README
40bae48e551cc51c6e2d881d60cfc3162575034a Remove 8 PNG images
fb314f480c9fe6f3600eea08016075dd262b003b Add 22 PNG images
90510bec4aae5c3a3f159909fa62397e2babf64c Add 8 PNG images
c38b179b609e16db6aee2ff170bc9efca02286ee Change 2 PNG images
1943349b140c040ea535bb1e7dcb8eb4c6a17936 Add 3 PNG images
6b9ef2eb36bdfa9073455c91631c4f2087b0dcab Add 2 PNG images
53f17dcb7e6f77ddbf77fd443e98d0175563b8f6 Initial commit

The PNG images are, again, not LFS pointers. Let’s try to migrate in a destructive manner.

; git lfs migrate import --everything --include="*.png"
migrate: override changes in your working copy?  All uncommitted changes will be lost! [y/N] y
migrate: changes in your working copy will be overridden ...
migrate: Sorting commits: ..., done.
migrate: Rewriting commits: 100% (10/10), done.
  main  abec235a53ce7b8d1da5162c24b43583125a14e5 -> 5928889be5b6777a5f66b3dec5dd23374c382787
migrate: Updating refs: ..., done.                                        
migrate: checkout: ..., done.

; git log --format=oneline
5928889be5b6777a5f66b3dec5dd23374c382787 (HEAD -> main) Track PNG files using Git LFS
a7e249520e18698946cb0687accad12af9e740bd Update README
5eb47b1d266486ac8cab7bad4bdec9368396a28b Remove 8 PNG images
89121457214af460d9ef8e31454e5faf627aa2e8 Add 22 PNG images
c63ab6508c065cec01ff7ad2c1635e5f6afb2f91 Add 8 PNG images
528a14fc76bdf3b28eb634a3d01e72c31f6d381b Change 2 PNG images
abda7f9936c3c6ac10c847dbf85bb2ccb9de6e57 Add 3 PNG images
852ce3a97450542f201ac7251a9fe7b30e4c5f86 Add 2 PNG images
50cde5b4791f3f2085944d40692e826c3fa01bbd Initial commit

So, the whole history of the project is rewritten… not great. Let’s see the result of the migration on the initial clone.

; git clone git@ssh.gitlab.gnome.org:martymichal/lfs-playground.git lfs-playground-v4
Cloning into 'lfs-playground-v4'...
remote: Enumerating objects: 55, done.
remote: Counting objects: 100% (55/55), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 55 (delta 8), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (55/55), 9.71 KiB | 9.71 MiB/s, done.
Resolving deltas: 100% (8/8), done.

Much better! Since the repo is so small now, the pulled PNG images must be only pointers now.

; tree -h
[  848]  .
├── [  131]  gegl-absolute.png
├── [  131]  gegl-add.png
├── [  131]  gegl-edge.png
├── [  131]  gegl-emboss.png
├── [  131]  gegl-mix.png
├── [  261]  README.md
├── [  128]  svg-clear.png
├── [  131]  svg-color-burn.png
├── [  131]  svg-color-dodge.png
├── [  131]  svg-darken.png
├── [  131]  svg-difference.png
├── [  130]  svg-dst-atop.png
├── [  130]  svg-dst-in.png
├── [  131]  svg-dst-out.png
├── [  131]  svg-dst-over.png
├── [  131]  svg-dst.png
├── [  131]  svg-exclusion.png
├── [  131]  svg-hard-light.png
├── [  131]  svg-lighten.png
├── [  131]  svg-overlay.png
├── [  131]  svg-plus.png
├── [  131]  svg-screen.png
├── [  131]  svg-src-atop.png
├── [  130]  svg-src-in.png
├── [  130]  svg-src-out.png
├── [  131]  svg-src-over.png
├── [  130]  svg-src.png
└── [  131]  svg-xor.png

1 directory, 28 files

Exactly so. To get these actual files, one now needs to run git lfs pull explicitly.

; git lfs pull
Downloading LFS objects: 100% (27/27), 3.8 MB | 961 KB/s

; tree -h
[  848]  .
├── [ 205K]  gegl-absolute.png
├── [ 158K]  gegl-add.png
├── [ 235K]  gegl-edge.png
├── [ 199K]  gegl-emboss.png
├── [ 198K]  gegl-mix.png
├── [  261]  README.md
├── [  880]  svg-clear.png
├── [ 175K]  svg-color-burn.png
├── [ 147K]  svg-color-dodge.png
├── [ 170K]  svg-darken.png
├── [ 175K]  svg-difference.png
├── [  60K]  svg-dst-atop.png
├── [  59K]  svg-dst-in.png
├── [ 152K]  svg-dst-out.png
├── [ 159K]  svg-dst-over.png
├── [ 158K]  svg-dst.png
├── [ 174K]  svg-exclusion.png
├── [ 158K]  svg-hard-light.png
├── [ 146K]  svg-lighten.png
├── [ 152K]  svg-overlay.png
├── [ 142K]  svg-plus.png
├── [ 150K]  svg-screen.png
├── [ 158K]  svg-src-atop.png
├── [  33K]  svg-src-in.png
├── [  15K]  svg-src-out.png
├── [ 154K]  svg-src-over.png
├── [  29K]  svg-src.png
└── [ 156K]  svg-xor.png

1 directory, 28 files

And the repository size, as reported by du -sh, is now 7.6M. The difference between the original size and the current one must come from not having to keep track of the removed and updated images.

Running git filter-repo --analysis on the new repo yields

; cat .git/filter-repo/analysis/path-all-sizes.txt 
=== All paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name
        6415       2820 <present>  README.md
         262        240 <present>  gegl-add.png
         262        240 <present>  gegl-absolute.png
         131        122 <present>  svg-difference.png
         131        121 <present>  svg-plus.png
         131        121 <present>  svg-hard-light.png
         131        121 <present>  svg-exclusion.png
         131        121 2025-09-09 gegl-wind.png
         131        121 <present>  gegl-mix.png
         131        121 <present>  gegl-edge.png
         131        120 <present>  svg-xor.png
         130        120 <present>  svg-src-out.png
         130        120 <present>  svg-src-in.png
         131        120 <present>  svg-src-atop.png
         131        120 <present>  svg-screen.png
         131        120 <present>  svg-overlay.png
         131        120 <present>  svg-lighten.png
         131        120 <present>  svg-dst.png
         131        120 <present>  svg-dst-out.png
         130        120 <present>  svg-dst-in.png
         131        120 <present>  svg-darken.png
         131        120 <present>  svg-color-dodge.png
         131        120 <present>  svg-color-burn.png
         131        120 2025-09-09 gegl-whirl-pinch.png
         131        120 2025-09-09 gegl-weighted-blend.png
         131        120 2025-09-09 gegl-wavelet-blur-1d.png
         129        120 2025-09-09 gegl-waterpixels.png
         131        120 <present>  gegl-emboss.png
         130        119 <present>  svg-src.png
         131        119 <present>  svg-src-over.png
         131        119 <present>  svg-dst-over.png
         130        119 <present>  svg-dst-atop.png
         128        119 <present>  svg-clear.png
         131        119 2025-09-09 gegl-wavelet-blur.png
         131        119 2025-09-09 gegl-watershed-transform.png
         128        119 2025-09-09 gegl-warp.png
          42         45 <present>  .gitattributes

; cat .git/filter-repo/analysis/blob-shas-and-paths.txt 
=== Files by sha and associated pathnames in reverse size ===
Format: sha, unpacked size, packed size, filename(s) object stored as
  c9bb54b53b825bdae31b68951f122247de6be4ef       6154       2645 README.md
  e68f00d6215c6b87a68bb3448ee1e9b30279ae9d        261        175 README.md
  a91825ccde6a06eab85d675ad507ee903dc585bd        131        122 svg-difference.png
  d6994e2834dcd39977c1b25518dfb08f9b4e7142        131        121 svg-exclusion.png
  c89203eb4b2bd470b6a40862ce0fda22f008cc4e        131        121 gegl-edge.png
  bff68d1ae2bed842ef096461d72b29eb9cd7bd4d        131        121 svg-hard-light.png
  a727c8fccd5fc5c2a7ff5e66552fb51b14e9a11d        131        121 svg-plus.png
  63df66bb2949211365235bad8ac3b19d3fcc83cc        131        121 gegl-mix.png
  51649f7e083b56741b8762007a7cf2f96e3d5077        131        121 gegl-wind.png
  faa6aaf587e9aac5c1950da2a6addc9dec4eed1e        131        120 gegl-add.png
  efe58b0893bbb71b7151379d9e2052be859eb8aa        131        120 svg-xor.png
  ed36cc031bcdfe1fa4c77322f653c6609bd1fb11        131        120 svg-screen.png
  e707476248cc5e8ff26f7c2c3828094bc2eb5952        131        120 svg-lighten.png
  e2c4d3254ba55c3d50179793f383dd059002fbe2        131        120 svg-darken.png
  d9ea63e8e893f466bbff268080f8fc0525009685        131        120 gegl-absolute.png
  c2c571ff3f16f94ba76807e725139b9d4fac15d8        130        120 svg-src-out.png
  a8ce95a24d4c17f59ce2a66bbbe5500187b36968        129        120 gegl-waterpixels.png
  a574ac89cd0ec9b585c7cf4133dd5fe2fea5c26b        131        120 svg-color-burn.png
  a44356cdf3f828b273d3ec4602018bc5c17aa681        130        120 svg-src-in.png
  a379a3c6bf5527f60e7d72fcfd1ffaf1cfbdb684        131        120 svg-dst-out.png
  a0fe9266278c412db765a630b47a425df6ea4aeb        131        120 gegl-whirl-pinch.png
  9d8f9e7e51a5fae260d82372cde9529d30d31ab9        131        120 gegl-add.png
  8281720869e95833ac518004e0d8194f239014e2        131        120 svg-color-dodge.png
  689ff9704edaca3cdab19f41a07872fb6a7f8be9        131        120 svg-overlay.png
  540833d12f3b072a5d78ad41c1892acaa6c0b5e1        131        120 gegl-weighted-blend.png
  388225745a6ed7cb3d1a72ff93cd3233f3f38e47        131        120 svg-src-atop.png
  1ee8f1266eb3eb675bd502f40b5cc45983adcaff        131        120 gegl-wavelet-blur-1d.png
  1add3082540bffdf800820b6c19ff8a759e0263a        131        120 gegl-emboss.png
  140febdbf800f80e727047e318eb039b224b034b        130        120 svg-dst-in.png
  0c29560972496afde34de1ce5ad5b326572fb0c4        131        120 [gegl-absolute.png, svg-dst.png]
  c07873e6fd0042018ca493f7a9622027023c1582        128        119 [gegl-warp.png, svg-clear.png]
  b93ddce39c07fd4c78b0bf859d157eafb9c42efc        131        119 svg-dst-over.png
  9a395ffd9b0d4dc54ba19dbe70c384c7bdd3bd43        130        119 svg-src.png
  8e3a7f36af02582715a07cbaff6f98e2fa3f1496        130        119 svg-dst-atop.png
  7cc5d4f709cef89ea796933c636221fa43e9a927        131        119 gegl-watershed-transform.png
  5273c302e1e96c3d57fb07c6d29b0c5e77668aae        131        119 svg-src-over.png
  1e4c4f5d7e51166bc128dee571a69ee47654cadf        131        119 gegl-wavelet-blur.png
  24a8e87939aa53cdd833f6be7610cb4972e063ad         42         45 .gitattributes