Compare commits
	
		
			1 commit
		
	
	
		
			86cac5f2f2
			...
			ba1b0b79be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						ba1b0b79be | 
					 7 changed files with 134 additions and 320 deletions
				
			
		
							
								
								
									
										212
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										212
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -49,9 +49,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstream"
 | 
			
		||||
version = "0.6.20"
 | 
			
		||||
version = "0.6.19"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
 | 
			
		||||
checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstyle",
 | 
			
		||||
 "anstyle-parse",
 | 
			
		||||
| 
						 | 
				
			
			@ -79,22 +79,22 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle-query"
 | 
			
		||||
version = "1.1.4"
 | 
			
		||||
version = "1.1.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
 | 
			
		||||
checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-sys 0.60.2",
 | 
			
		||||
 "windows-sys 0.59.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle-wincon"
 | 
			
		||||
version = "3.0.10"
 | 
			
		||||
version = "3.0.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
 | 
			
		||||
checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstyle",
 | 
			
		||||
 "once_cell_polyfill",
 | 
			
		||||
 "windows-sys 0.60.2",
 | 
			
		||||
 "windows-sys 0.59.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -198,11 +198,11 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "async-lock"
 | 
			
		||||
version = "3.4.1"
 | 
			
		||||
version = "3.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
 | 
			
		||||
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "event-listener 5.4.1",
 | 
			
		||||
 "event-listener 5.4.0",
 | 
			
		||||
 "event-listener-strategy",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ dependencies = [
 | 
			
		|||
 "async-task",
 | 
			
		||||
 "blocking",
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "event-listener 5.4.1",
 | 
			
		||||
 "event-listener 5.4.0",
 | 
			
		||||
 "futures-lite",
 | 
			
		||||
 "rustix",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -294,7 +294,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +416,7 @@ dependencies = [
 | 
			
		|||
 "ident_case",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -433,9 +433,9 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bytemuck"
 | 
			
		||||
version = "1.23.2"
 | 
			
		||||
version = "1.23.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677"
 | 
			
		||||
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bytes"
 | 
			
		||||
| 
						 | 
				
			
			@ -445,9 +445,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cc"
 | 
			
		||||
version = "1.2.32"
 | 
			
		||||
version = "1.2.30"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e"
 | 
			
		||||
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "shlex",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -475,9 +475,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap"
 | 
			
		||||
version = "4.5.45"
 | 
			
		||||
version = "4.5.42"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318"
 | 
			
		||||
checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "clap_builder",
 | 
			
		||||
 "clap_derive",
 | 
			
		||||
| 
						 | 
				
			
			@ -495,9 +495,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap_builder"
 | 
			
		||||
version = "4.5.44"
 | 
			
		||||
version = "4.5.42"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8"
 | 
			
		||||
checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstream",
 | 
			
		||||
 "anstyle",
 | 
			
		||||
| 
						 | 
				
			
			@ -507,14 +507,14 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap_derive"
 | 
			
		||||
version = "4.5.45"
 | 
			
		||||
version = "4.5.41"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
 | 
			
		||||
checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "heck 0.5.0",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -627,7 +627,7 @@ dependencies = [
 | 
			
		|||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "strsim",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -638,7 +638,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "darling_core",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -713,7 +713,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -789,9 +789,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "event-listener"
 | 
			
		||||
version = "5.4.1"
 | 
			
		||||
version = "5.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
 | 
			
		||||
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "concurrent-queue",
 | 
			
		||||
 "parking",
 | 
			
		||||
| 
						 | 
				
			
			@ -804,7 +804,7 @@ version = "0.5.4"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "event-listener 5.4.1",
 | 
			
		||||
 "event-listener 5.4.0",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -912,9 +912,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-lite"
 | 
			
		||||
version = "2.6.1"
 | 
			
		||||
version = "2.6.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
 | 
			
		||||
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "fastrand",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
| 
						 | 
				
			
			@ -931,7 +931,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -1006,9 +1006,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "h2"
 | 
			
		||||
version = "0.4.12"
 | 
			
		||||
version = "0.4.11"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
 | 
			
		||||
checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "atomic-waker",
 | 
			
		||||
 "bytes",
 | 
			
		||||
| 
						 | 
				
			
			@ -1025,9 +1025,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hashbrown"
 | 
			
		||||
version = "0.15.5"
 | 
			
		||||
version = "0.15.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
 | 
			
		||||
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "allocator-api2",
 | 
			
		||||
 "equivalent",
 | 
			
		||||
| 
						 | 
				
			
			@ -1419,7 +1419,7 @@ dependencies = [
 | 
			
		|||
 "reqwest",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "tabled",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "uuid",
 | 
			
		||||
| 
						 | 
				
			
			@ -1428,9 +1428,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indenter"
 | 
			
		||||
version = "0.3.4"
 | 
			
		||||
version = "0.3.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5"
 | 
			
		||||
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
| 
						 | 
				
			
			@ -1572,9 +1572,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libc"
 | 
			
		||||
version = "0.2.175"
 | 
			
		||||
version = "0.2.174"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
 | 
			
		||||
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libredox"
 | 
			
		||||
| 
						 | 
				
			
			@ -1619,18 +1619,18 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "logos"
 | 
			
		||||
version = "0.15.1"
 | 
			
		||||
version = "0.15.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154"
 | 
			
		||||
checksum = "ab6f536c1af4c7cc81edf73da1f8029896e7e1e16a219ef09b184e76a296f3db"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "logos-derive",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "logos-codegen"
 | 
			
		||||
version = "0.15.1"
 | 
			
		||||
version = "0.15.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c"
 | 
			
		||||
checksum = "189bbfd0b61330abea797e5e9276408f2edbe4f822d7ad08685d67419aafb34e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "beef",
 | 
			
		||||
 "fnv",
 | 
			
		||||
| 
						 | 
				
			
			@ -1639,14 +1639,14 @@ dependencies = [
 | 
			
		|||
 "quote",
 | 
			
		||||
 "regex-syntax",
 | 
			
		||||
 "rustc_version",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "logos-derive"
 | 
			
		||||
version = "0.15.1"
 | 
			
		||||
version = "0.15.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470"
 | 
			
		||||
checksum = "ebfe8e1a19049ddbfccbd14ac834b215e11b85b90bab0c2dba7c7b92fb5d5cba"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "logos-codegen",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -1785,7 +1785,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -1878,7 +1878,7 @@ dependencies = [
 | 
			
		|||
 "proc-macro2",
 | 
			
		||||
 "proc-macro2-diagnostics",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -1943,9 +1943,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "polling"
 | 
			
		||||
version = "3.10.0"
 | 
			
		||||
version = "3.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829"
 | 
			
		||||
checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "concurrent-queue",
 | 
			
		||||
| 
						 | 
				
			
			@ -1993,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		|||
checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2022,9 +2022,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro2"
 | 
			
		||||
version = "1.0.97"
 | 
			
		||||
version = "1.0.95"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
 | 
			
		||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -2037,7 +2037,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "version_check",
 | 
			
		||||
 "yansi",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -2084,8 +2084,8 @@ dependencies = [
 | 
			
		|||
 "schemars",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "thiserror 2.0.14",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "thiserror 2.0.12",
 | 
			
		||||
 "typify",
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -2105,7 +2105,7 @@ dependencies = [
 | 
			
		|||
 "serde_json",
 | 
			
		||||
 "serde_tokenstream",
 | 
			
		||||
 "serde_yaml",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2131,7 +2131,7 @@ checksum = "f2a62d85ed81ca5305dc544bd42c8804c5060b78ffa5ad3c64b0fb6a8c13d062"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2162,7 +2162,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "getrandom 0.2.16",
 | 
			
		||||
 "libredox",
 | 
			
		||||
 "thiserror 2.0.14",
 | 
			
		||||
 "thiserror 2.0.12",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2206,9 +2206,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "reqwest"
 | 
			
		||||
version = "0.12.23"
 | 
			
		||||
version = "0.12.22"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
 | 
			
		||||
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "base64 0.22.1",
 | 
			
		||||
 "bytes",
 | 
			
		||||
| 
						 | 
				
			
			@ -2324,9 +2324,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustversion"
 | 
			
		||||
version = "1.0.22"
 | 
			
		||||
version = "1.0.21"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
 | 
			
		||||
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ryu"
 | 
			
		||||
| 
						 | 
				
			
			@ -2375,7 +2375,7 @@ dependencies = [
 | 
			
		|||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "serde_derive_internals",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2433,7 +2433,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2444,7 +2444,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2487,7 +2487,7 @@ dependencies = [
 | 
			
		|||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2538,9 +2538,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "signal-hook-registry"
 | 
			
		||||
version = "1.4.6"
 | 
			
		||||
version = "1.4.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
 | 
			
		||||
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -2559,9 +2559,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "slab"
 | 
			
		||||
version = "0.4.11"
 | 
			
		||||
version = "0.4.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
 | 
			
		||||
checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "smallvec"
 | 
			
		||||
| 
						 | 
				
			
			@ -2632,9 +2632,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "syn"
 | 
			
		||||
version = "2.0.105"
 | 
			
		||||
version = "2.0.104"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619"
 | 
			
		||||
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
| 
						 | 
				
			
			@ -2658,7 +2658,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2749,11 +2749,11 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "thiserror"
 | 
			
		||||
version = "2.0.14"
 | 
			
		||||
version = "2.0.12"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e"
 | 
			
		||||
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "thiserror-impl 2.0.14",
 | 
			
		||||
 "thiserror-impl 2.0.12",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2764,18 +2764,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "thiserror-impl"
 | 
			
		||||
version = "2.0.14"
 | 
			
		||||
version = "2.0.12"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227"
 | 
			
		||||
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2839,9 +2839,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio"
 | 
			
		||||
version = "1.47.1"
 | 
			
		||||
version = "1.47.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
 | 
			
		||||
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "backtrace",
 | 
			
		||||
 "bytes",
 | 
			
		||||
| 
						 | 
				
			
			@ -2865,7 +2865,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -2890,9 +2890,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio-util"
 | 
			
		||||
version = "0.7.16"
 | 
			
		||||
version = "0.7.15"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
 | 
			
		||||
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
| 
						 | 
				
			
			@ -3059,8 +3059,8 @@ dependencies = [
 | 
			
		|||
 "semver",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "thiserror 2.0.14",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "thiserror 2.0.12",
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3077,7 +3077,7 @@ dependencies = [
 | 
			
		|||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "serde_tokenstream",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "typify-impl",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3167,9 +3167,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "uuid"
 | 
			
		||||
version = "1.18.0"
 | 
			
		||||
version = "1.17.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be"
 | 
			
		||||
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "getrandom 0.3.3",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
| 
						 | 
				
			
			@ -3198,7 +3198,7 @@ dependencies = [
 | 
			
		|||
 "aho-corasick",
 | 
			
		||||
 "base64 0.22.1",
 | 
			
		||||
 "logos",
 | 
			
		||||
 "thiserror 2.0.14",
 | 
			
		||||
 "thiserror 2.0.12",
 | 
			
		||||
 "time",
 | 
			
		||||
 "unicode-segmentation",
 | 
			
		||||
 "uriparse",
 | 
			
		||||
| 
						 | 
				
			
			@ -3273,7 +3273,7 @@ dependencies = [
 | 
			
		|||
 "log",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "wasm-bindgen-shared",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3308,7 +3308,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "wasm-bindgen-backend",
 | 
			
		||||
 "wasm-bindgen-shared",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -3397,7 +3397,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -3408,7 +3408,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -3652,7 +3652,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "synstructure",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3673,7 +3673,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
 "synstructure",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3694,7 +3694,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
| 
						 | 
				
			
			@ -3710,9 +3710,9 @@ dependencies = [
 | 
			
		|||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "zerovec"
 | 
			
		||||
version = "0.11.4"
 | 
			
		||||
version = "0.11.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
 | 
			
		||||
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "yoke",
 | 
			
		||||
 "zerofrom",
 | 
			
		||||
| 
						 | 
				
			
			@ -3727,5 +3727,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.105",
 | 
			
		||||
 "syn 2.0.104",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										175
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										175
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,83 +1,31 @@
 | 
			
		|||
# Immich Tools
 | 
			
		||||
# Immich CLI utilities
 | 
			
		||||
 | 
			
		||||
[](https://crates.io/crates/immich-tools)
 | 
			
		||||
[](LICENSE)
 | 
			
		||||
`immich-tools` is a small command-line utility interacting with an Immich server. It offers the following features:
 | 
			
		||||
 | 
			
		||||
`immich-tools` is a command-line utility for interacting with [Immich](https://immich.app), a self-hosted photo and
 | 
			
		||||
video backup solution. This tool provides various utilities to manage your Immich server from the command line.
 | 
			
		||||
 - List named faces that do not have an associated date of birth
 | 
			
		||||
 - Synchronise date of births from a vcard file
 | 
			
		||||
 - List and delete assets, including filtering offline assets only
 | 
			
		||||
 - Show details about the server
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
### Albums
 | 
			
		||||
- **List** all albums on your Immich server
 | 
			
		||||
- **Delete** albums (all or empty ones only)
 | 
			
		||||
- **Auto-create** albums from external libraries folder structure
 | 
			
		||||
- **List assets of an album** by album name
 | 
			
		||||
 | 
			
		||||
### Assets
 | 
			
		||||
- **List** assets (all or offline only)
 | 
			
		||||
- **Delete** assets (all or offline only)
 | 
			
		||||
 | 
			
		||||
### External libraries
 | 
			
		||||
- **List** all libraries
 | 
			
		||||
- **Scan** all libraries to detect new assets
 | 
			
		||||
 | 
			
		||||
### People
 | 
			
		||||
- **List** named faces that do not have an associated date of birth
 | 
			
		||||
- **Synchronize** dates of birth from a vCard file
 | 
			
		||||
 | 
			
		||||
### Server
 | 
			
		||||
- **Show** server version
 | 
			
		||||
- **Check** which server features are enabled
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
### From Crates.io
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cargo install immich-tools
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### From Source
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://git.enoent.fr/kernald/immich-tools.git
 | 
			
		||||
cd immich-tools
 | 
			
		||||
cargo build --release
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The binary will be available at `./target/release/immich-tools`.
 | 
			
		||||
Some other features are planned, mainly around using external libraries. Feature ideas and contributions welcome.
 | 
			
		||||
 | 
			
		||||
## Configuration
 | 
			
		||||
 | 
			
		||||
To connect to your Immich server, you need to provide:
 | 
			
		||||
Different options need to be passed to this tool, mainly:
 | 
			
		||||
 | 
			
		||||
- `server_url`: The API endpoint of your Immich instance (usually ends with `/api`)
 | 
			
		||||
- `api_key`: Your Immich API key (can be generated in the Immich web interface)
 | 
			
		||||
 - `server_url`: the API endpoint of the Immich instance to work on
 | 
			
		||||
 - `api_key`: the API key to use
 | 
			
		||||
 | 
			
		||||
These can be provided in several ways (in order of precedence):
 | 
			
		||||
These can be passed through different mechanisms:
 | 
			
		||||
 | 
			
		||||
1. **Command line arguments**:
 | 
			
		||||
   ```bash
 | 
			
		||||
   immich-tools --server-url https://photos.example.com/api --api-key your-api-key server version
 | 
			
		||||
   ```
 | 
			
		||||
 - Command line arguments, e.g. `immich-tools --server-url https://photos.example.com/api --api-key api-key-goes-here server version`
 | 
			
		||||
 - Environment variables prefixed with `IMMICH_TOOLS_`, e.g. `IMMICH_TOOLS_SERVER_URL=https://photos.example.com/api IMMICH_TOOLS_API_KEY=api-key-goes-here immich-tools server version`
 | 
			
		||||
 - Environment variables pointing to files, suffixed with `_FILE`, e.g. `IMMICHTOOLS_SERVER_URL_FILE=~/immich-url.txt IMMICH_TOOLS_API_KEY_FILE=~/immich-api-key.txt immich-tools server version`. This is mostly useful for secrets.
 | 
			
		||||
 - Through a configuration file, in a well-known, OS-dependent location (on Linux, `~/.config/immichtools/config.toml`, on macOS, `~/Library/Application Support/fr.enoent.Immich-Tools/config.toml`, and on Windows `~\AppData\Roaming\enoent\Immich Tools\config\config.toml`). Note that keys in this file can also be suffixed with `_file` and point to a file containing the value, instead of the value directly.
 | 
			
		||||
 | 
			
		||||
2. **Environment variables** (prefixed with `IMMICH_TOOLS_`):
 | 
			
		||||
   ```bash
 | 
			
		||||
   IMMICH_TOOLS_SERVER_URL=https://photos.example.com/api IMMICH_TOOLS_API_KEY=your-api-key immich-tools server version
 | 
			
		||||
   ```
 | 
			
		||||
Command line arguments take precedence over environment variables, which in turn take precedence over the configuration file.
 | 
			
		||||
 | 
			
		||||
3. **Environment variables pointing to files** (suffixed with `_FILE`):
 | 
			
		||||
   ```bash
 | 
			
		||||
   IMMICH_TOOLS_SERVER_URL_FILE=~/immich-url.txt IMMICH_TOOLS_API_KEY_FILE=~/immich-api-key.txt immich-tools server version
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. **Configuration file** in the OS-specific location:
 | 
			
		||||
   - Linux: `~/.config/immichtools/config.toml`
 | 
			
		||||
   - macOS: `~/Library/Application Support/fr.enoent.Immich-Tools/config.toml`
 | 
			
		||||
   - Windows: `~\AppData\Roaming\enoent\Immich Tools\config\config.toml`
 | 
			
		||||
 | 
			
		||||
### Example Configuration File
 | 
			
		||||
### Example configuration file
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
server_url = "https://photos.example.com/api"
 | 
			
		||||
| 
						 | 
				
			
			@ -87,91 +35,6 @@ api_key_file = "/home/example/.config/immichtools/apikey"
 | 
			
		|||
vcard = "/home/example/contacts.vcf"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage Examples
 | 
			
		||||
## Immich API bindings
 | 
			
		||||
 | 
			
		||||
### Albums
 | 
			
		||||
 | 
			
		||||
List all albums:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools albums list
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Delete empty albums:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools albums delete --empty
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Auto-create albums from folder structure:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools albums auto-create --album-name-separator "/"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
List assets belonging to a specific album (by album name):
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools albums list-assets --album "My Album"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Assets
 | 
			
		||||
 | 
			
		||||
List all assets:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools assets list
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
List offline assets only:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools assets list --offline
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Delete offline assets:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools assets delete --offline
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### External libraries
 | 
			
		||||
 | 
			
		||||
List all libraries:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools libraries list
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Scan all libraries for new assets:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools libraries scan
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### People
 | 
			
		||||
 | 
			
		||||
List people missing date of birth:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools people missing-date-of-births
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Sync dates of birth from vCard file:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools people sync-date-of-births --vcard /path/to/contacts.vcf
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Server
 | 
			
		||||
 | 
			
		||||
Show server version:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools server version
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Check enabled server features:
 | 
			
		||||
```bash
 | 
			
		||||
immich-tools server features
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Global Options
 | 
			
		||||
 | 
			
		||||
- `--dry-run`: Show what would be done without making any changes
 | 
			
		||||
- `--no-confirm`: Skip confirmation prompts
 | 
			
		||||
- `-v, --verbose`: Increase logging verbosity (can be used multiple times)
 | 
			
		||||
 | 
			
		||||
## Immich API Compatibility
 | 
			
		||||
 | 
			
		||||
The bindings are generated automatically from the Immich OpenAPI specification. The current version is compatible with
 | 
			
		||||
Immich v1.119.1, with some limitations around file upload operations (Progenitor doesn't yet support
 | 
			
		||||
`multipart/form-data` content types, see [this issue](https://github.com/oxidecomputer/progenitor/issues/518)).
 | 
			
		||||
The bindings are generated automatically from `src/immich-openapi-specs.json`. The file currently in the repo has been generated with Immich v1.119.1, with a few methods removed around file upload (Progenitor doesn't yet support `multipart/form-data` content types, see [here](https://github.com/oxidecomputer/progenitor/issues/518)). All other methods should be available.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -3,11 +3,11 @@
 | 
			
		|||
    "flake-compat": {
 | 
			
		||||
      "flake": false,
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1747046372,
 | 
			
		||||
        "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
 | 
			
		||||
        "lastModified": 1696426674,
 | 
			
		||||
        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
 | 
			
		||||
        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,11 +57,11 @@
 | 
			
		|||
    },
 | 
			
		||||
    "nixpkgs": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1754725699,
 | 
			
		||||
        "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
 | 
			
		||||
        "lastModified": 1753694789,
 | 
			
		||||
        "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
 | 
			
		||||
        "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,11 +80,11 @@
 | 
			
		|||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1754416808,
 | 
			
		||||
        "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
 | 
			
		||||
        "lastModified": 1750779888,
 | 
			
		||||
        "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "git-hooks.nix",
 | 
			
		||||
        "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
 | 
			
		||||
        "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,13 +95,6 @@ pub(crate) enum AlbumsCommands {
 | 
			
		|||
    /// List all albums
 | 
			
		||||
    #[serde(rename = "list")]
 | 
			
		||||
    List {},
 | 
			
		||||
    /// List all assets that belong to a specific album
 | 
			
		||||
    #[serde(rename = "list-assets")]
 | 
			
		||||
    ListAssets {
 | 
			
		||||
        /// Name of the album to list assets for
 | 
			
		||||
        #[arg(long)]
 | 
			
		||||
        album: String,
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Subcommand)]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,38 +0,0 @@
 | 
			
		|||
use crate::{
 | 
			
		||||
    actions::{
 | 
			
		||||
        action::Action, fetch_album_assets::FetchAlbumAssets, fetch_all_albums::FetchAllAlbums,
 | 
			
		||||
    },
 | 
			
		||||
    context::Context,
 | 
			
		||||
};
 | 
			
		||||
use color_eyre::eyre::{eyre, Result};
 | 
			
		||||
use tabled::{settings::Style, Table, Tabled};
 | 
			
		||||
 | 
			
		||||
#[derive(Tabled)]
 | 
			
		||||
struct AssetRow {
 | 
			
		||||
    #[tabled(rename = "Path")]
 | 
			
		||||
    original_file_path: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn list_album_assets(ctx: Context, album_name: &str) -> Result<()> {
 | 
			
		||||
    let albums = FetchAllAlbums::new(()).execute(&ctx).await?;
 | 
			
		||||
 | 
			
		||||
    let album = albums
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .find(|a| a.name == album_name)
 | 
			
		||||
        .ok_or_else(|| eyre!("Album not found: {}", album_name))?;
 | 
			
		||||
 | 
			
		||||
    let mut assets: Vec<_> = FetchAlbumAssets::new(album)
 | 
			
		||||
        .execute(&ctx)
 | 
			
		||||
        .await?
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .map(|asset| AssetRow {
 | 
			
		||||
            original_file_path: asset.original_path.to_string_lossy().to_string(),
 | 
			
		||||
        })
 | 
			
		||||
        .collect();
 | 
			
		||||
 | 
			
		||||
    assets.sort_by_key(|row| row.original_file_path.clone());
 | 
			
		||||
 | 
			
		||||
    println!("{}", Table::new(assets).with(Style::rounded()));
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
pub mod auto_create_albums;
 | 
			
		||||
pub mod delete_albums;
 | 
			
		||||
pub mod delete_assets;
 | 
			
		||||
pub mod list_album_assets;
 | 
			
		||||
pub mod list_albums;
 | 
			
		||||
pub mod list_assets;
 | 
			
		||||
pub mod list_libraries;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
#![allow(renamed_and_removed_lints)] // https://github.com/oxidecomputer/progenitor/issues/1169
 | 
			
		||||
include!(concat!(env!("OUT_DIR"), "/client.rs"));
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +16,6 @@ use color_eyre::Section;
 | 
			
		|||
use commands::auto_create_albums::auto_create_albums;
 | 
			
		||||
use commands::delete_albums::delete_albums;
 | 
			
		||||
use commands::delete_assets::delete_assets;
 | 
			
		||||
use commands::list_album_assets::list_album_assets;
 | 
			
		||||
use commands::list_albums::list_albums;
 | 
			
		||||
use commands::list_assets::list_assets;
 | 
			
		||||
use commands::list_libraries::list_libraries;
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +86,6 @@ async fn main() -> Result<()> {
 | 
			
		|||
            } => auto_create_albums(ctx, album_name_separator.to_string()).await,
 | 
			
		||||
            AlbumsCommands::Delete { empty } => delete_albums(ctx, *empty).await,
 | 
			
		||||
            AlbumsCommands::List {} => list_albums(ctx).await,
 | 
			
		||||
            AlbumsCommands::ListAssets { album } => list_album_assets(ctx, album).await,
 | 
			
		||||
        },
 | 
			
		||||
        Commands::Assets { assets_command } => match assets_command {
 | 
			
		||||
            AssetsCommands::Delete { offline } => delete_assets(ctx, *offline).await,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue