1
0

Update to an album-based collection

This commit is contained in:
Emilio Soriano Chávez 2025-05-02 17:31:04 -04:00
parent 46b18734b3
commit 8a8ef0b3b4
Signed by: ami
SSH Key Fingerprint: SHA256:UlDVD548E5BtoWT/dK3VZqCmHqcZ2Wlht2xKwZfNYVU
3 changed files with 65 additions and 50 deletions

View File

@ -1,56 +1,72 @@
# ---- Project Settings -------------------------------------------------------- # ---- Project Settings --------------------------------------------------------
B2_BUCKET = SSH_LOCATION =
PROJECT_NAME = CELLAR_BOTTLE =
PROJECT_ID =
INSTALL_DIR =
INSTALL_DIR = CELLAR_TRACKS = $(CELLAR_BOTTLE)/$(PROJECT_ID)/tracks
CELLAR_METADATA = $(CELLAR_BOTTLE)/$(PROJECT_ID)/metadata.csv
B2_TRACKS = $(B2_BUCKET)/$(PROJECT_NAME)/tracks CELLAR_ARTWORK = $(CELLAR_BOTTLE)/$(PROJECT_ID)/artwork.png
B2_ARTWORK = $(B2_BUCKET)/$(PROJECT_NAME)/artwork
# ---- Makefile Settings ------------------------------------------------------- # ---- Makefile Settings -------------------------------------------------------
TRACK_LIST := $(notdir $(shell b2 ls $(B2_TRACKS))) TRACK_LIST := $(shell ssh $(SSH_LOCATION) "ls $(CELLAR_TRACKS)")
FLAC_FILES := $(addprefix out/, $(addsuffix .flac, $(TRACK_LIST))) FLAC_FILES := $(addprefix out/, $(addsuffix .flac, $(TRACK_LIST)))
GREEN = \e[32m GREEN = \e[32m
CYAN = \e[36m CYAN = \e[36m
END = \e[0m END = \e[0m
.PHONY: all install .PHONY: all install clean setup
.PRECIOUS: out/%.flac
# ---- Pipeline ---------------------------------------------------------------- # ---- Pipeline ----------------------------------------------------------------
all: $(FLAC_FILES) all: setup install
install: setup:
@mamba run -n Instrumental_Music_Collection python src/install.py \ @printf "%b %s\n" "$(CYAN)[ > ]$(END) Create working directory structure"
-td out \ @mkdir -p data/tracks
-m data/metadata.csv \ @mkdir -p out/
-d "$(INSTALL_DIR)" @printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Create working directory structure"
data/tracks/%.track: data/tracks/%.track:
@printf "%b %s\n" "$(CYAN)[ > ]$(END) Download" "$(notdir $@)" @printf "%b %s\n" "$(CYAN)[ > ]$(END) Download" "$(notdir $@)"
@b2 file download --no-progress \ @rsync -az -s "$(SSH_LOCATION):$(CELLAR_TRACKS)/$(basename $(notdir $@))" "$@"
$(B2_BUCKET)/$(PROJECT_NAME)/tracks/$(basename $(notdir $@)) \
$@ > /dev/null
@printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Download" "$(notdir $@)" @printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Download" "$(notdir $@)"
data/artwork: data/metadata.csv:
@printf "%b\n" "$(CYAN)[ > ]$(END) Download Artwork" @printf "%b %s\n" "$(CYAN)[ > ]$(END) Download" "$(notdir $@)"
@mkdir -p $@ @rsync -az -s "$(SSH_LOCATION):$(CELLAR_METADATA)" "$@"
@b2 sync --no-progress \ @printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Download" "$(notdir $@)"
$(B2_ARTWORK) \
$@ > /dev/null
@printf "%b\n" "$(GREEN)[ ✓ ]$(END) Download Artwork"
out/%.flac: data/tracks/%.track data/metadata.csv | data/artwork data/artwork.png:
@printf "%b %s\n" "$(CYAN)[ > ]$(END) Download" "$(notdir $@)"
@rsync -az -s "$(SSH_LOCATION):$(CELLAR_ARTWORK)" "$@"
@printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Download" "$(notdir $@)"
out/%.flac: data/tracks/%.track data/metadata.csv data/artwork.png
@printf "%b %s\n" "$(CYAN)[ > ]$(END) Encode" "$(notdir $@)" @printf "%b %s\n" "$(CYAN)[ > ]$(END) Encode" "$(notdir $@)"
@mamba run -n Instrumental_Music_Collection python src/encode.py \ @python src/encode.py \
-t $< \ -t $< \
-id $(basename $(notdir $@)) \ -id $(basename $(notdir $@)) \
-m data/metadata.csv \ -m data/metadata.csv \
-a data/artwork \ -a data/artwork.png \
-o $@ -o $@
@printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Encode" "$(notdir $@)" @printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Encode" "$(notdir $@)"
install: $(FLAC_FILES)
@printf "%b %s\n" "$(CYAN)[ > ]$(END) Copy files to target directory"
@python src/install.py \
-td out/ \
-m data/metadata.csv \
-d "$(INSTALL_DIR)"
@printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Copy files to target directory"
# ---- Cleanup -----------------------------------------------------------------
clean:
@printf "%b %s\n" "$(CYAN)[ > ]$(END) Clean working directories"
@rm -rf out/
@rm -rf data/
@printf "%b %s\n" "$(GREEN)[ ✓ ]$(END) Clean working directories"

View File

@ -27,19 +27,19 @@ def encode():
required = True) required = True)
parser.add_argument( parser.add_argument(
"-m", "--metadata_file", "-m", "--metadata_file",
type=str, type = str,
help="Path to .csv metadata file.", help = "Path to .csv metadata file.",
required=True) required = True)
parser.add_argument( parser.add_argument(
"-a", "--artwork_dir", "-a", "--artwork_file",
type=str, type = str,
help="Path to directory containing artwork files.", help = "Path to .png artwork file.",
required=True) required = True)
parser.add_argument( parser.add_argument(
"-o", "--output_file", "-o", "--output_file",
type=str, type = str,
help="Path to .csv file to store individual sample metadata.", help = "Path to encoded output .flac file.",
required=True) required = True)
args = parser.parse_args() args = parser.parse_args()
metadata_df = pd.read_csv(args.metadata_file) metadata_df = pd.read_csv(args.metadata_file)
@ -90,13 +90,14 @@ def encode():
# Write the new metadata. # Write the new metadata.
cmd = [ cmd = [
"metaflac", "metaflac",
f"--set-tag=ALBUM={track_metadata['Album'].item()}", "--set-tag=ALBUM=Instrumental Music Collection",
"--set-tag=ALBUMARTIST=Various Artists",
f"--set-tag=ARTIST={track_metadata['Artist'].item()}", f"--set-tag=ARTIST={track_metadata['Artist'].item()}",
f"--set-tag=TITLE={track_metadata['Title'].item()}", f"--set-tag=TITLE={track_metadata['Title'].item()} [From {track_metadata['Album'].item()}]",
f"--set-tag=TRACKNUMBER={track_metadata['Track'].item()}", f"--set-tag=TRACKNUMBER={track_metadata['Track'].item()}",
f"--set-tag=DATE={track_metadata['Year'].item()}", f"--set-tag=DATE={track_metadata['Year'].item()}",
f"--set-tag=DISCNUMBER={track_metadata['Disc'].item()}", "--set-tag=DISCNUMBER=1",
f"--import-picture-from={args.artwork_dir}/{track_metadata['Artwork File'].item()}", f"--import-picture-from={args.artwork_file}",
args.output_file args.output_file
] ]
run_cmd(cmd) run_cmd(cmd)

View File

@ -39,24 +39,22 @@ def install():
for track in track_list: for track in track_list:
track_metadata = metadata_df[metadata_df["Code"] == track.split(".")[0]] track_metadata = metadata_df[metadata_df["Code"] == track.split(".")[0]]
# Create album directory (if it does not exist). # Create output directory (if it does not exist).
album_dir = os.path.join(args.dir, track_metadata["Album"].item())
cmd = [ cmd = [
"mkdir", "mkdir",
"-p", "-p",
album_dir args.dir
] ]
run_cmd(cmd) run_cmd(cmd)
# Copy song to target directory. # Copy song to target directory.
disc_number = track_metadata["Disc"].item()
track_number = track_metadata["Track"].item() track_number = track_metadata["Track"].item()
song_title = track_metadata["Title"].item() album_title = track_metadata["Album"].item().replace("/", " - ")
song_title = song_title.replace("/", " - ") song_title = track_metadata["Title"].item().replace("/", " - ")
track_path = os.path.join( track_path = os.path.join(
album_dir, args.dir,
f"{disc_number:>02}-{track_number:>02} {song_title}.flac") f"{track_number:>02} {song_title} [From {album_title}].flac")
cmd = [ cmd = [
"cp", "cp",