├── bootstrap.css ├── bootstrap.css.map ├── favicon.svg ├── fonts.css ├── fonts ├── Inconsolata-VF.woff2 └── Inter-roman.var.woff2 ├── index.html ├── privacy.html └── seeding.html /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 87 | -------------------------------------------------------------------------------- /fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Inter; 3 | src: url("fonts/Inter-roman.var.woff2?v=3.19") format("woff2"); 4 | font-style: normal; 5 | font-weight: 100 900; 6 | font-display: fallback; 7 | } 8 | 9 | @font-face { 10 | font-family: Inconsolata; 11 | src: url("fonts/Inconsolata-VF.woff2?v=3.000") format("woff2"); 12 | font-style: normal; 13 | font-weight: 275 900; 14 | font-stretch: 50% 200%; 15 | font-display: fallback; 16 | } 17 | 18 | :root { 19 | font-size: 14px; 20 | --bs-font-sans-serif: Inter, system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; 21 | --bs-font-monospace: Inconsolata, ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Source Code Pro", "Liberation Mono", monospace; 22 | --bs-blue: #2A7BDE; 23 | --bs-red: #C01C28; 24 | --bs-yellow: #A2734C; 25 | --bs-green: #26A269; 26 | --bs-cyan: #2AA1B3; 27 | --bs-gray: #5E5C64; 28 | --bs-primary: #2A7BDE; 29 | --bs-secondary: #5E5C64; 30 | --bs-success: #26A269; 31 | --bs-info: #2AA1B3; 32 | --bs-warning: #A2734C; 33 | --bs-danger: #C01C28; 34 | --bs-body-rgb: 0, 0, 0; 35 | --bs-primary-rgb: 42, 123, 222; 36 | --bs-secondary-rgb: 94, 92, 100; 37 | --bs-success-rgb: 38, 162, 105; 38 | --bs-info-rgb: 42, 161, 179; 39 | --bs-warning-rgb: 162, 115, 76; 40 | --bs-danger-rgb: 192, 28, 40; 41 | --bs-body-color: #000; 42 | } 43 | 44 | a { 45 | color: var(--bs-blue); 46 | } 47 | 48 | a:hover { 49 | color: #12488B; 50 | } 51 | 52 | samp, samp .form-control { 53 | font-weight: 500; 54 | } 55 | 56 | code { 57 | color: #c64600; 58 | } 59 | 60 | .btn-primary { 61 | background-color: var(--bs-primary); 62 | border-color: var(--bs-primary); 63 | } 64 | .btn-primary:focus, .btn-primary:hover { 65 | background-color: #12488B; 66 | border-color: #12488B; 67 | } 68 | 69 | .form-control, .form-control:focus { 70 | color: var(--bs-body-color); 71 | } 72 | 73 | .form-control[data-check="danger"] { 74 | border-color: var(--bs-danger); 75 | } 76 | .form-control[data-check="danger"]:focus { 77 | border-color: var(--bs-danger); 78 | box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); 79 | } 80 | .form-control[data-check="warning"] { 81 | border-color: var(--bs-warning); 82 | } 83 | .form-control[data-check="warning"]:focus { 84 | border-color: var(--bs-warning); 85 | box-shadow: 0 0 0 0.25rem rgba(var(--bs-warning-rgb), 0.25); 86 | } 87 | .form-control[data-check="info"] { 88 | border-color: var(--bs-info); 89 | } 90 | .form-control[data-check="info"]:focus { 91 | border-color: var(--bs-info); 92 | box-shadow: 0 0 0 0.25rem rgba(var(--bs-info-rgb), 0.25); 93 | } 94 | .form-control[data-check="success"] { 95 | border-color: var(--bs-success); 96 | } 97 | .form-control[data-check="success"]:focus { 98 | border-color: var(--bs-success); 99 | box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); 100 | } 101 | -------------------------------------------------------------------------------- /fonts/Inconsolata-VF.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kepstin/magicisrc/ec8010ddbf1fdbfaebde58564062fb22a56d1170/fonts/Inconsolata-VF.woff2 -------------------------------------------------------------------------------- /fonts/Inter-roman.var.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kepstin/magicisrc/ec8010ddbf1fdbfaebde58564062fb22a56d1170/fonts/Inter-roman.var.woff2 -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |The MagicISRC tool requires that Javascript is enabled. It runs completely in your web browser. For information about privacy and what data is stored and sent, please read the Privacy Policy.
1092 |It's also possible that I’ve made a mistake in the code, or the page isn’t compatible with your web browser. If you’re sure Javascript is enabled and you still see this page, please file an issue on Github.
1093 |If you use uBlock Origin to block Javascript, please ensure you clear your browser cache or reload the page while holding Shift after enabling Javascript to work around a caching issue.
1094 |The goal of this application is to allow batch-submission of ISRCs to MusicBrainz while storing the minimum amount possible of personally identifiable data. No data is sent to any third parties other than MusicBrainz, and persistent data is stored in your browser only as a result of choosing to log in. Note that your login to MusicBrainz and requests to load release information or submit ISRCs are subject to the MetaBrainz Privacy Policy.
33 |The following personal data is used by MagicISRC but is stored only in your web browser local storage. This data is never sent to the server hosting MagicISRC or to any third parties other than MusicBrainz:
35 |When you load a release, log in, or submit ISRCs, some data is sent to MusicBrainz. Please read the MetaBrainz Privacy Policy for details about what they do with this data. The following data may be sent to MusicBrainz:
41 |Like many other web services, I keep logs of all web requests made to this service. These logs are used for diagnostic and traffic management purposes, and no information from them is sent to any third party or made available publicly. The logs are deleted after 14 days, although anonymized aggregate traffic data may be preserved indefinitely. The following personal data is logged:
51 |URL of the loaded page.
55 |The URL may include the MBID of the selected MusicBrainz Release, and the data that you have filled into the ISRC fields.
56 |During the login process, a one-time authorization code is logged as part of the URL. This code cannot be used by itself to gain access to your account – The code verifier (stored only in your browser) is also required.
57 |
I encourage people who are building ISRC scanners or importer Userscripts for music store and streaming pages to use MagicISRC as an ISRC submission UI. If you do that, then you don't need to build an OAuth authentication system for the MusicBrainz API, and as a bonus the MagicISRC page includes a built-in edit preview, and detection for common problems like duplicated/shifted ISRCs.
33 |Browser userscript that allows reading barcodes, ISRCs, and other metadata from Apple Music releases.
40 | Github Repository 41 |Music Metadata Aggregator and MusicBrainz Importer. Look up release metadata from multiple sources and import the resulting combined release into MusicBrainz.
49 | Harmony 50 | Github Repository 51 |If you’re using MagicISRC to submit ISRCs to Musicbrainz in your app or userscript, please let me know so I can list it here!
59 | Open an issue on Github 60 |Contact me by opening an issue on Github if you find errors in this list, or to request removal from the list.
65 |MagicISRC supports seeding by appending GET parameters to the top-level URL https://magicisrc.kepstin.ca/
. This makes it easy to use from a Userscript or terminal application, since you just need to construct a link for the user to open in their web browser. The following parameters are supported.
mbid
musicbrainzid
The MusicBrainz Release ID.
71 |If not supplied, then MagicISRC will show the “Enter a release MBID:” form. Any supplied ISRCs will be applied after the user manually enters an MBID. The value of this parameter is not required to be a bare MBID – you can use a full MusicBrainz URL, for example. MagicISRC will search for some text that’s formatted like an MBID within the provided string.
72 |Using the parameter name musicbrainzid
may be helpful in some circumstances, since the name mbid
might be detected by browsers as a tracking parameter and removed from links.
isrcM-T
An ISRC, specified by Medium & Track.
77 |If you know both which medium and which track an ISRC is for, this is the recommended parameter format. Within the name of the parameter, M
is replaced with the medium index (counting from 1) and T
is replaced with the track index (counting from 1). CD pregap tracks are also supported, by using 0
as the track index.
Examples:
79 |isrcN
An ISRC, specified by sequential position.
86 |If you just have a list of ISRCs but you do not know how they are split between media, use this format. This parameter format is primarily supported for backwards compatibility with older ISRC submission tools – please use the Medium & Track format instead if possible. Within the name of the parameter, N
is replaced with the position (counting from 1). CD pregap tracks are not supported; they will be skipped in the numbering sequence.
edit-note
An edit note to include with the ISRC addition edit.
91 |See the MusicBrainz Edit Note documentation for detail on the use and formatting of an edit note, and How to Write Edit Notes for more information on what a good edit note should include.
92 |