Importing skipped albums: incremental_skipped_later not being observed properly?

Hi, I just started using beets and want to import my existing music collection, which is quite large.

My plan is to do two passes: first, import ‘quietly’ to let beets import all albums it can deal with, and skip problematic ones, and then second I will manually go over the skipped albums.

For the first pass, I ran beet import -qil log.txt /my/audio/folder/, and that seemed to work fine: beets imported all it could and skipped problematic ones.

However, for the second pass I tried turning off the quiet flag, expecting beets to only try to import the previously skipped albums: beet import -il log.txt /my/audio/folder/.
However, it just says No files imported from /my/audio/folder, and skips over everything.

Based on the documentation of incremental_skip_later, my understanding is that beets should try to import the skipped albums, since the default value is no:

Either yes or no , controlling whether skipped directories are recorded in the incremental list. When set to yes , skipped directories will be recorded, and skipped later. When set to no , skipped directories won’t be recorded, and beets will try to import them again later. Defaults to no .

Did I misunderstand something? Can someone help with how I should proceed?

Thanks in advance!

1 Like

Weird! I’m also surprised it worked like that; I would have expected that to work exactly how you wanted it to. This might be a bug—if this is repeatable, can you please file an issue on GitHub?

Thanks for your confirmation of the expected behaviour.
I digged into this further and filed the following issue:

I wish I had discovered this before spending the last 3 days to import my music collection :sweat_smile:

This is still giving me trouble. I don’t know what to do at this point. My plan is exactly as outlined as @indotoonster: first do a quiet pass and then do a thorough pass of the albums which were skipped.

First pass:
$ beet import V:\ -q -i -l R:\Vulture.txt

Subsequent passes:
$ beet import V:\ -i -l R:\Vulture.txt

I’ve tried this on smaller batches of my whole library with success using incremental_skip_later: yes. After running overnight on my entire library however, beets will read through every file (not just the ones it has skipped).

Here’s an example output of the second pass after running first in incremental mode:

$ beet import V:\ -i -l R:\Vulture.txt                                                      
                                                                                            
V:\ (1 items)                                                                               
Tagging:                                                                                    
    Floating Points - King Bromeliad / Montparnasse                                         
URL:                                                                                        
    https://www.discogs.com/Floating-Points-King-Bromeliad-Montparnasse/release/8610087     
