@jjlmoya/utils-audiovisual 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +198 -0
  3. package/src/category/i18n/es.ts +198 -0
  4. package/src/category/i18n/fr.ts +198 -0
  5. package/src/category/index.ts +17 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +4 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +32 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/seo_length.test.ts +22 -0
  21. package/src/tests/tool_validation.test.ts +17 -0
  22. package/src/tool/chromaticLens/bibliography.astro +17 -0
  23. package/src/tool/chromaticLens/component.astro +178 -0
  24. package/src/tool/chromaticLens/i18n/en.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/es.ts +244 -0
  26. package/src/tool/chromaticLens/i18n/fr.ts +244 -0
  27. package/src/tool/chromaticLens/index.ts +43 -0
  28. package/src/tool/chromaticLens/logic.ts +87 -0
  29. package/src/tool/chromaticLens/seo.astro +15 -0
  30. package/src/tool/chromaticLens/style.css +308 -0
  31. package/src/tool/chromaticLens/ui.ts +109 -0
  32. package/src/tool/collageMaker/bibliography.astro +17 -0
  33. package/src/tool/collageMaker/component.astro +302 -0
  34. package/src/tool/collageMaker/i18n/en.ts +233 -0
  35. package/src/tool/collageMaker/i18n/es.ts +231 -0
  36. package/src/tool/collageMaker/i18n/fr.ts +231 -0
  37. package/src/tool/collageMaker/index.ts +51 -0
  38. package/src/tool/collageMaker/logic.ts +134 -0
  39. package/src/tool/collageMaker/seo.astro +15 -0
  40. package/src/tool/collageMaker/style.css +386 -0
  41. package/src/tool/exifCleaner/bibliography.astro +18 -0
  42. package/src/tool/exifCleaner/component.astro +162 -0
  43. package/src/tool/exifCleaner/i18n/en.ts +277 -0
  44. package/src/tool/exifCleaner/i18n/es.ts +277 -0
  45. package/src/tool/exifCleaner/i18n/fr.ts +277 -0
  46. package/src/tool/exifCleaner/index.ts +57 -0
  47. package/src/tool/exifCleaner/logic.ts +135 -0
  48. package/src/tool/exifCleaner/seo.astro +18 -0
  49. package/src/tool/exifCleaner/style.css +289 -0
  50. package/src/tool/exifCleaner/ui.ts +117 -0
  51. package/src/tool/imageCompressor/bibliography.astro +17 -0
  52. package/src/tool/imageCompressor/component.astro +262 -0
  53. package/src/tool/imageCompressor/i18n/en.ts +232 -0
  54. package/src/tool/imageCompressor/i18n/es.ts +230 -0
  55. package/src/tool/imageCompressor/i18n/fr.ts +230 -0
  56. package/src/tool/imageCompressor/index.ts +50 -0
  57. package/src/tool/imageCompressor/logic.ts +79 -0
  58. package/src/tool/imageCompressor/seo.astro +15 -0
  59. package/src/tool/imageCompressor/style.css +503 -0
  60. package/src/tool/printQualityCalculator/bibliography.astro +18 -0
  61. package/src/tool/printQualityCalculator/component.astro +318 -0
  62. package/src/tool/printQualityCalculator/i18n/en.ts +247 -0
  63. package/src/tool/printQualityCalculator/i18n/es.ts +245 -0
  64. package/src/tool/printQualityCalculator/i18n/fr.ts +245 -0
  65. package/src/tool/printQualityCalculator/index.ts +56 -0
  66. package/src/tool/printQualityCalculator/logic.ts +53 -0
  67. package/src/tool/printQualityCalculator/seo.astro +18 -0
  68. package/src/tool/printQualityCalculator/style.css +491 -0
  69. package/src/tool/printQualityCalculator/ui.ts +122 -0
  70. package/src/tool/privacyBlur/bibliography.astro +17 -0
  71. package/src/tool/privacyBlur/component.astro +230 -0
  72. package/src/tool/privacyBlur/i18n/en.ts +238 -0
  73. package/src/tool/privacyBlur/i18n/es.ts +236 -0
  74. package/src/tool/privacyBlur/i18n/fr.ts +236 -0
  75. package/src/tool/privacyBlur/index.ts +49 -0
  76. package/src/tool/privacyBlur/logic.ts +249 -0
  77. package/src/tool/privacyBlur/seo.astro +15 -0
  78. package/src/tool/privacyBlur/style.css +332 -0
  79. package/src/tool/privacyBlur/ui.ts +124 -0
  80. package/src/tool/subtitleSync/bibliography.astro +17 -0
  81. package/src/tool/subtitleSync/component.astro +187 -0
  82. package/src/tool/subtitleSync/i18n/en.ts +241 -0
  83. package/src/tool/subtitleSync/i18n/es.ts +241 -0
  84. package/src/tool/subtitleSync/i18n/fr.ts +241 -0
  85. package/src/tool/subtitleSync/index.ts +49 -0
  86. package/src/tool/subtitleSync/logic.ts +91 -0
  87. package/src/tool/subtitleSync/seo.astro +15 -0
  88. package/src/tool/subtitleSync/style.css +325 -0
  89. package/src/tool/subtitleSync/ui.ts +152 -0
  90. package/src/tool/timelapseCalculator/bibliography.astro +15 -0
  91. package/src/tool/timelapseCalculator/component.astro +148 -0
  92. package/src/tool/timelapseCalculator/i18n/en.ts +169 -0
  93. package/src/tool/timelapseCalculator/i18n/es.ts +169 -0
  94. package/src/tool/timelapseCalculator/i18n/fr.ts +169 -0
  95. package/src/tool/timelapseCalculator/index.ts +52 -0
  96. package/src/tool/timelapseCalculator/logic.ts +46 -0
  97. package/src/tool/timelapseCalculator/seo.astro +18 -0
  98. package/src/tool/timelapseCalculator/style.css +285 -0
  99. package/src/tool/tvDistance/bibliography.astro +17 -0
  100. package/src/tool/tvDistance/component.astro +178 -0
  101. package/src/tool/tvDistance/i18n/en.ts +223 -0
  102. package/src/tool/tvDistance/i18n/es.ts +223 -0
  103. package/src/tool/tvDistance/i18n/fr.ts +223 -0
  104. package/src/tool/tvDistance/index.ts +49 -0
  105. package/src/tool/tvDistance/logic.ts +47 -0
  106. package/src/tool/tvDistance/seo.astro +15 -0
  107. package/src/tool/tvDistance/style.css +435 -0
  108. package/src/tool/tvDistance/ui.ts +66 -0
  109. package/src/tool/videoFrameExtractor/bibliography.astro +17 -0
  110. package/src/tool/videoFrameExtractor/component.astro +285 -0
  111. package/src/tool/videoFrameExtractor/i18n/en.ts +235 -0
  112. package/src/tool/videoFrameExtractor/i18n/es.ts +235 -0
  113. package/src/tool/videoFrameExtractor/i18n/fr.ts +235 -0
  114. package/src/tool/videoFrameExtractor/index.ts +53 -0
  115. package/src/tool/videoFrameExtractor/logic.ts +49 -0
  116. package/src/tool/videoFrameExtractor/seo.astro +15 -0
  117. package/src/tool/videoFrameExtractor/style.css +426 -0
  118. package/src/tool/videoFrameExtractor/ui.ts +179 -0
  119. package/src/tools.ts +25 -0
  120. package/src/types.ts +72 -0
@@ -0,0 +1,277 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ExifCleanerUI, ExifCleanerLocaleContent } from '../index';
3
+
4
+ const slug = 'exif-metadata-cleaner-remove-gps-photo-privacy';
5
+ const title = 'EXIF Metadata Cleaner - Remove GPS and Hidden Data from Photos';
6
+ const description = 'Free online tool to erase EXIF metadata, GPS coordinates, and camera specs from your images before sharing. 100% private: works without uploading photos to the internet.';
7
+
8
+ const ui: ExifCleanerUI = {
9
+ dropTitle: "Drag your image here",
10
+ dropSubtitle: "Remove GPS metadata, camera model, and hidden settings.",
11
+ dropLocalInfo: "100% local processing. Nothing is uploaded to the cloud.",
12
+ selectButton: "Select Image",
13
+ processingText: "Cleaning metadata...",
14
+ analysisCompleted: "Analysis Completed",
15
+ downloadButton: "Download Clean Image",
16
+ resetButton: "Clean another image",
17
+ privacyRiskTitle: "PRIVACY RISKS DETECTED:",
18
+ gpsLabel: "GPS:",
19
+ gpsDetected: "DETECTED",
20
+ gpsNotFound: "NOT FOUND",
21
+ cameraLabel: "CAMERA:",
22
+ softwareLabel: "SOFTWARE:",
23
+ dateLabel: "DATE:",
24
+ otherTechnicalDetails: "OTHER TECHNICAL DETAILS",
25
+ noMetadataFound: "No readable EXIF metadata found.",
26
+ alreadyCleanInfo: "The image might already be clean.",
27
+ previewLabel: "Preview",
28
+ faqTitle: "Frequently asked questions about photo privacy",
29
+ bibliographyTitle: "Resources and technical EXIF documentation",
30
+ };
31
+
32
+ const faq: ExifCleanerLocaleContent['faq'] = [
33
+ {
34
+ question: "What are EXIF metadata?",
35
+ answer: "EXIF (Exchangeable Image File Format) is hidden information that your camera or phone saves inside every photo. It includes the exact date, device model, shooting settings (ISO, aperture), and most critically, the GPS coordinates of where the photo was taken.",
36
+ },
37
+ {
38
+ question: "Is it safe to use this online tool?",
39
+ answer: "Yes, because processing is 100% local in your browser. Your photos are never uploaded to any server; the cleaning happens directly in your device's memory, ensuring absolute privacy.",
40
+ },
41
+ {
42
+ question: "What specific data does the cleaner remove?",
43
+ answer: "It erases all EXIF tags (GPS, camera brand, serial number), IPTC (copyright, author), and XMP (editing history). Your image becomes 'clean', preserving only the visual pixels.",
44
+ },
45
+ {
46
+ question: "Does the image lose quality when cleaning metadata?",
47
+ answer: "No. We only remove the technical data 'header' of the file. The image data (pixels) remain identical, so the visual quality is not affected at all.",
48
+ },
49
+ ];
50
+
51
+ const howTo: ExifCleanerLocaleContent['howTo'] = [
52
+ {
53
+ name: "Select the images",
54
+ text: "Drag your photos or select them from your file explorer. You can process several at once.",
55
+ },
56
+ {
57
+ name: "Analyze current data",
58
+ text: "The tool will show you what sensitive information it has detected (e.g., 'GPS coordinates detected').",
59
+ },
60
+ {
61
+ name: "Process and clean",
62
+ text: "Click the clean button to instantly remove all metadata tags.",
63
+ },
64
+ {
65
+ name: "Download secure photos",
66
+ text: "Save the new versions of your images, now anonymized and ready to be shared safely on social media.",
67
+ },
68
+ ];
69
+
70
+ const bibliography: ExifCleanerLocaleContent['bibliography'] = [
71
+ {
72
+ name: "Exchangeable image file format (EXIF) - Wikipedia",
73
+ url: "https://en.wikipedia.org/wiki/Exif",
74
+ },
75
+ {
76
+ name: "W3C - Metadata in Images",
77
+ url: "https://www.w3.org/community/image-metadata/",
78
+ },
79
+ ];
80
+
81
+ const seo: ExifCleanerLocaleContent['seo'] = [
82
+ {
83
+ type: 'summary',
84
+ title: 'EXIF Metadata Cleaner - Protect Your Privacy',
85
+ items: [
86
+ 'Remove GPS coordinates and location from your photos instantly',
87
+ 'Erase camera model, serial number, and technical information',
88
+ '100% browser-based processing - your images never leave your device',
89
+ 'Maintains visual quality - only hidden data is removed'
90
+ ]
91
+ },
92
+ { type: 'title', text: 'Complete Guide to Privacy and EXIF Metadata in Digital Photography', level: 2 },
93
+ { type: 'paragraph', html: 'Have you ever wondered how much personal information you share when uploading a photo to social media? EXIF metadata is like an <strong>invisible fingerprint</strong> that can reveal everything from your exact home location to the price of your photography gear. This guide explains how to protect your privacy effectively.' },
94
+
95
+ { type: 'stats', items: [
96
+ { value: '100%', label: 'Privacy - Local Processing', icon: 'mdi:shield-check' },
97
+ { value: '0%', label: 'Data Stored on Servers', icon: 'mdi:database' },
98
+ { value: 'Instant', label: 'Metadata Removal', icon: 'mdi:lightning-bolt' }
99
+ ], columns: 3 },
100
+
101
+ { type: 'title', text: 'What Information Is Hidden in Your Photos?', level: 3 },
102
+ { type: 'paragraph', html: 'More than 90% of digital photos contain sensitive information that can compromise your security. Here is all the data that can be revealed:' },
103
+ { type: 'list', items: [
104
+ '<strong>GPS Coordinates:</strong> The exact latitude and longitude where the capture was made (home address, work, frequently visited places).',
105
+ '<strong>Equipment Identification:</strong> Make, model, and serial number of the camera or smartphone (valuable information).',
106
+ '<strong>Technical Settings:</strong> ISO, aperture (f/), exposure time, and focal length (allows identifying your specific gear).',
107
+ '<strong>Exact Date and Time:</strong> A complete timeline of your daily activities.',
108
+ '<strong>Editing History:</strong> Software used, editing software, and last modification date.',
109
+ '<strong>Copyright Data:</strong> Photographer, copyright, and personal notes.'
110
+ ] },
111
+
112
+ { type: 'title', text: 'Real Security Risks: Use Cases', level: 3 },
113
+ { type: 'comparative', items: [
114
+ {
115
+ title: 'Professional Photographers',
116
+ description: 'Risk of expensive equipment theft identified by serial number',
117
+ icon: 'mdi:camera',
118
+ points: [
119
+ 'Thieves look for photographers with valuable gear',
120
+ 'GPS identifies the owner\'s home address',
121
+ 'Serial number facilitates resale on the dark web'
122
+ ]
123
+ },
124
+ {
125
+ title: 'Parents and Influencers',
126
+ description: 'Extreme danger: real-time location of children',
127
+ icon: 'mdi:alert',
128
+ points: [
129
+ 'Predators track locations using OSINT',
130
+ 'Predators can identify daily routines',
131
+ 'Risk of stalking and physical tracking'
132
+ ],
133
+ highlight: true
134
+ },
135
+ {
136
+ title: 'Social Media Users',
137
+ description: 'Exposure of personal and professional privacy',
138
+ icon: 'mdi:share-variant',
139
+ points: [
140
+ 'Posting from the office reveals workplace location',
141
+ 'Geolocation allows inferring approximate salary',
142
+ 'Public data allows targeted profiling'
143
+ ]
144
+ },
145
+ {
146
+ title: 'Travelers and Nomads',
147
+ description: 'Danger of theft in unoccupied homes',
148
+ icon: 'mdi:map',
149
+ points: [
150
+ 'Published GPS indicates empty house during travel',
151
+ 'Equipment data attracts criminals',
152
+ 'Travel histories reveal schedules and patterns'
153
+ ]
154
+ }
155
+ ], columns: 2 },
156
+
157
+ { type: 'title', text: 'How This Tool Works', level: 3 },
158
+ { type: 'list', items: [
159
+ '<strong>1. Select your images:</strong> Drag photos or use the selector. You can process several simultaneously.',
160
+ '<strong>2. Automatic analysis:</strong> The tool detects and shows all metadata present (GPS, camera model, date, etc.).',
161
+ '<strong>3. Instant cleaning:</strong> With one click, it removes 100% of harmful metadata.',
162
+ '<strong>4. Secure download:</strong> Receive anonymized images ready to share on networks without risks.',
163
+ '<strong>5. No residue:</strong> The clean image retains all its original visual quality.'
164
+ ], icon: 'mdi:check' },
165
+
166
+ { type: 'card', title: 'Privacy Technology', icon: 'mdi:shield-check', html: 'This tool uses the <strong>browser\'s Canvas API</strong> to create a clean copy of the image pixel by pixel, ensuring that:<br><br>- No data is sent to servers<br>- Your image never leaves your device<br>- 100% anonymous and secure processing<br>- You can use it even without an internet connection (after initial load)' },
167
+
168
+ { type: 'title', text: 'What Specific Data Is Removed?', level: 3 },
169
+ { type: 'table', headers: ['Metadata Type', 'Examples', 'Risk'], rows: [
170
+ ['EXIF (Exchangeable)', 'GPS, ISO, Aperture, Shutter Speed, Camera Model', 'CRITICAL'],
171
+ ['IPTC (Publication)', 'Copyright, Author, Keywords, Scene Location', 'HIGH'],
172
+ ['XMP (XML)', 'Editing History, Software Used, Edits Made', 'MEDIUM'],
173
+ ['Basic File Data', 'Creation Date, Exact Time, Device', 'HIGH']
174
+ ] },
175
+
176
+ { type: 'proscons', items: [
177
+ {
178
+ pro: 'Total Privacy - 100% browser-based processing',
179
+ con: 'Requires a modern browser with JavaScript support'
180
+ },
181
+ {
182
+ pro: 'Instant - cleaning a photo takes less than 1 second',
183
+ con: 'Processing large photos may be slow on older devices'
184
+ },
185
+ {
186
+ pro: 'Zero Quality Loss - only removes technical data, not pixels',
187
+ con: 'Does not edit the image (crops, rotations, etc.)'
188
+ },
189
+ {
190
+ pro: 'Completely Free with no Limits - process unlimited photos',
191
+ con: 'No premium support or cloud storage'
192
+ }
193
+ ], proTitle: 'Key Advantages', conTitle: 'Limitations' },
194
+
195
+ { type: 'tip', title: 'Digital Security Tip', html: '<strong>Clean your photos BEFORE posting</strong> on any social network. Even if you delete a post, metadata may have been indexed by search engines or archives. Prevention is better than cure. Make it a habit: <br><br><em>Photo → Clean EXIF → Post</em>' },
196
+
197
+ { type: 'diagnostic', variant: 'warning', title: 'Real Risks of Not Cleaning', icon: 'mdi:alert-circle', badge: 'Critical Security', html: '<strong>Documented cases:</strong><br>- Parents posting photos of children - predators tracked GPS<br>- Traveling photographers - houses robbed while they were away<br>- Influencers - residence locations identified by obsessive fans<br><br>It\'s not paranoia: it\'s basic digital hygiene in 2026.' },
198
+
199
+ { type: 'glossary', items: [
200
+ {
201
+ term: 'EXIF',
202
+ definition: 'Exchangeable Image File Format. A standard that stores technical metadata in image files: GPS, camera data, exposure settings. Present in ~90% of digital photos without user intention.'
203
+ },
204
+ {
205
+ term: 'GPS Coordinates',
206
+ definition: 'Precise latitude and longitude of the exact location where the photo was taken. Combined with social media, it allows physical tracking of people.'
207
+ },
208
+ {
209
+ term: 'IPTC',
210
+ definition: 'International Press Telecommunications Council. Readable publication metadata: copyright, author, keywords, description. Standard in professional photography.'
211
+ },
212
+ {
213
+ term: 'XMP',
214
+ definition: 'Extensible Metadata Platform. An XML format that records editing history in software like Lightroom or Photoshop. It can reveal all edits made.'
215
+ },
216
+ {
217
+ term: 'OSINT',
218
+ definition: 'Open Source Intelligence. A technique of collecting public information (social media, metadata, records) to profile people without their knowledge.'
219
+ },
220
+ {
221
+ term: 'Digital Anonymization',
222
+ definition: 'The process of removing or obfuscating identifiable information: location, device, behavior patterns. Essential for online privacy.'
223
+ }
224
+ ] },
225
+
226
+ { type: 'message', title: 'Your Privacy Is Your Responsibility', ariaLabel: 'Information about privacy and data rights', html: 'We do not store, process, or share your images. <strong>You have full control.</strong> All operations occur exclusively in your browser. When you close this tab, no record of your activity remains. This is how to protect your privacy on the internet: tools that respect your data.' },
227
+
228
+ { type: 'title', text: 'Conclusion: Share Without Traces', level: 3 },
229
+ { type: 'paragraph', html: 'Protecting your digital identity starts with small details. Cleaning your photos before publishing them is an <strong>essential digital hygiene habit</strong> in 2026. It doesn\'t just protect your location: it protects your family, your assets, and your professional privacy. A seemingly innocent photo can reveal more about you than you ever imagined.' }
230
+ ];
231
+
232
+ const faqSchema: WithContext<FAQPage> = {
233
+ '@context': 'https://schema.org',
234
+ '@type': 'FAQPage',
235
+ mainEntity: faq.map((item) => ({
236
+ '@type': 'Question',
237
+ name: item.question,
238
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
239
+ })),
240
+ };
241
+
242
+ const howToSchema: WithContext<HowTo> = {
243
+ '@context': 'https://schema.org',
244
+ '@type': 'HowTo',
245
+ name: title,
246
+ description,
247
+ step: howTo.map((step) => ({
248
+ '@type': 'HowToStep',
249
+ name: step.name,
250
+ text: step.text,
251
+ })),
252
+ };
253
+
254
+ const appSchema: WithContext<SoftwareApplication> = {
255
+ '@context': 'https://schema.org',
256
+ '@type': 'SoftwareApplication',
257
+ name: title,
258
+ description,
259
+ applicationCategory: 'UtilitiesApplication',
260
+ operatingSystem: 'Web',
261
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
262
+ inLanguage: 'en',
263
+ };
264
+
265
+ export const content: ExifCleanerLocaleContent = {
266
+ slug,
267
+ title,
268
+ description,
269
+ ui,
270
+ seo,
271
+ faqTitle: "Frequently Asked Questions",
272
+ faq,
273
+ bibliographyTitle: "References",
274
+ bibliography,
275
+ howTo,
276
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
277
+ };
@@ -0,0 +1,277 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ExifCleanerUI, ExifCleanerLocaleContent } from '../index';
3
+
4
+ const slug = 'limpiador-exif';
5
+ const title = 'Limpiador de Metadatos EXIF - Elimina GPS y Datos Ocultos de Fotos';
6
+ const description = 'Herramienta online gratuita para borrar metadatos EXIF, coordenadas GPS y datos de cámara de tus imágenes antes de compartirlas. Privacidad total: funciona sin subir fotos a internet.';
7
+
8
+ const ui: ExifCleanerUI = {
9
+ dropTitle: "Arrastra tu imagen aquí",
10
+ dropSubtitle: "Elimina metadatos GPS, modelo de cámara y configuraciones ocultas.",
11
+ dropLocalInfo: "Procesamiento 100% local. Nada sube a la nube.",
12
+ selectButton: "Seleccionar Imagen",
13
+ processingText: "Limpiando metadatos...",
14
+ analysisCompleted: "Análisis Completado",
15
+ downloadButton: "Descargar Imagen Limpia",
16
+ resetButton: "Limpiar otra imagen",
17
+ privacyRiskTitle: "RIESGOS DE PRIVACIDAD ENCONTRADOS:",
18
+ gpsLabel: "GPS:",
19
+ gpsDetected: "DETECTADA",
20
+ gpsNotFound: "NO ENCONTRADA",
21
+ cameraLabel: "CAMARA:",
22
+ softwareLabel: "SOFTWARE:",
23
+ dateLabel: "FECHA:",
24
+ otherTechnicalDetails: "OTROS DETALLES TÉCNICOS",
25
+ noMetadataFound: "No se encontraron metadatos EXIF legibles.",
26
+ alreadyCleanInfo: "Es posible que la imagen ya esté limpia.",
27
+ previewLabel: "Vista Previa",
28
+ faqTitle: "Preguntas frecuentes sobre privacidad en fotos",
29
+ bibliographyTitle: "Recursos y documentación técnica EXIF",
30
+ };
31
+
32
+ const faq: ExifCleanerLocaleContent['faq'] = [
33
+ {
34
+ question: "¿Qué son los metadatos EXIF?",
35
+ answer: "EXIF (Exchangeable Image File Format) es información oculta que tu cámara o móvil guarda dentro de cada foto. Incluye la fecha exacta, el modelo de dispositivo, ajustes de disparo (ISO, apertura) y, lo más crítico, las coordenadas GPS de donde se tomó la foto.",
36
+ },
37
+ {
38
+ question: "¿Es seguro usar esta herramienta online?",
39
+ answer: "Sí, porque el procesamiento es 100% local en tu navegador. Tus fotos nunca se suben a ningún servidor; la limpieza ocurre directamente en la memoria de tu dispositivo, garantizando privacidad absoluta.",
40
+ },
41
+ {
42
+ question: "¿Qué datos elimina específicamente el limpiador?",
43
+ answer: "Borra todas las etiquetas EXIF (GPS, marca de cámara, número de serie), IPTC (copyright, autor) y XMP (historial de edición). Tu imagen queda 'limpia', conservando solo los píxeles visuales.",
44
+ },
45
+ {
46
+ question: "¿Pierde calidad la imagen al limpiar los metadatos?",
47
+ answer: "No. Solo eliminamos la 'cabecera' de datos técnicos del archivo. Los datos de imagen (píxeles) permanecen idénticos, por lo que la calidad visual no se ve afectada en absoluto.",
48
+ },
49
+ ];
50
+
51
+ const howTo: ExifCleanerLocaleContent['howTo'] = [
52
+ {
53
+ name: "Seleccionar las imágenes",
54
+ text: "Arrastra tus fotos o selecciónalas desde tu explorador de archivos. Puedes procesar varias a la vez.",
55
+ },
56
+ {
57
+ name: "Analizar datos actuales",
58
+ text: "La herramienta te mostrará qué información sensible ha detectado (ej. 'Coordenadas GPS detectadas').",
59
+ },
60
+ {
61
+ name: "Procesar y limpiar",
62
+ text: "Haz clic en el botón de limpiar para eliminar instantáneamente todas las etiquetas de metadatos.",
63
+ },
64
+ {
65
+ name: "Descargar fotos seguras",
66
+ text: "Guarda las nuevas versiones de tus imágenes ya anonimizadas y listas para compartir en redes sociales de forma segura.",
67
+ },
68
+ ];
69
+
70
+ const bibliography: ExifCleanerLocaleContent['bibliography'] = [
71
+ {
72
+ name: "Exchangeable image file format (EXIF) - Wikipedia",
73
+ url: "https://es.wikipedia.org/wiki/Exchangeable_image_file_format",
74
+ },
75
+ {
76
+ name: "W3C - Metadata in Images",
77
+ url: "https://www.w3.org/community/image-metadata/",
78
+ },
79
+ ];
80
+
81
+ const seo: ExifCleanerLocaleContent['seo'] = [
82
+ {
83
+ type: 'summary',
84
+ title: 'Limpiador de Metadatos EXIF - Protege tu Privacidad',
85
+ items: [
86
+ 'Elimina coordenadas GPS y ubicación de tus fotos al instante',
87
+ 'Borra datos de modelo de cámara, número de serie e información técnica',
88
+ 'Procesamiento 100% en el navegador - tus imágenes nunca suben a servidores',
89
+ 'Mantiene la calidad visual - solo elimina datos ocultos'
90
+ ]
91
+ },
92
+ { type: 'title', text: 'Guía Completa de Privacidad y Metadatos EXIF en Fotografías Digitales', level: 2 },
93
+ { type: 'paragraph', html: '¿Alguna vez te has preguntado cuánta información personal compartes al subir una foto a redes sociales? Los metadatos EXIF son como una <strong>huella dactilar invisible</strong> que puede revelar desde la ubicación exacta de tu casa hasta el precio de tu equipo fotográfico. Esta guía te explica cómo proteger tu privacidad de forma efectiva.' },
94
+
95
+ { type: 'stats', items: [
96
+ { value: '100%', label: 'Privacidad - Procesamiento Local', icon: 'mdi:shield' },
97
+ { value: '0%', label: 'Datos Almacenados en Servidores', icon: 'mdi:database' },
98
+ { value: 'Instantáneo', label: 'Eliminación de Metadatos', icon: 'mdi:lightning-bolt' }
99
+ ], columns: 3 },
100
+
101
+ { type: 'title', text: '¿Qué Información Se Esconde en Tus Fotos?', level: 3 },
102
+ { type: 'paragraph', html: 'Más del 90% de las fotos digitales contienen información sensible que puede comprometer tu seguridad. Aquí están todos los datos que se pueden revelar:' },
103
+ { type: 'list', items: [
104
+ '<strong>Coordenadas GPS:</strong> La latitud y longitud exacta donde se realizó la captura (dirección de tu hogar, trabajo, lugares frecuentados).',
105
+ '<strong>Identificación del Equipo:</strong> Marca, modelo y número de serie de la cámara o smartphone (información de valor).',
106
+ '<strong>Ajustes Técnicos:</strong> ISO, apertura (f/), tiempo de exposición y distancia focal (permite identificar tu equipo específico).',
107
+ '<strong>Fecha y Hora Exacta:</strong> Cronograma completo de tus actividades diarias.',
108
+ '<strong>Historial de Edición:</strong> Software utilizado, software de edición y fecha de última modificación.',
109
+ '<strong>Datos de Copyright:</strong> Fotógrafo, derechos de autor y notas personales.'
110
+ ] },
111
+
112
+ { type: 'title', text: 'Riesgos de Seguridad Real: Casos de Uso', level: 3 },
113
+ { type: 'comparative', items: [
114
+ {
115
+ title: 'Fotógrafos Profesionales',
116
+ description: 'Riesgo de robo de equipo costoso identificado por número de serie',
117
+ icon: 'mdi:camera',
118
+ points: [
119
+ 'Ladrones buscan fotógrafos con equipo de valor',
120
+ 'GPS identifica domicilio del propietario',
121
+ 'Número de serie facilita reventa en dark web'
122
+ ]
123
+ },
124
+ {
125
+ title: 'Padres e Influencers',
126
+ description: 'Peligro extremo: ubicación de niños en tiempo real',
127
+ icon: 'mdi:alert',
128
+ points: [
129
+ 'Pedófilos rastrean ubicaciones mediante OSINT',
130
+ 'Predadores pueden identificar rutinas diarias',
131
+ 'Riesgo de acoso y seguimiento físico'
132
+ ],
133
+ highlight: true
134
+ },
135
+ {
136
+ title: 'Usuarios de Redes Sociales',
137
+ description: 'Exposición de privacidad personal y laboral',
138
+ icon: 'mdi:share-variant',
139
+ points: [
140
+ 'Publicar desde la oficina revela ubicación de trabajo',
141
+ 'Geolocalización permite inferir salario aproximado',
142
+ 'Datos públicos permiten perfilado de segmentación'
143
+ ]
144
+ },
145
+ {
146
+ title: 'Viajeros y Nómadas',
147
+ description: 'Peligro de robo en domicilios desocupados',
148
+ icon: 'mdi:map',
149
+ points: [
150
+ 'GPS publicado indica casa vacía durante viaje',
151
+ 'Datos de equipo atraen a delincuentes',
152
+ 'Historiales de viajes revelan patrones'
153
+ ]
154
+ }
155
+ ], columns: 2 },
156
+
157
+ { type: 'title', text: 'Cómo Funciona Esta Herramienta', level: 3 },
158
+ { type: 'list', items: [
159
+ '<strong>1. Selecciona tus imágenes:</strong> Arrastra fotos o usa el selector. Puedes procesar varias simultáneamente.',
160
+ '<strong>2. Análisis automático:</strong> La herramienta detecta y muestra todos los metadatos presentes (GPS, modelo de cámara, fecha, etc.).',
161
+ '<strong>3. Limpieza instantánea:</strong> Con un clic, elimina el 100% de los metadatos dañinos.',
162
+ '<strong>4. Descarga segura:</strong> Recibe imágenes anonimizadas listas para compartir en redes sin riesgos.',
163
+ '<strong>5. Sin residuos:</strong> La imagen limpia conserva toda su calidad visual original.'
164
+ ], icon: 'mdi:check' },
165
+
166
+ { type: 'card', title: 'Tecnología de Privacidad', icon: 'mdi:shield-check', html: 'Esta herramienta utiliza la <strong>API de Canvas del navegador</strong> para crear una copia limpia de la imagen píxel a píxel, asegurando que:<br><br>- Ningún dato se envía a servidores<br>- Tu imagen nunca abandona tu dispositivo<br>- Procesamiento 100% anónimo y seguro<br>- Puedes usarla incluso sin conexión a internet (tras la carga inicial)' },
167
+
168
+ { type: 'title', text: '¿Qué Datos Elimina Específicamente?', level: 3 },
169
+ { type: 'table', headers: ['Tipo de Metadatos', 'Ejemplos', 'Riesgo'], rows: [
170
+ ['EXIF (Intercambiable)', 'GPS, ISO, Apertura, Velocidad Obturación, Modelo Cámara', 'CRÍTICO'],
171
+ ['IPTC (Publicación)', 'Copyright, Autor, Palabras Clave, Ubicación Escena', 'ALTO'],
172
+ ['XMP (XML)', 'Historial de Edición, Software Usado, Ediciones Realizadas', 'MEDIO'],
173
+ ['Datos Básicos Archivo', 'Fecha Creación, Hora Exacta, Dispositivo', 'ALTO']
174
+ ] },
175
+
176
+ { type: 'proscons', items: [
177
+ {
178
+ pro: 'Privacidad Total - 100% procesamiento en el navegador',
179
+ con: 'Requiere navegador moderno con soporte JavaScript'
180
+ },
181
+ {
182
+ pro: 'Instantáneo - limpiar una foto toma menos de 1 segundo',
183
+ con: 'Procesamiento de fotos de gran tamaño puede ser lento en dispositivos antiguos'
184
+ },
185
+ {
186
+ pro: 'Cero Pérdida de Calidad - solo elimina datos técnicos, no píxeles',
187
+ con: 'No edita la imagen (recortes, rotaciones, etc.)'
188
+ },
189
+ {
190
+ pro: 'Completamente Gratuito sin Límites - procesa ilimitadas fotos',
191
+ con: 'Sin soporte premium o almacenamiento en la nube'
192
+ }
193
+ ], proTitle: 'Ventajas Clave', conTitle: 'Limitaciones' },
194
+
195
+ { type: 'tip', title: 'Consejo de Seguridad Digital', html: '<strong>Limpia tus fotos ANTES de publicar</strong> en cualquier red social. Incluso si eliminas una publicación, los metadatos pueden haber sido indexados por buscadores o archivos. Es mejor prevenir que lamentar. Establece como hábito: <br><br><em>Foto → Limpiar EXIF → Publicar</em>' },
196
+
197
+ { type: 'diagnostic', variant: 'warning', title: 'Riesgos Reales de No Limpiar', icon: 'mdi:alert-circle', badge: 'Seguridad Crítica', html: '<strong>Casos documentados:</strong><br>• Padres que publicaban fotos de hijos - predadores rastreaban GPS<br>• Fotógrafos viajeros - casas robadas mientras estaban ausentes<br>• Influencers - ubicaciones de residencias identificadas por fans obsesivos<br><br>No es paranoia: es higiene digital básica en 2026.' },
198
+
199
+ { type: 'glossary', items: [
200
+ {
201
+ term: 'EXIF',
202
+ definition: 'Exchangeable Image File Format. Estándar que almacena metadatos técnicos en archivos de imagen: GPS, datos de cámara, ajustes de exposición. Presente en ~90% de fotos digitales sin intención del usuario.'
203
+ },
204
+ {
205
+ term: 'Coordenadas GPS',
206
+ definition: 'Latitud y longitud precisas al metro de la ubicación exacta donde se tomó la foto. Combinada con redes sociales, permite rastreo físico de personas.'
207
+ },
208
+ {
209
+ term: 'IPTC',
210
+ definition: 'International Press Telecommunications Council. Metadatos legibles de publicación: copyright, autor, palabras clave, descripción. Estándar en fotografía profesional.'
211
+ },
212
+ {
213
+ term: 'XMP',
214
+ definition: 'Extensible Metadata Platform. Formato XML que registra historial de ediciones en software como Lightroom o Photoshop. Puede revelar todas las ediciones realizadas.'
215
+ },
216
+ {
217
+ term: 'OSINT',
218
+ definition: 'Open Source Intelligence. Técnica de recopilación de información pública (redes sociales, metadatos, registros) para perfilar personas sin su conocimiento.'
219
+ },
220
+ {
221
+ term: 'Anonimización Digital',
222
+ definition: 'Proceso de eliminar o ofuscar información identificable: ubicación, dispositivo, patrones de conducta. Esencial para privacidad online.'
223
+ }
224
+ ] },
225
+
226
+ { type: 'message', title: 'Tu Privacidad es tu Responsabilidad', ariaLabel: 'Información sobre privacidad y derechos de datos', html: 'No almacenamos, procesamos ni compartimos tus imágenes. <strong>Tú tienes el control total.</strong> Todas las operaciones ocurren exclusivamente en tu navegador. Cuando cierres esta pestaña, no queda registro alguno de tu actividad. Esta es la forma de proteger tu privacidad en internet: herramientas que respetan tus datos.' },
227
+
228
+ { type: 'title', text: 'Conclusión: Comparte sin Rastros', level: 3 },
229
+ { type: 'paragraph', html: 'Proteger tu identidad digital empieza por los pequeños detalles. Limpiar tus fotos antes de publicarlas es un <strong>hábito esencial de higiene digital</strong> en 2026. No solo protege tu ubicación: protege a tu familia, tus bienes y tu privacidad laboral. Una foto aparentemente inocente puede revelar más de ti de lo que jamás imaginaste.' }
230
+ ];
231
+
232
+ const faqSchema: WithContext<FAQPage> = {
233
+ '@context': 'https://schema.org',
234
+ '@type': 'FAQPage',
235
+ mainEntity: faq.map((item) => ({
236
+ '@type': 'Question',
237
+ name: item.question,
238
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
239
+ })),
240
+ };
241
+
242
+ const howToSchema: WithContext<HowTo> = {
243
+ '@context': 'https://schema.org',
244
+ '@type': 'HowTo',
245
+ name: title,
246
+ description,
247
+ step: howTo.map((step) => ({
248
+ '@type': 'HowToStep',
249
+ name: step.name,
250
+ text: step.text,
251
+ })),
252
+ };
253
+
254
+ const appSchema: WithContext<SoftwareApplication> = {
255
+ '@context': 'https://schema.org',
256
+ '@type': 'SoftwareApplication',
257
+ name: title,
258
+ description,
259
+ applicationCategory: 'UtilitiesApplication',
260
+ operatingSystem: 'Web',
261
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
262
+ inLanguage: 'es',
263
+ };
264
+
265
+ export const content: ExifCleanerLocaleContent = {
266
+ slug,
267
+ title,
268
+ description,
269
+ ui,
270
+ seo,
271
+ faq,
272
+ faqTitle: ui.faqTitle,
273
+ bibliography,
274
+ bibliographyTitle: ui.bibliographyTitle,
275
+ howTo,
276
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
277
+ };