Compare commits

..

34 commits

Author SHA1 Message Date
Renovate
70a6dc6cbf chore(deps): update actions/checkout action to v5
Some checks failed
Checking Renovate configuration / validate (pull_request) Failing after 1s
Build and test / Tests (pull_request) Failing after 1s
Build and test / Clippy (pull_request) Failing after 2s
Build and test / Build AMD64 (pull_request) Failing after 2s
Build and test / Generate Documentation (pull_request) Failing after 1s
Checking yaml / Run yamllint (pull_request) Failing after 2s
2025-11-01 14:37:54 +11:00
Renovate
f176d20433 fix(deps): update rust crate regress to v0.10.5
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 2m4s
Build and test / Tests (pull_request) Successful in 1m18s
Build and test / Clippy (pull_request) Successful in 4m47s
Build and test / Build AMD64 (pull_request) Successful in 4m12s
Build and test / Generate Documentation (pull_request) Successful in 1m54s
Checking yaml / Run yamllint (pull_request) Successful in 15s
2025-10-30 16:30:46 +11:00
Renovate
5ba2348179 fix(deps): update rust crate clap to v4.5.51
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 2m8s
Build and test / Clippy (pull_request) Successful in 1m46s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Build AMD64 (pull_request) Successful in 1m37s
Build and test / Generate Documentation (pull_request) Successful in 2m0s
Build and test / Tests (pull_request) Successful in 9m26s
2025-10-30 01:31:43 +11:00
Renovate
39025d369c fix(deps): update rust crate bon to v3
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 2m15s
Checking yaml / Run yamllint (pull_request) Successful in 16s
Build and test / Generate Documentation (pull_request) Successful in 3m23s
Build and test / Clippy (pull_request) Successful in 3m35s
Build and test / Tests (pull_request) Successful in 3m39s
Build and test / Build AMD64 (pull_request) Successful in 3m38s
2025-10-28 20:52:54 +11:00
Renovate
5d01cabf13 chore(deps): lock file maintenance
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m35s
Build and test / Tests (pull_request) Successful in 2m39s
Build and test / Clippy (pull_request) Successful in 1m21s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Build AMD64 (pull_request) Successful in 1m21s
Build and test / Generate Documentation (pull_request) Successful in 1m34s
2025-10-28 18:20:26 +11:00
Renovate
66b233718c fix(deps): update rust crate tokio to v1.48.0
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m21s
Build and test / Tests (pull_request) Successful in 3m13s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Clippy (pull_request) Successful in 3m20s
Build and test / Build AMD64 (pull_request) Successful in 3m30s
Build and test / Generate Documentation (pull_request) Successful in 2m28s
2025-10-27 18:32:11 +11:00
Renovate
ba9c28c43a chore(deps): update rust crate syn to v2.0.108
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m22s
Build and test / Clippy (pull_request) Successful in 3m8s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Build AMD64 (pull_request) Successful in 3m29s
Build and test / Tests (pull_request) Successful in 3m40s
Build and test / Generate Documentation (pull_request) Successful in 2m43s
2025-10-23 10:00:39 +11:00
Renovate
5795023b62 chore(deps): update rust crate syn to v2.0.107
All checks were successful
Build and test / Clippy (pull_request) Successful in 57s
Build and test / Tests (pull_request) Successful in 1m1s
Build and test / Build AMD64 (pull_request) Successful in 1m1s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Checking Renovate configuration / validate (pull_request) Successful in 1m32s
Build and test / Generate Documentation (pull_request) Successful in 1m19s
2025-10-19 04:00:41 +11:00
Renovate
8da5e1a124 fix(deps): update rust crate clap to v4.5.49
All checks were successful
Build and test / Clippy (pull_request) Successful in 35s
Build and test / Tests (pull_request) Successful in 43s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Build AMD64 (pull_request) Successful in 47s
Checking Renovate configuration / validate (pull_request) Successful in 1m26s
Build and test / Generate Documentation (pull_request) Successful in 1m3s
2025-10-14 10:00:40 +11:00
Renovate
4361390aa9 fix(deps): update rust crate reqwest to v0.12.24
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m10s
Build and test / Tests (pull_request) Successful in 3m8s
Checking yaml / Run yamllint (pull_request) Successful in 3s
Build and test / Clippy (pull_request) Successful in 2m49s
Build and test / Build AMD64 (pull_request) Successful in 2m38s
Build and test / Generate Documentation (pull_request) Successful in 2m28s
2025-10-14 09:31:16 +11:00
Renovate
1ae0d0ea16 chore(deps): update rust crate regex to v1.12.2
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m13s
Build and test / Tests (pull_request) Successful in 3m0s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Clippy (pull_request) Successful in 3m43s
Build and test / Build AMD64 (pull_request) Successful in 3m54s
Build and test / Generate Documentation (pull_request) Successful in 3m4s
2025-10-14 02:00:36 +11:00
Renovate
b282580eda chore(deps): update rust crate regex to v1.12.1
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m20s
Build and test / Tests (pull_request) Successful in 2m50s
Build and test / Build AMD64 (pull_request) Successful in 2m46s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Clippy (pull_request) Successful in 3m4s
Build and test / Generate Documentation (pull_request) Successful in 2m17s
2025-10-11 12:00:46 +11:00
Renovate
81b1f76088 chore(deps): update rust crate progenitor to v0.11.2
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 2m44s
Build and test / Clippy (pull_request) Successful in 3m19s
Checking yaml / Run yamllint (pull_request) Successful in 6s
Build and test / Tests (pull_request) Successful in 6m50s
Build and test / Build AMD64 (pull_request) Successful in 6m55s
Build and test / Generate Documentation (pull_request) Successful in 4m35s
2025-10-10 04:31:05 +11:00
Renovate
1e25142fa7 chore(deps): lock file maintenance
All checks were successful
Build and test / Tests (pull_request) Successful in 45s
Checking Renovate configuration / validate (pull_request) Successful in 1m17s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Build AMD64 (pull_request) Successful in 3m43s
Build and test / Generate Documentation (pull_request) Successful in 4m29s
Build and test / Clippy (pull_request) Successful in 5m9s
2025-10-06 00:01:32 +11:00
Renovate
df35ab850b chore(deps): lock file maintenance
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m23s
Build and test / Clippy (pull_request) Successful in 6m48s
Build and test / Tests (pull_request) Successful in 6m54s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Build AMD64 (pull_request) Successful in 7m6s
Build and test / Generate Documentation (pull_request) Successful in 6m6s
2025-09-29 13:01:01 +10:00
Renovate
b27b5afd9c fix(deps): update rust crate serde to v1.0.228
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m31s
Build and test / Clippy (pull_request) Successful in 3m18s
Build and test / Tests (pull_request) Successful in 3m24s
Checking yaml / Run yamllint (pull_request) Successful in 6s
Build and test / Build AMD64 (pull_request) Successful in 3m46s
Build and test / Generate Documentation (pull_request) Successful in 3m2s
2025-09-28 03:00:26 +10:00
Renovate
08fe4b1340 chore(deps): update rust crate regex to v1.11.3
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m39s
Build and test / Tests (pull_request) Successful in 1m51s
Checking yaml / Run yamllint (pull_request) Successful in 3s
Build and test / Clippy (pull_request) Successful in 4m37s
Build and test / Build AMD64 (pull_request) Successful in 7m48s
Build and test / Generate Documentation (pull_request) Successful in 6m23s
2025-09-25 23:00:25 +10:00
Renovate
9c8f2d02ce chore(deps): lock file maintenance
All checks were successful
Build and test / Tests (pull_request) Successful in 53s
Build and test / Clippy (pull_request) Successful in 1m8s
Checking yaml / Run yamllint (pull_request) Successful in 3s
Build and test / Build AMD64 (pull_request) Successful in 47s
Checking Renovate configuration / validate (pull_request) Successful in 1m29s
Build and test / Generate Documentation (pull_request) Successful in 1m13s
2025-09-21 11:19:12 +10:00
Renovate
7599029e3d fix(deps): update rust crate clap to v4.5.48
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m44s
Build and test / Clippy (pull_request) Successful in 5m16s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Build AMD64 (pull_request) Successful in 5m29s
Build and test / Tests (pull_request) Successful in 5m34s
Build and test / Generate Documentation (pull_request) Successful in 4m17s
2025-09-20 08:00:53 +10:00
387f99a356
Revert "chore: allow renamed_and_removed_lints until progenitor is updated"
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 2m46s
Build and test / Build AMD64 (pull_request) Successful in 8m31s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Tests (pull_request) Successful in 8m48s
Build and test / Clippy (pull_request) Successful in 8m47s
Build and test / Generate Documentation (pull_request) Successful in 7m20s
This reverts commit 07907b2ce2.
2025-09-15 18:55:31 +10:00
Renovate
4434b9922a chore(deps): update rust crate progenitor to v0.11.1
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 5m47s
Build and test / Build AMD64 (pull_request) Successful in 7m47s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Tests (pull_request) Successful in 8m12s
Build and test / Clippy (pull_request) Successful in 8m58s
Build and test / Generate Documentation (pull_request) Successful in 5m52s
2025-09-13 17:00:44 +10:00
Renovate
e01c43770b fix(deps): update rust crate chrono to v0.4.42
All checks were successful
Build and test / Clippy (pull_request) Successful in 1m1s
Build and test / Build AMD64 (pull_request) Successful in 1m2s
Build and test / Tests (pull_request) Successful in 1m6s
Checking Renovate configuration / validate (pull_request) Successful in 1m12s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Generate Documentation (pull_request) Successful in 52s
2025-09-08 19:00:32 +10:00
Renovate
cdf0a1173a fix(deps): update rust crate dialoguer to 0.12.0
All checks were successful
Build and test / Clippy (pull_request) Successful in 46s
Build and test / Build AMD64 (pull_request) Successful in 50s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Tests (pull_request) Successful in 59s
Checking Renovate configuration / validate (pull_request) Successful in 1m2s
Build and test / Generate Documentation (pull_request) Successful in 52s
2025-08-25 13:34:55 +10:00
Renovate
687a6d12d0 chore(deps): lock file maintenance
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 4m14s
Build and test / Clippy (pull_request) Successful in 5m0s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Tests (pull_request) Successful in 5m15s
Build and test / Generate Documentation (pull_request) Successful in 5m41s
Build and test / Build AMD64 (pull_request) Successful in 20m15s
2025-08-25 00:06:07 +10:00
Renovate
cad6018ae2 chore(deps): update rust crate serde_json to v1.0.143
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 5m54s
Checking yaml / Run yamllint (pull_request) Successful in 7s
Build and test / Tests (pull_request) Successful in 13m11s
Build and test / Clippy (pull_request) Successful in 1m24s
Build and test / Generate Documentation (pull_request) Successful in 1m46s
Build and test / Build AMD64 (pull_request) Successful in 1m56s
2025-08-19 15:11:34 +10:00
Renovate
a83b42b96b chore(deps): lock file maintenance
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 6m12s
Build and test / Build AMD64 (pull_request) Successful in 8m26s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Generate Documentation (pull_request) Successful in 3m36s
Build and test / Clippy (pull_request) Successful in 4m1s
Build and test / Tests (pull_request) Successful in 4m3s
2025-08-18 00:01:18 +10:00
Renovate
614080bf73 chore(deps): update rust crate syn to v2.0.106
All checks were successful
Build and test / Clippy (pull_request) Successful in 1m43s
Build and test / Tests (pull_request) Successful in 1m46s
Build and test / Build AMD64 (pull_request) Successful in 1m45s
Checking yaml / Run yamllint (pull_request) Successful in 6s
Checking Renovate configuration / validate (pull_request) Successful in 2m4s
Build and test / Generate Documentation (pull_request) Successful in 1m22s
2025-08-16 11:00:46 +10:00
Renovate
f205d39154 chore(deps): update rust crate syn to v2.0.105
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 7m8s
Build and test / Build AMD64 (pull_request) Successful in 10m39s
Checking yaml / Run yamllint (pull_request) Successful in 7s
Build and test / Tests (pull_request) Successful in 10m55s
Build and test / Clippy (pull_request) Successful in 10m59s
Build and test / Generate Documentation (pull_request) Successful in 1m25s
2025-08-14 02:38:00 +10:00
Renovate
9d233518f0 chore(deps): lock file maintenance
All checks were successful
Build and test / Clippy (pull_request) Successful in 1m18s
Checking Renovate configuration / validate (pull_request) Successful in 1m19s
Build and test / Tests (pull_request) Successful in 1m25s
Checking yaml / Run yamllint (pull_request) Successful in 5s
Build and test / Generate Documentation (pull_request) Successful in 1m7s
Build and test / Build AMD64 (pull_request) Successful in 52s
2025-08-13 15:35:50 +10:00
Renovate
41db15ffe8 fix(deps): update rust crate uuid to v1.18.0
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m49s
Build and test / Build AMD64 (pull_request) Successful in 2m1s
Build and test / Clippy (pull_request) Successful in 2m3s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Tests (pull_request) Successful in 2m15s
Build and test / Generate Documentation (pull_request) Successful in 1m1s
2025-08-13 15:30:24 +10:00
Renovate
775d3ac3d2 fix(deps): update rust crate clap to v4.5.45
All checks were successful
Build and test / Tests (pull_request) Successful in 1m33s
Build and test / Clippy (pull_request) Successful in 1m32s
Checking Renovate configuration / validate (pull_request) Successful in 1m38s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Generate Documentation (pull_request) Successful in 57s
Build and test / Build AMD64 (pull_request) Successful in 6m57s
2025-08-13 15:21:19 +10:00
Renovate
aa18fc3525 fix(deps): update rust crate reqwest to v0.12.23
All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m48s
Build and test / Tests (pull_request) Successful in 1m52s
Checking yaml / Run yamllint (pull_request) Successful in 4s
Build and test / Build AMD64 (pull_request) Successful in 1m54s
Build and test / Clippy (pull_request) Successful in 1m55s
Build and test / Generate Documentation (pull_request) Successful in 58s
2025-08-13 15:06:10 +10:00
9ad599a2b4
feat: list assets per album
All checks were successful
Build and test / Build AMD64 (pull_request) Successful in 1m16s
Build and test / Tests (pull_request) Successful in 1m25s
Checking Renovate configuration / validate (pull_request) Successful in 1m55s
Checking yaml / Run yamllint (pull_request) Successful in 36s
Build and test / Clippy (pull_request) Successful in 31s
Build and test / Generate Documentation (pull_request) Successful in 55s
2025-08-13 14:47:33 +10:00
07907b2ce2
chore: allow renamed_and_removed_lints until progenitor is updated
All checks were successful
Build and test / Build AMD64 (pull_request) Successful in 1m23s
Build and test / Tests (pull_request) Successful in 1m29s
Checking yaml / Run yamllint (pull_request) Successful in 6s
Checking Renovate configuration / validate (pull_request) Successful in 1m58s
Build and test / Generate Documentation (pull_request) Successful in 1m13s
Build and test / Clippy (pull_request) Successful in 4m25s
2025-08-13 14:41:10 +10:00
8 changed files with 479 additions and 415 deletions

818
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -12,12 +12,12 @@ keywords = ["immich"]
ignored = ["progenitor-client", "regress"]
[dependencies]
bon = "2.3.0"
bon = "3.0.0"
chrono = { version = "0.4.38", features = ["serde"] }
clap = { version = "4.5.20", features = ["derive"] }
clap-verbosity-flag = "2.2.2"
color-eyre = "0.6.3"
dialoguer = "0.11.0"
dialoguer = "0.12.0"
directories = "6.0.0"
figment = { version = "0.10.19", features = ["env", "toml"] }
figment_file_provider_adapter = "0.1.1"

View file

@ -12,6 +12,7 @@ video backup solution. This tool provides various utilities to manage your Immic
- **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)
@ -105,6 +106,11 @@ Auto-create albums from folder structure:
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:

18
flake.lock generated
View file

@ -3,11 +3,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
@ -57,11 +57,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1753939845,
"narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=",
"lastModified": 1761373498,
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "94def634a20494ee057c76998843c015909d6311",
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
@ -80,11 +80,11 @@
]
},
"locked": {
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"lastModified": 1760663237,
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
"type": "github"
},
"original": {

View file

@ -95,6 +95,13 @@ 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)]

View file

@ -0,0 +1,38 @@
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(())
}

View file

@ -1,6 +1,7 @@
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;

View file

@ -16,6 +16,7 @@ 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;
@ -86,6 +87,7 @@ 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,