(Similarity: 92.4%) (missing tracks) (Discogs, File, 2014, UK, Eglo Records)                
Missing tracks (1/2 - 50.0%):                                                               
 ! Montparnasse (# 2) (11:10)                                                               
[A]pply, More candidates, Skip, Use as-is, as Tracks, Group albums,                         
Enter search, enter Id, aBort? s                                                            

^This had already matched on the first pass, but beets is trying to process it again as though it were a new item.

V:\(1978)  Wilfred Luckie - My Thing {2018 Numero - NUM5428DIG1} [WEB FLAC] (1 items)       
Tagging:                                                                                    
    Wilfred Luckie - My Thing                                                               
URL:                                                                                        
    https://www.discogs.com/Wilfred-Luckie-My-Thing/release/5361638                         
(Similarity: 92.4%) (missing tracks) (Discogs, Vinyl, 1978, Trinidad & Tobago, Luckie, H-09)
Missing tracks (1/2 - 50.0%):                                                               
 ! Wait For Me (# 2)                                                                        
[A]pply, More candidates, Skip, Use as-is, as Tracks, Group albums,                         
Enter search, enter Id, aBort? s                                                            

^ This was an item which was already skipped (appearing in the log), and the behavior I would expect using incremental and incremental_skip_later

V:\(1980) with Paul Horn - Reflections (4 items)
Correcting tags from:
    Laura Allan - Reflections
To:
    Laura Allan with Paul Horn - Reflections
URL:
    https://www.discogs.com/Laura-Allan-with-Paul-Horn-Reflections/release/2383037
(Similarity: 90.9%) (artist) (Discogs, Vinyl, 1980, US, Unity Records (10), UR 707)
This album is already in the library!
Old: 4 items, FLAC, 665kbps, 39:22, 190.4 MiB
New: 4 items, FLAC, 665kbps, 39:22, 190.6 MiB
[S]kip new, Keep both, Remove old, Merge all? s

^This was already matched, but beets detected a size difference between the two versions, even though nothing was modified.

V:\(1999) Symbiotics (8 items)
Correcting tags from:
    Porter Ricks - Symbiotics
To:
    Porter Ricks : Techno Animal - Symbiotics
URL:
    https://www.discogs.com/Porter-Ricks-Techno-Animal-Symbiotics/release/94333
(Similarity: 93.7%) (artist) (Discogs, CD, 1999, Germany, Force Inc. Music Works, FIM-1-035)
This album is already in the library!
Old: 8 items, MP3, 233kbps, 58:42, 97.7 MiB
New: 8 items, MP3, 233kbps, 58:42, 97.7 MiB
[S]kip new, Keep both, Remove old, Merge all? s

^A similar example, however, there appears to be no difference in size.

My config is as follows:

# Beets configuration --------------------------------------------------------
directory: R:/Vulture
library: R:/Vulture.db

import:
    # write metadata to music files
    write: yes

    # move imported files from source to the music directory
    move: no
    copy: yes
    delete: no

    # use auto-tagging where possible
    # do not require confirmation on strong matches
    autotag: yes
    timid: no

    resume: no
    incremental_skip_later: yes
    none_rec_action: ask
    log:

    quiet: no  # enable with command line option
    quiet_fallback: skip
    default_action: apply

    singletons: no
    languages: en
    detail: no
    flat: no
    

# use the release-date of the original (first) release of an album?
original_date: yes

# on multi-disk releases, assign track numbers for the whole album.
# If "per disk", make sure tracknames do not collide ("paths" setting).
per_disc_numbering: no

# files matching these patterns are deleted from source after import
clutter: ["Thumbs.DB", ".DS_Store", "*.m3u", ".pls", "*.jpg", "*.png"]

# files/directories matching one of these patterns are ignored during import
ignore: [".*", "*~", "System Volume Information"]


# Paths ----------------------------------------------------------------------

# Paths and filenames for music files
# relative to music directory
paths:
    default: %asciify{$albumartist} - %asciify{$album} [%asciify{$original_year}] [%asciify{$label} - %asciify{$catalognum}] ($format) %aunique{} /$track %asciify{$title}
    singleton: %asciify{$artist} - %asciify{$album} [%asciify{$original_year}] [%asciify{$label} - %asciify{$catalognum}] ($format) %aunique{} /$track %asciify{$title}
    comp: Various Artists - %asciify{$album} [%asciify{$original_year}] [%asciify{$label} - %asciify{$catalognum}] ($format) %aunique{} /$track %asciify{$title}


# replace special characters in generated filenames
replace:
    '[\\/]': _
    '^\.': _
    '[\x00-\x1f]': _
    '[<>:"\?\*\|]': _
    '\.$': _
    '\s+$': ''

path_sep_replace: _

# filename for the album art
art_filename: cover  # results in "cover.jpg"

max_filename_length: 0  # unlimited


# General --------------------------------------------------------------------

# use mutliple threads during import
threaded: yes
timeout: 5.0
verbose: no


# User Interface -------------------------------------------------------------

color: yes
list_format_item: %upper{$artist} - $album - $track. $title
list_format_album: %upper{$albumartist} - $album
time_format: '%Y-%m-%d %H:%M:%S'
terminal_encoding: utf8

ui:
    terminal_width: 80
    length_diff_thresh: 10.0


# Auto Tagger ----------------------------------------------------------------

match:
    strong_rec_thresh: 0.3      # match 70% or better for auto import
    medium_rec_thresh: 0.25
    rec_gap_thresh: 0.25
    max_rec:
        missing_tracks: medium
        unmatched_tracks: medium
    distance_weights:
        source: 2.0
        artist: 3.0
        album: 3.0
        media: 1.0
        mediums: 1.0
        year: 1.0
        country: 0.5
        label: 0.5
        catalognum: 0.5
        albumdisambig: 0.5
        album_id: 5.0
        tracks: 2.0
        missing_tracks: 0.9
        unmatched_tracks: 0.6
        track_title: 3.0
        track_artist: 2.0
        track_index: 1.0
        track_length: 2.0
        track_id: 5.0
    preferred:
        countries: []
        media: []
        original_year: yes
    ignored: []
    track_length_grace: 10
    track_length_max: 30


# Plugins --------------------------------------------------------------------

plugins: [
    discogs,
    fetchart,
    lastgenre,
    scrub,
    mbsync,
    mpdupdate,
    missing,
    duplicates
]

# Plugins Config -------------------------------------------------------------

discogs:
    source_weight: 0.0
    
lastgenre:
    whitelist: \python\python37-32\lib\site-packages\beetsplug\lastgenre\genres.txt
    canoncical: \python\python37-32\lib\site-packages\beetsplug\lastgenre\genres-tree.yaml
    fallback: ''
    source: artist

fetchart:
    auto: yes
    maxwidth: 1200
    cautious: yes
    cover_names: cover folder front album
    sources: 
        - filesystem
        - coverart 
        - itunes 
        - amazon 
        - albumart 
        - google 
        - '*'


replaygain:
    auto: yes
    overwrite: yes
    albumgain: no

scrub:
    auto: yes

missing:
    format: $albumartist - $album - $track - $title
    count: no
    total: no

duplicates:
    checksum: no  # expensive
    
importadded:
    preserve_mtimes: yes
    preserve_write_mtimes: yes
    
inline:
  album_fields: 
    wcdbitrate: |
        total = 0
        for item in items:
            total += item.bitrate
        abr = total / len(items) / 1000  
        if abr > 480:
            return 'FLAC'
        elif abr < 480 and abr >= 320:
            return '320'
        elif abr < 320 and abr >= 220:
            return 'V0'  
        elif abr < 215 and abr >= 170 and abr != 192:
            return 'V2'
        elif abr == 192:
            return '192'
        elif abr < 170:
            return abr

Am I missing something obvious? I’m so close to having the setup perfect! Thanks in advance :grinning: