This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Oct 9, 2023. It is now read-only.

Latest commit

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-exif

With node-exif you can extract Exif metadata from images (JPEG). Exif is a format used, for example, by digital cameras and scanners to save additional information about an image in the image file. This information can be the camera model, resolution, where the image was taken (GPS) or when it was taken.

node-exif CLI

Rodrigo Espinosa proposes the npm package exif-cli to execute node-exif from a shell.

Table of Contents

Installation

Installing using npm (node package manager):

npm install exif

If you don't have npm installed or don't want to use it:

cd ~/.node_libraries
git clone git://github.com/gomfunkel/node-exif.git exif

Usage

Easy. Just require node-exif and throw an image at it. If node-exif is able to extract data from the image it does so and returns an object with all the information found, if an error occurs you will receive an error message. To prove that it really is easy please see the following example.

varExifImage=require('exif').ExifImage;try{newExifImage({image : 'myImage.jpg'},function(error,exifData){if(error)console.log('Error: '+error.message);elseconsole.log(exifData);// Do something with your data!});}catch(error){console.log('Error: '+error.message);}

Instead of providing a filename of an image in your filesystem you can also pass a Buffer to ExifImage.

The data returned (exifData in the example above) is an object containing objects for each type of available Exif metadata:

  • image for image information data (IFD0)
  • thumbnail for information regarding a possibly embedded thumbnail (IFD1)
  • exif for Exif-specific attribute information (Exif IFD)
  • gps for GPS information (GPS IFD)
  • interoperability for interoperability information (Interoperability IFD)
  • makernote for vendor specific Exif information (Makernotes)

The ouput for an example image might thus look like this:

{
image: {
Make: 'FUJIFILM',
Model: 'FinePix40i',
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
Software: 'Digital Camera FinePix40i Ver1.39',
ModifyDate: '2000:08:04 18:22:57',
YCbCrPositioning: 2,
Copyright: ' ',
ExifOffset: 250
},
thumbnail: {
Compression: 6,
Orientation: 1,
XResolution: 72,
YResolution: 72,
ResolutionUnit: 2,
ThumbnailOffset: 1074,
ThumbnailLength: 8691,
YCbCrPositioning: 2
},
exif: {
FNumber: 2.8,
ExposureProgram: 2,
ISO: 200,
ExifVersion: <Buffer 30 32 31 30>,
DateTimeOriginal: '2000:08:04 18:22:57',
CreateDate: '2000:08:04 18:22:57',
ComponentsConfiguration: <Buffer 01 02 03 00>,
CompressedBitsPerPixel: 1.5,
ShutterSpeedValue: 5.5,
ApertureValue: 3,
BrightnessValue: 0.26,
ExposureCompensation: 0,
MaxApertureValue: 3,
MeteringMode: 5,
Flash: 1,
FocalLength: 8.7,
MakerNote: <Buffer 46 55 4a 49 46 49 4c 4d 0c 00 00 00 0f 00 00 00 07 00 04 00 00 00 30 31 33 30 00 10 02 00 08 00 00 00 c6 00 00 00 01 10 03 00 01 00 00 00 03 00 00 00 02 ...>,
FlashpixVersion: <Buffer 30 31 30 30>,
ColorSpace: 1,
ExifImageWidth: 2400,
ExifImageHeight: 1800,
InteropOffset: 926,
FocalPlaneXResolution: 2381,
FocalPlaneYResolution: 2381,
FocalPlaneResolutionUnit: 3,
SensingMethod: 2,
FileSource: <Buffer 03>,
SceneType: <Buffer 01>
},
gps: {},
interoperability: {
InteropIndex: 'R98',
InteropVersion: <Buffer 30 31 30 30>
},
makernote: {
Version: <Buffer 30 31 33 30>,
Quality: 'NORMAL ',
Sharpness: 3,
WhiteBalance: 0,
FujiFlashMode: 1,
FlashExposureComp: 0,
Macro: 0,
FocusMode: 0,
SlowSync: 0,
AutoBracketing: 0,
BlurWarning: 0,
FocusWarning: 0,
ExposureWarning: 0
}
}

For more information about the Exif standard please refer to the specification found on http://www.exif.org. A comprehensive list of available Exif attributes and their meaning can be found on http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/.

ToDo / Ideas

There are a lot of things still to be done and to be made better. If you have any special requests please open an issue with a feature request.

License

node-exif is licensed under the MIT License. (See LICENSE)

About

A node.js library to extract Exif metadata from images.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages