DEV Community

Sarvesh Upadhyay
Sarvesh Upadhyay

Posted on

📂 Build a Metadata Viewer in React (Audio, Video, Image, PDF, eBook)

👋 Introduction

Ever wondered how to extract hidden metadata from files like images, videos, or documents? 🤔

Metadata includes:

  • 📸 Image EXIF (camera, location)
  • 🎵 Audio details (artist, bitrate)
  • 🎬 Video info (resolution, codec)
  • 📄 PDF properties (author, pages)

In this post, we’ll build a Metadata Viewer in React that supports multiple file types.


🚀 Features

  • 📂 Upload files (Image, Audio, Video, PDF)
  • 🔍 Extract hidden metadata
  • ⚡ Fast and responsive UI
  • 🧠 Supports multiple formats
  • 🎨 Clean UI with React

🧰 Libraries Used

Here are the key libraries used in this project:

  • 📸 exif-js → Extract image metadata
  • 🎵 music-metadata-browser → Audio metadata
  • 🎬 ffmpeg.wasm → Video metadata
  • 📄 pdf-lib → PDF details
  • 📘 epubjs → eBook metadata

📦 Installation

npm install exif-js music-metadata-browser @ffmpeg/ffmpeg pdf-lib epubjs
Enter fullscreen mode Exit fullscreen mode

🖼️ Image Metadata Example

```js id="imgmeta01"
import EXIF from "exif-js";

const getImageMetadata = (file) => {
EXIF.getData(file, function () {
const allMetaData = EXIF.getAllTags(this);
console.log(allMetaData);
});
};




👉 Extracts:

* Camera 📷
* Location 🌍
* Date 🗓️

---

## 🎵 Audio Metadata Example



```js id="audmeta02"
import * as mm from "music-metadata-browser";

const getAudioMetadata = async (file) => {
  const metadata = await mm.parseBlob(file);
  console.log(metadata);
};
Enter fullscreen mode Exit fullscreen mode

👉 Extracts:

  • Artist 🎤
  • Album 💿
  • Duration ⏱️

🎬 Video Metadata Example

```js id="vidmeta03"
import { createFFmpeg, fetchFile } from "@ffmpeg/ffmpeg";

const ffmpeg = createFFmpeg({ log: true });

const getVideoMetadata = async (file) => {
await ffmpeg.load();
ffmpeg.FS("writeFile", "test.mp4", await fetchFile(file));

const data = ffmpeg.FS("readFile", "test.mp4");
console.log(data);
};




👉 Extracts:

* Resolution 📺
* Codec 🎞️
* Duration ⏱️

---

## 📄 PDF Metadata Example



```js id="pdfmeta04"
import { PDFDocument } from "pdf-lib";

const getPDFMetadata = async (file) => {
  const arrayBuffer = await file.arrayBuffer();
  const pdfDoc = await PDFDocument.load(arrayBuffer);

  console.log({
    title: pdfDoc.getTitle(),
    author: pdfDoc.getAuthor(),
  });
};
Enter fullscreen mode Exit fullscreen mode

📘 eBook Metadata Example

```js id="ebookmeta05"
import ePub from "epubjs";

const getEpubMetadata = async (file) => {
const book = ePub(file);
const metadata = await book.loaded.metadata;
console.log(metadata);
};




---

## 🧠 How It Works

1. 📂 User uploads file
2. 🔍 Detect file type
3. ⚙️ Call respective library
4. 📊 Display metadata

---

## 🎯 Use Cases

* 🔐 Digital forensics
* 📸 Photo analysis
* 🎵 Music organization
* 📚 eBook readers
* 🧑‍💻 Developer tools

---

## ⚠️ Challenges

* ❌ Large video processing is slow
* ❌ Browser limitations (FFmpeg heavy)
* ❌ Some metadata may be missing

---

## 🚀 Future Improvements

* 🌐 Drag & Drop UI
* ☁️ Cloud processing
* 📊 Better visualization
* 🔎 Deep metadata analysis

---

## ❤️ Support

If you found this useful:

👉 Drop a ❤️
👉 Follow me for more React projects
👉 Comment your feedback 👇

---

## 🏷️ Tags

#react #javascript #webdev #opensource
Enter fullscreen mode Exit fullscreen mode

Top comments (0)