All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project attempts to adhere to Semantic Versioning.
3.0.0-beta.1 - 2026-03-18
- Drop support for Old Architecture.
- Changed strategy for the kind of image returned by
getArtwork().- Before, the priority was:
Cover (front),Other, and32x32 pixels 'file icon' (PNG only). - Now, the priority is:
Cover (front), "The first image found".
- Before, the priority was:
- Bumped AndroidX media3 to
1.9.3from1.9.1.
- Artwork not found for
.mp4file.MediaMetadataRetrieverdoes find the artwork via theembeddedPictureaccessor while the process involvingMetatdataRetrieverdoesn't.- ❗ This fix is only applied to
getArtwork(). ❗
- Rewrite app to use Turbo Native Modules.
- Bump CI action versions to use Node 24.
- Upgrade example app to Expo SDK 55 / RN 0.83.
2.5.0 - 2026-02-04
- Support
x/yformat fordiscNumberfor FLAC (via https://github.com/MissingCore/media/commit/56c92dc9e1e99e5083e0cdb314636d3343eda76c).
x/yformat fordiscNumber&trackNumbernow also populatetotalDiscCount&totalTrackCountfor FLAC.
- Improve reliability of reading JitPack dependency by using
https://jitpack.ioinstead ofhttps://www.jitpack.io.
2.4.0 - 2026-01-29
- Bumped AndroidX media3 to
1.9.1from1.8.0. - Update import of
MetadataRetrieverto new:media3-inspectormodule.
2.3.0 - 2026-01-23
- Add support for
discNumber&totalDiscCountfields for ID3 (via https://github.com/MissingCore/media/commit/2ef44ffa0f8d0789f80bd17914734a65d955591c).- Supports
x&x/yformats.
- Supports
2.2.1 - 2025-12-03
- Update to PNPM 10.
- Upgrade example app to Expo SDK 54 / RN 0.81.
2.2.0 - 2025-10-21
- Add support for
recordingDay,recordingMonth,recordingYearfields for.flacfiles.- I don't think this was supported with
MediaMetadataRetrieverfrom looking at the ExoPlayer2 code.
- I don't think this was supported with
2.2.0-beta.1 - 2025-10-21
Otherartwork classification not being saved.- Encountered a
.flacfile whose artwork was classified asOtherbut hadartworkDataType = -1.
- Encountered a
- Get
trackNumberfrom.flacfiles formatted asx/x(previously returnednull).
- Switch to using our fork of
androidx/media.- This allows us to patch in some fixes.
2.1.0 - 2025-09-29
- Build issues for New Architecture (CodeGen doesn't support imported types).
- Enable New Architecture in example app.
2.0.0 - 2025-09-26
- Flatten
examples/*to singleexamplefolder. - Use
BaseReactPackageinstead of deprecatedTurboReactPackage.
2.0.0-beta.2 - 2025-09-02
- Revised "compression" option for
saveArtwork. - Changed
ArtworkOptionstype.compressis now a number between0.0&1.0specifying the quality of the saved image (defaults to1).- New
formatoption specifying the file format the image will be saved as (defaults tojpeg).
2.0.0-beta.1 - 2025-09-02
- Remove additional fallback when getting the
yearmetadata field forMetadataRetrievermethod.- No longer fallbacks to using
MediaMetadataRetrieverif everything else fails.
- No longer fallbacks to using
- Remove
MediaMetadataPublicFieldsarray & type export.
- New
updateConfigsfunction.- Customize the max size of the returned base64 image with the
maxImageSizeMBoption.
- Customize the max size of the returned base64 image with the
- New
getBulkMetadatafunction.- Slightly different than
getMetadataas this function won't throw an error. It'll return an object with 2 fields,results&errorswhich contain an array of objects containing the URI & data/error associated with it.
- Slightly different than
- New
saveArtworkfunction.- Allows the user to save the embedded artwork to a file and optionally compress it to save on space.
- Reorganization of code.
- Now "normalize" and put all the field-value pairs inside a map, which we then send the ones we want to return.
- Ensure we release
MetadataRetriever&MediaMetadataRetrieverwhen we're done using them. - Updated example app to use
getBulkMetadata&saveArtworkinstead ofgetMetadata.
1.1.0 - 2025-08-21
- Bumped AndroidX media3 to
1.8.0from1.6.1.
- Bumped dependencies.
1.0.0 - 2025-07-06
- Removed deprecated
PrimaryDirectoryPath,StorageVolumesDirectoryPaths, andMusicDirectoryPath.- It seems like
getTypedExportedConstants(), which creates these constants caused crashes on some devices according to the Google Play Console.
- It seems like
- Bumped dependencies.
0.9.0 - 2025-05-24
- Bumped AndroidX media3 to
1.6.1from1.5.1. - Mark
PrimaryDirectoryPath&StorageVolumesDirectoryPathsas deprecated.- This library shouldn't care about where the media comes from and the fact that
StorageVolumesDirectoryPathsmight not return everything. - Will be removed in
v1.0.0.
- This library shouldn't care about where the media comes from and the fact that
- Fixed type errors breaking React Native 0.77 builds caused by upgrading Kotlin to v2.0 from v1.9.
- Validate that the New Architecture works in the example app.
- Required a workaround for CMAKE due to long paths in Windows.
- Validate compatibility with React Native 0.79 & Expo SDK 53.
0.8.0 - 2025-02-13
- We now also consider saving covers classified as
"32x32 pixels 'file icon' (PNG only)"when usinggetArtwork().- The order of priority is:
"Cover (front)"→"Other"→"32x32 pixels 'file icon' (PNG only)".
- The order of priority is:
0.7.5 - 2025-02-13
- Ensure we don't return
trackNumber = 0when getting the metadata usingMetadataRetriever.- This matches the behavior we do with
MediaMetadataRetriever.
- This matches the behavior we do with
0.7.4 - 2025-02-10
- Error thrown when trying to read metadata from a file that contains a
%in its filename.- If we had
%20in the filename, it'll get incorrectly decoded to a space (), resulting in the file not being found.
- If we had
0.7.3 - 2025-02-06
- Bumped AndroidX media3 to
1.5.1from1.5.0. - Release
MediaMetadataRetrieverresources ingetMetadata()after we're done with it.
- Issue where
MetadataRetrieverdoesn't find the disc & track number for.flacfiles. - Issue where
MediaMetadataRetrieverincorrectly parses some characters from.flacfiles.
0.7.2 - 2025-01-31
- Parsing issue with
yearmetadata field if we have an invalid value that's less than 4 characters long. - Error thrown when trying to read metadata from a file that contains a
?or#in its filename.
0.7.1 - 2024-12-10
- Add fallback to
PrimaryDirectoryPath&StorageVolumesDirectoryPathsto be"/storage/emulated/0"&["/storage/emulated/0"]respectively. - Mark
MusicDirectoryPathas deprecated mainly due to not specifying a fallback (ie: it may benull).- Will be removed in
v1.0.0.
- Will be removed in
- Attempt to fix
stacktrace: com.facebook.react.common.JavascriptException: Error: Exception in HostObject::get for prop 'MetadataRetriever': java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object referencethat occurs on some devices.- We don't have a device to replicate this issue so we're kind of going in blind.
- Fallback to using
MediaMetadataRetrieverif bitrate isn't found or if the value isn't "correct".- Bitrate isn't present in
Formatfor.flacfiles and I've seen variable bitrate for.mp3returned as64000, which is incorrect. - The reason for these issues may be related to this issue comment.
- Bitrate isn't present in
0.7.0 - 2024-12-07
Note
Use v0.6.0 if you don't want the previous targetSdkVersion or compileSdkVersion to change.
- Bumped AndroidX media3 to
1.5.0from1.4.1.- Requires setting
compileSdkVersion=35& patchingexpo-modules-coredue to Kotlin type errors.
- Requires setting
- Validate compatibility with React Native 0.76.
- A patch file was required to get the example working due to monorepo behaviors.
0.6.2 - 2025-01-31
- Parsing issue with
yearmetadata field if we have an invalid value that's less than 4 characters long. - Error thrown when trying to read metadata from a file that contains a
?or#in its filename.
0.6.1 - 2024-12-10
- Add fallback to
PrimaryDirectoryPath&StorageVolumesDirectoryPathsto be"/storage/emulated/0"&["/storage/emulated/0"]respectively. - Mark
MusicDirectoryPathas deprecated mainly due to not specifying a fallback (ie: it may benull).- Will be removed in
v1.0.0.
- Will be removed in
- Attempt to fix
stacktrace: com.facebook.react.common.JavascriptException: Error: Exception in HostObject::get for prop 'MetadataRetriever': java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object referencethat occurs on some devices.- We don't have a device to replicate this issue so we're kind of going in blind.
- Fallback to using
MediaMetadataRetrieverif bitrate isn't found or if the value isn't "correct".- Bitrate isn't present in
Formatfor.flacfiles and I've seen variable bitrate for.mp3returned as64000, which is incorrect. - The reason for these issues may be related to this issue comment.
- Bitrate isn't present in
0.6.0 - 2024-12-07
Note
This will be followed by v0.7.0 which will update AndroidX media3 to 1.5.0, which requires setting the compiled SDK version to 35.
- Set max cap of size of base64 image returned from
getArtwork()to5MB(this means capping the image found to3.75MBdue to converting a byte array to a base64 string increasing the size by 33-37%).- This should further reduce the risk of
OutOfMemoryErrorand will catch extreme cases such as trying to convert massive byte arrays (ie: >50MB) to a base64 string.
- This should further reduce the risk of
- Workaround with supporting other metadata fields in
.flacfiles by utilizingMediaMetadataRetriever.- Someone noticed that track numbers were missing with
.flacfiles. Upon further investigation, we've also seen that thediscNumbervalue was also missing. This was not the case when usingMediaMetadataRetriever. - Will like to implement a better fix in the future.
- Someone noticed that track numbers were missing with
EXPO_UNSTABLE_CORE_AUTOLINKING=1(mentioned in 0.3.0) is no longer needed in the.envfile for the Expo example withreact-native@0.75.4.- Narrowed down to this causing crashing in the production app and the development version showing a white screen.
0.5.0 - 2024-09-21
- Switched to
String.toIntOrNull()to preventNumberFormatExceptioncaused by incorrect metadata structure. getArtworkonly attempts to read the 1st "Other" picture type (instead of overriding previous values if they existed).- Updated how we rejected promises.
- I wonder if the cause of the
messagefield of the error received in React beingnullis due to the use of the followingpromise.rejectformat:promise.reject(code: String, throwable: Throwable?)
- I wonder if the cause of the
- Fixed
No suitable media source factory found for content type: 2error due to missing modules to support theHLSstream.- Added modules for
DASH,SmoothStreaming, andRTSPas well.
- Added modules for
0.4.0 - 2024-09-08
- Bumped AndroidX media3 to
1.4.1from1.3.1.
- Ensure "year" field returns a year.
- Reduce risk of
OutOfMemoryErrordue to trying to convert a large byte array representing an image into a base64 string.
0.3.0 - 2024-09-01
- No longer provide
Unknown ExecutionException&Metadata Retrieval Errormessage with promise rejection for unknown errors (ie: now default to the message in the error object). - Support React Native 0.75.
- For the Expo example to work (as I've encountered
ERROR: autolinkLibrariesFromCommand: process cmd /c npx @react-native-community/cli config exited with error code: 1), you needEXPO_UNSTABLE_CORE_AUTOLINKING=1in your.envfile. Not sure if this is needed in a production app.
- For the Expo example to work (as I've encountered
- Issue where an app using this package crashes in Android 7 to 10. This was due to the
StorageVolume.getDirectory()being introduced in Android 11.
- Document
PrimaryDirectoryPathinREADME.md.
0.2.2 - 2024-08-06
- New
PrimaryDirectoryPathexported variable.
0.2.1 - 2024-07-26
- New custom
yearmetadata field that returns:recordingYear->releaseYear-> year parsed fromMediaMetadataRetriever'sDATEfield. - New
albummetadata preset.
0.2.0 - 2024-07-26
- Changed package id to
com.cyanchill.missingcore.metadataretrieverfromcom.missingcore.metadataretriever(ie: to a domain we control).
0.1.0 - 2024-07-25
- Getting metadata supported by
MediaMetadataAPI & a subset from theFormatAPI. - Getting image of media from its uri as a base64 string.
- Add fallback to
MediaMetadataRetrieverif we failed to get metadata withMetadataRetriever(ie: ID3v1 metadata) - Ensure compatibility with both new & old architecture.
Add section to make release-it not complain that this is missing. 2024-07-20 is when we really started working on this repository.