{"id":27841374,"url":"https://github.com/nesticle8bit/vinyl-scrobbler","last_synced_at":"2026-04-20T19:31:56.992Z","repository":{"id":285301785,"uuid":"957659640","full_name":"nesticle8bit/vinyl-scrobbler","owner":"nesticle8bit","description":"🎵 A Node.js CLI tool that bridges your vinyl collection to Last.fm. Automatically scrobble vinyl records from Discogs to your Last.fm profile with accurate timestamps and track information. Perfect for audiophiles who want to track their vinyl listening habits.","archived":false,"fork":false,"pushed_at":"2025-04-01T22:29:00.000Z","size":27,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T08:16:33.813Z","etag":null,"topics":["cli","command-line","command-line-tool","console-application","discogs","lastfm","nodejs","vinyl","vinyl-records"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nesticle8bit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-30T22:13:10.000Z","updated_at":"2025-06-30T11:41:58.000Z","dependencies_parsed_at":"2025-05-03T04:59:01.280Z","dependency_job_id":"ed526647-db3f-4b70-9198-c16b11685b39","html_url":"https://github.com/nesticle8bit/vinyl-scrobbler","commit_stats":null,"previous_names":["nesticle8bit/vinyl-scrobbler"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nesticle8bit/vinyl-scrobbler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesticle8bit%2Fvinyl-scrobbler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesticle8bit%2Fvinyl-scrobbler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesticle8bit%2Fvinyl-scrobbler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesticle8bit%2Fvinyl-scrobbler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nesticle8bit","download_url":"https://codeload.github.com/nesticle8bit/vinyl-scrobbler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesticle8bit%2Fvinyl-scrobbler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32062312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","command-line-tool","console-application","discogs","lastfm","nodejs","vinyl","vinyl-records"],"created_at":"2025-05-03T04:58:59.284Z","updated_at":"2026-04-20T19:31:56.974Z","avatar_url":"https://github.com/nesticle8bit.png","language":"JavaScript","funding_links":["https://www.buymeacoffee.com/nesticle8bit"],"categories":[],"sub_categories":[],"readme":"# 🎵 Vinyl Scrobbler CLI\n\n[![Buy Me A Coffee](https://img.shields.io/badge/buy_me_a_coffee-FFDD00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/nesticle8bit)\n\nScrobble vinyl tracks from [Discogs](https://www.discogs.com) to [Last.fm](https://www.last.fm) with accurate timestamps and metadata.\n\n[![MIT](https://img.shields.io/badge/license-MIT-blue)](#)\n[![NodeJS](https://img.shields.io/badge/Node.js-6DA55F?logo=node.js\u0026logoColor=white)](#)\n[![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript\u0026logoColor=000)](#)\n[![JSON](https://img.shields.io/badge/JSON-000?logo=json\u0026logoColor=fff)](#)\n\n![vinyl_scrobbler__50d22573538ab3](https://github.com/user-attachments/assets/b2cc4951-a110-4f92-a9a6-4b4354337023)\n*(Example workflow: fetching release data and scrobbling tracks)*\n\n## ✨ Features\n\n- **Discogs Integration**  \n  Fetch tracklists and metadata automatically\n- **Reverse Chronological Scrobbling**  \n  Tracks appear in correct order on Last.fm (newest first)\n- **Duration Parsing**  \n  Supports MM:SS and HH:MM:SS formats\n- **Dry Run Mode**  \n  Test without actually scrobbling\n- **Session Logging**  \n  JSON logs of all scrobbled releases\n- **Interactive Prompts**  \n  Confirm/edit metadata before scrobbling\n\n## 🛠 Installation\n\n1. Install Node.js (v14+ recommended):  \n   [https://nodejs.org/](https://nodejs.org/)\n\n2. Clone the repository:\n   ```bash\n   git clone https://github.com/nesticle8bit/vinyl-scrobbler.git\n   cd vinyl-scrobbler\n   ```\n\n3. Create a `.env` file with your API credentials:\n\n   ```bash\n   LASTFM_API_KEY=your_api_key\n   LASTFM_API_SECRET=your_api_secret\n   LASTFM_USERNAME=your_username\n   LASTFM_PASSWORD=your_password\n   DISCOGS_USER_TOKEN=your_discogs_token\n   ```\n\n## 🚀 Usage\n\nBasic Command:\n\n  ```bash\n  node .\\vinyl-scrobbler.js --album=DISCOGS_RELEASE_ID_OR_URL\n```\n\nOptions:\n\n| Flag         | Description                                    | Example            |\n| ------------ | ---------------------------------------------- | ------------------ |\n| `--album`    | Discogs release ID or URL                      | `--album=24132131` |\n| `--dry-run`  | Test without scrobbling                        | `--dry-run`        |\n| `--delay=MS` | Delay between scrobbles (default: 1000ms)      | `--delay=2000`     |\n| `--help`     | Show help                                      | `--help`           |\n\n## 🧑🏻‍🏫 Examples\n\n1. Scrobble with release ID:\n\n```bash\nnode vinyl-scrobbler.js --album=24132131\n```\n\n2. Dry run mode:\n\n```bash\nnode vinyl-scrobbler.js --album=24132131 --dry-run\n```\n\n3. Interactive mode (prompt for URL):\n\n```bash\nnode vinyl-scrobbler.js\n```\n\n## 📝 Logs\n\nScrobble sessions are saved to:\n`/logs/scrobbles_YYYY-MM-DD.json`\n\nExample log entry:\n\n```json\n[\n  {\n    \"timestamp\": \"2025-04-01T19:46:25.040Z\",\n    \"artist\": \"Wampyric Rites\",\n    \"album\": \"The Eternal Melancholy Of The Wampyre\",\n    \"url\": \"https://www.discogs.com/release/24132131\",\n    \"tracks\": [\n      {\n        \"position\": 1,\n        \"title\": \"Ancient Specters Of The Forlorn Forest\",\n        \"duration\": \"5:37\"\n      },\n      {\n        \"position\": 2,\n        \"title\": \"As Light Is Absorbed By Darkness\",\n        \"duration\": \"7:42\"\n      },\n      {\n        \"position\": 3,\n        \"title\": \"Tyrant's Blood\",\n        \"duration\": \"4:43\"\n      },\n      {\n        \"position\": 4,\n        \"title\": \"The Eternal Melancholy Of The Wampyre\",\n        \"duration\": \"8:12\"\n      },\n      {\n        \"position\": 5,\n        \"title\": \"Grim Funeral Inside The Dusty Dungeons Of Time\",\n        \"duration\": \"7:36\"\n      },\n      {\n        \"position\": 6,\n        \"title\": \"Under An Amethyst Sky\",\n        \"duration\": \"12:07\"\n      }\n    ]\n  }\n]\n```\n\n## ✅ Requirements\n\n  1. Node.js 14+\n  2. Last.fm API credentials\n  3. Discogs API token\n  4. A Discogs release URL for the vinyl you want to scrobble\n\n## ⚠️ Troubleshooting\n\nCommon Issues\n\n1. Chalk colors not working:\n\n  ```bash\n  npm uninstall chalk \u0026\u0026 npm install chalk\n  ```\n\n2. Cannot use import error:\nEnsure `package.json` contains:\n\n  ```json\n  {\n    \"type\": \"module\"\n  }\n  ```\n\nOr rename file to `.mjs` extension\n\n3. Missing environment variables:\n  \n  ```txt\n  Verify .env file exists with all required keys\n  ```\n\n## 🫶 Contributing\n\nContributions are welcome! Please open an issue or submit a pull request for any improvements.\n\n## 📜 License\nMIT © Julio Poveda\n\n\n---\n\n\n## ☕ Support the Project\n\n***Hi, I'm Julio Poveda** – a fullstack developer who crafts robust web symphonies by day and vinyl-scrobbling tools by night.*\n\n[![Buy Me A Coffee](https://img.shields.io/badge/buy_me_a_coffee-FFDD00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/nesticle8bit)\n\n`Your coffee keeps my IDE open and my turntable spinning!`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnesticle8bit%2Fvinyl-scrobbler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnesticle8bit%2Fvinyl-scrobbler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnesticle8bit%2Fvinyl-scrobbler/lists"}