{"schema_version":1,"metadata":{"branch":"release","release":"7.9","architecture":"amd64","generated_at":"2026-09-09T04:04:02.361425+00:00","source_url":"https://cdn.openbsd.org/pub/OpenBSD/7.9/packages/amd64/sqlports-7.54.tgz","source_sha256":"2de00144847bf9da3a365be982f101dbb55d591ed7a915ea94984a16ab0e0404","package_count":12059,"source_kind":"sqlports"},"package":{"name":"beets-2.8.0","path":"audio/beets","url":"/packages/release/audio/beets/","comment":"CLI tools to manage music collections","homepage":"https://beets.io/","maintainer":"Kirill A. Korinsky <kirill@korins.ky>","description":"The purpose of beets is to get your music collection right once and for\nall. It catalogs your collection, automatically improving its metadata\nas it goes using the MusicBrainz database. Then it provides a bouquet of\ntools for manipulating and accessing your music.\n\nIf you plan to use plugins, please make sure that you have all necessary\ndependencies installed.\n\nFeatures include:\n\n- Fetch or calculate metadata: album art, lyrics, genres, tempos,\nReplayGain levels, or acoustic fingerprints.\n\n- Get metadata from MusicBrainz, Discogs, or Beatport. Or guess metadata\nusing songs' filenames or their acoustic fingerprints.\n\n- Transcode audio.\n\n- Check your library for duplicate tracks and albums or for albums\nthat are missing tracks.\n\n- Browse your music library graphically through a Web browser and play\nit in any browser that supports HTML5 Audio.\n","package_architecture":"amd64","stem":"beets","readme":{"url":"/packages/data/43/430bd7917afbd8338cd6bfee532866c9498942e0fd7b056511f6e5e4436ca010.json","unresolved":[]},"dependencies":[{"path":"textproc/py-confuse","type":"runtime","package_spec":"","url":"/packages/release/textproc/py-confuse/"},{"path":"textproc/py-jellyfish","type":"runtime","package_spec":"","url":"/packages/release/textproc/py-jellyfish/"},{"path":"math/py-lap","type":"runtime","package_spec":"","url":"/packages/release/math/py-lap/"},{"path":"audio/py-mediafile","type":"runtime","package_spec":"","url":"/packages/release/audio/py-mediafile/"},{"path":"math/py-numpy","type":"runtime","package_spec":"","url":"/packages/release/math/py-numpy/"},{"path":"sysutils/py-packaging","type":"runtime","package_spec":"","url":"/packages/release/sysutils/py-packaging/"},{"path":"sysutils/py-platformdirs","type":"runtime","package_spec":"","url":"/packages/release/sysutils/py-platformdirs/"},{"path":"textproc/py-yaml","type":"runtime","package_spec":"","url":"/packages/release/textproc/py-yaml/"},{"path":"devel/py-typing-extensions","type":"runtime","package_spec":"","url":"/packages/release/devel/py-typing-extensions/"},{"path":"textproc/py-unidecode","type":"runtime","package_spec":"","url":"/packages/release/textproc/py-unidecode/"},{"path":"www/py-beautifulsoup4","type":"runtime","package_spec":"","url":"/packages/release/www/py-beautifulsoup4/"},{"path":"textproc/py-langdetect","type":"runtime","package_spec":"","url":"/packages/release/textproc/py-langdetect/"},{"path":"audio/py-mutagen","type":"runtime","package_spec":"","url":"/packages/release/audio/py-mutagen/"},{"path":"graphics/py-Pillow","type":"runtime","package_spec":"","url":"/packages/release/graphics/py-Pillow/"},{"path":"audio/py-acoustid","type":"runtime","package_spec":"","url":"/packages/release/audio/py-acoustid/"},{"path":"audio/py-last","type":"runtime","package_spec":"","url":"/packages/release/audio/py-last/"},{"path":"audio/py-discogs-client","type":"runtime","package_spec":"","url":"/packages/release/audio/py-discogs-client/"},{"path":"devel/py-xdg","type":"runtime","package_spec":"","url":"/packages/release/devel/py-xdg/"},{"path":"archivers/py-rarfile","type":"runtime","package_spec":"","url":"/packages/release/archivers/py-rarfile/"},{"path":"www/py-requests","type":"runtime","package_spec":"","url":"/packages/release/www/py-requests/"},{"path":"www/py-requests-oauthlib","type":"runtime","package_spec":"","url":"/packages/release/www/py-requests-oauthlib/"},{"path":"www/py-requests-ratelimiter","type":"runtime","package_spec":"","url":"/packages/release/www/py-requests-ratelimiter/"},{"path":"lang/python/3","type":"runtime","package_spec":"","url":"/packages/release/lang/python/3/"},{"path":"lang/python/3","type":"build","package_spec":"","url":"/packages/release/lang/python/3/"},{"path":"devel/py-build","type":"build","package_spec":"","url":"/packages/release/devel/py-build/"},{"path":"devel/py-installer","type":"build","package_spec":"","url":"/packages/release/devel/py-installer/"},{"path":"devel/py-poetry-core","type":"build","package_spec":"py3-poetry-core->=2.2.0","url":"/packages/release/devel/py-poetry-core/"},{"path":"archivers/py-rarfile","type":"test","package_spec":"","url":"/packages/release/archivers/py-rarfile/"},{"path":"audio/py-mpd2","type":"test","package_spec":"","url":"/packages/release/audio/py-mpd2/"},{"path":"devel/py-test-cov","type":"test","package_spec":"","url":"/packages/release/devel/py-test-cov/"},{"path":"www/py-flask","type":"test","package_spec":"","url":"/packages/release/www/py-flask/"},{"path":"www/py-requests-oauthlib","type":"test","package_spec":"","url":"/packages/release/www/py-requests-oauthlib/"},{"path":"www/py-responses","type":"test","package_spec":"","url":"/packages/release/www/py-responses/"},{"path":"textproc/py-confuse","type":"test","package_spec":"","url":"/packages/release/textproc/py-confuse/"},{"path":"textproc/py-jellyfish","type":"test","package_spec":"","url":"/packages/release/textproc/py-jellyfish/"},{"path":"math/py-lap","type":"test","package_spec":"","url":"/packages/release/math/py-lap/"},{"path":"audio/py-mediafile","type":"test","package_spec":"","url":"/packages/release/audio/py-mediafile/"},{"path":"math/py-numpy","type":"test","package_spec":"","url":"/packages/release/math/py-numpy/"},{"path":"sysutils/py-packaging","type":"test","package_spec":"","url":"/packages/release/sysutils/py-packaging/"},{"path":"sysutils/py-platformdirs","type":"test","package_spec":"","url":"/packages/release/sysutils/py-platformdirs/"},{"path":"textproc/py-yaml","type":"test","package_spec":"","url":"/packages/release/textproc/py-yaml/"},{"path":"devel/py-typing-extensions","type":"test","package_spec":"","url":"/packages/release/devel/py-typing-extensions/"},{"path":"textproc/py-unidecode","type":"test","package_spec":"","url":"/packages/release/textproc/py-unidecode/"},{"path":"www/py-beautifulsoup4","type":"test","package_spec":"","url":"/packages/release/www/py-beautifulsoup4/"},{"path":"textproc/py-langdetect","type":"test","package_spec":"","url":"/packages/release/textproc/py-langdetect/"},{"path":"audio/py-mutagen","type":"test","package_spec":"","url":"/packages/release/audio/py-mutagen/"},{"path":"graphics/py-Pillow","type":"test","package_spec":"","url":"/packages/release/graphics/py-Pillow/"},{"path":"audio/py-acoustid","type":"test","package_spec":"","url":"/packages/release/audio/py-acoustid/"},{"path":"audio/py-last","type":"test","package_spec":"","url":"/packages/release/audio/py-last/"},{"path":"audio/py-discogs-client","type":"test","package_spec":"","url":"/packages/release/audio/py-discogs-client/"},{"path":"devel/py-xdg","type":"test","package_spec":"","url":"/packages/release/devel/py-xdg/"},{"path":"www/py-requests","type":"test","package_spec":"","url":"/packages/release/www/py-requests/"},{"path":"www/py-requests-ratelimiter","type":"test","package_spec":"","url":"/packages/release/www/py-requests-ratelimiter/"},{"path":"lang/python/3","type":"test","package_spec":"","url":"/packages/release/lang/python/3/"},{"path":"devel/py-test","type":"test","package_spec":"","url":"/packages/release/devel/py-test/"}],"reverse_dependencies":{"count":0,"url":null},"categories":["audio","lang/python"],"flavors":[],"only_for_architectures":["aarch64","amd64","arm","i386","mips64","mips64el","powerpc","powerpc64","riscv64","alpha","hppa","sparc64"],"not_for_architectures":[]}}
