···11-# Last.fm to ATProto Importer
11+# Malachite
2233Import your Last.fm and Spotify listening history to the AT Protocol network using the `fm.teal.alpha.feed.play` lexicon.
44···256256- **trackName**: The name of the track
257257- **artists**: Array of artist objects (requires `artistName`, optional `artistMbId` for Last.fm)
258258- **playedTime**: ISO 8601 timestamp of when you listened
259259-- **submissionClientAgent**: Identifies this importer (`lastfm-importer/v0.6.0`)
259259+- **submissionClientAgent**: Identifies this importer (`malachite/v0.6.0`)
260260- **musicServiceBaseDomain**: Set to `last.fm` or `spotify.com`
261261262262### Optional Fields
···283283 "recordingMbId": "3a390ad3-fe56-45f2-a073-bebc45d6bde1",
284284 "playedTime": "2025-11-13T23:49:36Z",
285285 "originUrl": "https://www.last.fm/music/Cjbeards/_/Paint+My+Masterpiece",
286286- "submissionClientAgent": "lastfm-importer/v0.6.0",
286286+ "submissionClientAgent": "malachite/v0.6.0",
287287 "musicServiceBaseDomain": "last.fm"
288288}
289289```
···301301 "releaseName": "Twenty",
302302 "playedTime": "2021-09-09T10:34:08Z",
303303 "originUrl": "https://open.spotify.com/track/3gZqDJkMZipOYCRjlHWgOV",
304304- "submissionClientAgent": "lastfm-importer/v0.6.0",
304304+ "submissionClientAgent": "malachite/v0.6.0",
305305 "musicServiceBaseDomain": "spotify.com"
306306}
307307```
···2727 * Get the state file path for an import
2828 */
2929export function getStateFilePath(inputFile: string, mode: string): string {
3030- const stateDir = path.join(os.homedir(), '.lastfm-importer', 'state');
3030+ const stateDir = path.join(os.homedir(), '.malachite', 'state');
31313232 // Create state directory if it doesn't exist
3333 if (!fs.existsSync(stateDir)) {