{"id":17025779,"url":"https://github.com/platers/mal-map","last_synced_at":"2025-04-13T06:42:23.301Z","repository":{"id":38441125,"uuid":"444964558","full_name":"platers/MAL-Map","owner":"platers","description":"Cluster and visualize relationships between anime on MyAnimeList","archived":false,"fork":false,"pushed_at":"2022-11-28T12:53:09.000Z","size":27408,"stargazers_count":237,"open_issues_count":8,"forks_count":14,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T11:55:14.703Z","etag":null,"topics":["anime","clustering","data-visualization"],"latest_commit_sha":null,"homepage":"https://www.malmap.net/","language":"TypeScript","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/platers.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}},"created_at":"2022-01-05T22:12:22.000Z","updated_at":"2025-03-19T05:16:44.000Z","dependencies_parsed_at":"2023-01-21T13:03:14.040Z","dependency_job_id":null,"html_url":"https://github.com/platers/MAL-Map","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platers%2FMAL-Map","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platers%2FMAL-Map/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platers%2FMAL-Map/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platers%2FMAL-Map/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/platers","download_url":"https://codeload.github.com/platers/MAL-Map/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675440,"owners_count":21143763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["anime","clustering","data-visualization"],"created_at":"2024-10-14T07:29:59.373Z","updated_at":"2025-04-13T06:42:23.283Z","avatar_url":"https://github.com/platers.png","language":"TypeScript","readme":"# MAL Map\n\nCluster and visualize relationships between anime on [MyAnimeList](https://myanimelist.net/).\n\n\u003c!-- Overview image --\u003e\n\n![](assets/overview.png)\n\n## Description\n\nMAL Map is a web application that visualizes anime relationships on [MyAnimeList](https://myanimelist.net/) and [AniList](https://anilist.co/home). Edges are extracted from the recomendations of users.\n\n#### Clustering\n\nThe graph is clustered with multi-level modularity clustering. Some clusters are merged to produce a simpler visualization.\n\n#### Layout\n\nThe map layout is generated by a [particle force simulation](https://github.com/d3/d3-force). At first all of the nodes are represented by a single particle. The simulation is then run for a number of iterations. Each iteration all particles are split into new particles, one for each sub-cluster. Appropriate forces are applied between particles to attract related clusters together. This process results in a visually pleasing layout. The layout process can be seen live [here](https://www.malmap.net/#animate=true).\n\n## Contributing\n\nPull requests are welcome!\n\n### Building\n\nMAL Map is two projects: a backend node app for collecting data and clustering, and a svelte frontend client. The frontend depends on some files in the backend and its outputs.\n\n#### Building the backend\n\n1. Open the `/data-collection` directory and run `npm ci` to install all dependencies.\n2. Python3 is used for clustering. Install `networkx` and `cdlib` with `pip install -r requirements.txt`.\n3. Run `npm run reset` to build and run the whole data pipeline. This will pull all data from MAL/Anilist and create various txt and json files for the frontend. Use `npm run layout` to skip the data collection step.\n\n#### Building the frontend\n\n1. Open the `/svelte` directory and run `npm ci` to install all dependencies.\n2. Run `npm run dev` to start a localhost server with live reloading. http://localhost:8080/#animate=true will show a live view of the layout.\n\n## Acknowledgements\n\n#### Clustering\n\n- https://cdlib.readthedocs.io/en/latest/\n\n#### Layout\n\n- [d3-force](https://github.com/d3/d3-force)\n- [d3-force-reuse](https://github.com/twosixlabs/d3-force-reuse)\n\n#### Frontend\n\n- [PIXI.js](https://www.pixijs.com/)\n- [PIXI Viewport](https://github.com/davidfig/pixi-viewport)\n- [Svelte](https://svelte.dev/)\n\n#### Data\n\n- [MyAnimeList API](https://myanimelist.net/apiconfig/references/api/v2)\n- [AniList API](https://anilist.gitbook.io/anilist-apiv2-docs/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaters%2Fmal-map","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplaters%2Fmal-map","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaters%2Fmal-map/lists"}