@jjlmoya/utils-creative 1.19.0 → 1.21.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 (146) hide show
  1. package/package.json +1 -1
  2. package/src/data.ts +2 -1
  3. package/src/entries.ts +3 -1
  4. package/src/index.ts +3 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +2 -14
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/bead-pattern-generator/bibliography.astro +2 -12
  11. package/src/tool/bead-pattern-generator/bibliography.ts +5 -0
  12. package/src/tool/bead-pattern-generator/entry.ts +0 -1
  13. package/src/tool/bead-pattern-generator/i18n/de.ts +2 -6
  14. package/src/tool/bead-pattern-generator/i18n/en.ts +2 -6
  15. package/src/tool/bead-pattern-generator/i18n/es.ts +2 -6
  16. package/src/tool/bead-pattern-generator/i18n/fr.ts +2 -6
  17. package/src/tool/bead-pattern-generator/i18n/id.ts +2 -6
  18. package/src/tool/bead-pattern-generator/i18n/it.ts +2 -6
  19. package/src/tool/bead-pattern-generator/i18n/ja.ts +2 -6
  20. package/src/tool/bead-pattern-generator/i18n/ko.ts +2 -6
  21. package/src/tool/bead-pattern-generator/i18n/nl.ts +2 -6
  22. package/src/tool/bead-pattern-generator/i18n/pl.ts +2 -6
  23. package/src/tool/bead-pattern-generator/i18n/pt.ts +2 -6
  24. package/src/tool/bead-pattern-generator/i18n/ru.ts +2 -6
  25. package/src/tool/bead-pattern-generator/i18n/sv.ts +2 -6
  26. package/src/tool/bead-pattern-generator/i18n/tr.ts +2 -6
  27. package/src/tool/bead-pattern-generator/i18n/zh.ts +2 -6
  28. package/src/tool/bead-pattern-generator/seo.astro +10 -5
  29. package/src/tool/dice-roller/bibliography.astro +3 -12
  30. package/src/tool/dice-roller/bibliography.ts +5 -0
  31. package/src/tool/dice-roller/entry.ts +0 -1
  32. package/src/tool/dice-roller/i18n/de.ts +2 -6
  33. package/src/tool/dice-roller/i18n/en.ts +2 -6
  34. package/src/tool/dice-roller/i18n/es.ts +2 -6
  35. package/src/tool/dice-roller/i18n/fr.ts +2 -6
  36. package/src/tool/dice-roller/i18n/id.ts +2 -6
  37. package/src/tool/dice-roller/i18n/it.ts +2 -6
  38. package/src/tool/dice-roller/i18n/ja.ts +2 -6
  39. package/src/tool/dice-roller/i18n/ko.ts +2 -6
  40. package/src/tool/dice-roller/i18n/nl.ts +2 -6
  41. package/src/tool/dice-roller/i18n/pl.ts +2 -6
  42. package/src/tool/dice-roller/i18n/pt.ts +2 -6
  43. package/src/tool/dice-roller/i18n/ru.ts +2 -6
  44. package/src/tool/dice-roller/i18n/sv.ts +2 -6
  45. package/src/tool/dice-roller/i18n/tr.ts +2 -6
  46. package/src/tool/dice-roller/i18n/zh.ts +2 -6
  47. package/src/tool/dice-roller/seo.astro +2 -1
  48. package/src/tool/excuse-generator/bibliography.astro +2 -12
  49. package/src/tool/excuse-generator/bibliography.ts +3 -0
  50. package/src/tool/excuse-generator/entry.ts +0 -1
  51. package/src/tool/excuse-generator/i18n/de.ts +2 -4
  52. package/src/tool/excuse-generator/i18n/en.ts +2 -4
  53. package/src/tool/excuse-generator/i18n/es.ts +2 -4
  54. package/src/tool/excuse-generator/i18n/fr.ts +2 -4
  55. package/src/tool/excuse-generator/i18n/id.ts +2 -4
  56. package/src/tool/excuse-generator/i18n/it.ts +2 -4
  57. package/src/tool/excuse-generator/i18n/ja.ts +2 -4
  58. package/src/tool/excuse-generator/i18n/ko.ts +2 -4
  59. package/src/tool/excuse-generator/i18n/nl.ts +2 -4
  60. package/src/tool/excuse-generator/i18n/pl.ts +2 -4
  61. package/src/tool/excuse-generator/i18n/pt.ts +2 -4
  62. package/src/tool/excuse-generator/i18n/ru.ts +2 -4
  63. package/src/tool/excuse-generator/i18n/sv.ts +2 -4
  64. package/src/tool/excuse-generator/i18n/tr.ts +2 -4
  65. package/src/tool/excuse-generator/i18n/zh.ts +2 -4
  66. package/src/tool/excuse-generator/seo.astro +2 -1
  67. package/src/tool/fortune-cookie/bibliography.astro +2 -12
  68. package/src/tool/fortune-cookie/bibliography.ts +3 -0
  69. package/src/tool/fortune-cookie/entry.ts +0 -1
  70. package/src/tool/fortune-cookie/i18n/de.ts +2 -5
  71. package/src/tool/fortune-cookie/i18n/en.ts +2 -5
  72. package/src/tool/fortune-cookie/i18n/es.ts +2 -4
  73. package/src/tool/fortune-cookie/i18n/fr.ts +2 -5
  74. package/src/tool/fortune-cookie/i18n/id.ts +2 -5
  75. package/src/tool/fortune-cookie/i18n/it.ts +2 -5
  76. package/src/tool/fortune-cookie/i18n/ja.ts +2 -5
  77. package/src/tool/fortune-cookie/i18n/ko.ts +2 -5
  78. package/src/tool/fortune-cookie/i18n/nl.ts +2 -5
  79. package/src/tool/fortune-cookie/i18n/pl.ts +2 -5
  80. package/src/tool/fortune-cookie/i18n/pt.ts +2 -5
  81. package/src/tool/fortune-cookie/i18n/ru.ts +2 -5
  82. package/src/tool/fortune-cookie/i18n/sv.ts +2 -5
  83. package/src/tool/fortune-cookie/i18n/tr.ts +2 -5
  84. package/src/tool/fortune-cookie/i18n/zh.ts +2 -5
  85. package/src/tool/fortune-cookie/seo.astro +2 -1
  86. package/src/tool/glitch-image-distorter/bibliography.astro +8 -0
  87. package/src/tool/glitch-image-distorter/bibliography.ts +4 -0
  88. package/src/tool/glitch-image-distorter/component.astro +393 -0
  89. package/src/tool/glitch-image-distorter/entry.ts +48 -0
  90. package/src/tool/glitch-image-distorter/glitch-image-distorter.css +233 -0
  91. package/src/tool/glitch-image-distorter/i18n/de.ts +131 -0
  92. package/src/tool/glitch-image-distorter/i18n/en.ts +131 -0
  93. package/src/tool/glitch-image-distorter/i18n/es.ts +131 -0
  94. package/src/tool/glitch-image-distorter/i18n/fr.ts +131 -0
  95. package/src/tool/glitch-image-distorter/i18n/id.ts +131 -0
  96. package/src/tool/glitch-image-distorter/i18n/it.ts +131 -0
  97. package/src/tool/glitch-image-distorter/i18n/ja.ts +131 -0
  98. package/src/tool/glitch-image-distorter/i18n/ko.ts +131 -0
  99. package/src/tool/glitch-image-distorter/i18n/nl.ts +131 -0
  100. package/src/tool/glitch-image-distorter/i18n/pl.ts +131 -0
  101. package/src/tool/glitch-image-distorter/i18n/pt.ts +131 -0
  102. package/src/tool/glitch-image-distorter/i18n/ru.ts +131 -0
  103. package/src/tool/glitch-image-distorter/i18n/sv.ts +131 -0
  104. package/src/tool/glitch-image-distorter/i18n/tr.ts +131 -0
  105. package/src/tool/glitch-image-distorter/i18n/zh.ts +131 -0
  106. package/src/tool/glitch-image-distorter/index.ts +9 -0
  107. package/src/tool/glitch-image-distorter/seo.astro +15 -0
  108. package/src/tool/synesthesia-painter/bibliography.astro +3 -12
  109. package/src/tool/synesthesia-painter/bibliography.ts +5 -0
  110. package/src/tool/synesthesia-painter/entry.ts +0 -1
  111. package/src/tool/synesthesia-painter/i18n/de.ts +2 -6
  112. package/src/tool/synesthesia-painter/i18n/en.ts +2 -6
  113. package/src/tool/synesthesia-painter/i18n/es.ts +2 -6
  114. package/src/tool/synesthesia-painter/i18n/fr.ts +2 -6
  115. package/src/tool/synesthesia-painter/i18n/id.ts +2 -6
  116. package/src/tool/synesthesia-painter/i18n/it.ts +2 -6
  117. package/src/tool/synesthesia-painter/i18n/ja.ts +2 -6
  118. package/src/tool/synesthesia-painter/i18n/ko.ts +2 -6
  119. package/src/tool/synesthesia-painter/i18n/nl.ts +2 -6
  120. package/src/tool/synesthesia-painter/i18n/pl.ts +2 -6
  121. package/src/tool/synesthesia-painter/i18n/pt.ts +2 -6
  122. package/src/tool/synesthesia-painter/i18n/ru.ts +2 -6
  123. package/src/tool/synesthesia-painter/i18n/sv.ts +2 -6
  124. package/src/tool/synesthesia-painter/i18n/tr.ts +2 -6
  125. package/src/tool/synesthesia-painter/i18n/zh.ts +2 -6
  126. package/src/tool/synesthesia-painter/seo.astro +2 -1
  127. package/src/tool/zalgo-generator/bibliography.astro +2 -12
  128. package/src/tool/zalgo-generator/bibliography.ts +5 -0
  129. package/src/tool/zalgo-generator/entry.ts +0 -1
  130. package/src/tool/zalgo-generator/i18n/de.ts +2 -6
  131. package/src/tool/zalgo-generator/i18n/en.ts +2 -6
  132. package/src/tool/zalgo-generator/i18n/es.ts +2 -6
  133. package/src/tool/zalgo-generator/i18n/fr.ts +2 -6
  134. package/src/tool/zalgo-generator/i18n/id.ts +2 -6
  135. package/src/tool/zalgo-generator/i18n/it.ts +2 -6
  136. package/src/tool/zalgo-generator/i18n/ja.ts +2 -6
  137. package/src/tool/zalgo-generator/i18n/ko.ts +2 -6
  138. package/src/tool/zalgo-generator/i18n/nl.ts +2 -6
  139. package/src/tool/zalgo-generator/i18n/pl.ts +2 -6
  140. package/src/tool/zalgo-generator/i18n/pt.ts +2 -6
  141. package/src/tool/zalgo-generator/i18n/ru.ts +2 -6
  142. package/src/tool/zalgo-generator/i18n/sv.ts +2 -6
  143. package/src/tool/zalgo-generator/i18n/tr.ts +2 -6
  144. package/src/tool/zalgo-generator/i18n/zh.ts +2 -6
  145. package/src/tool/zalgo-generator/seo.astro +2 -1
  146. package/src/tools.ts +2 -0
@@ -0,0 +1,233 @@
1
+ .glitch-image-distorter {
2
+ --gid-bg: #fff;
3
+ --gid-bg-muted: #f8fafc;
4
+ --gid-text: #0f172a;
5
+ --gid-text-muted: #475569;
6
+ --gid-text-dim: #64748b;
7
+ --gid-border: #e2e8f0;
8
+ --gid-shadow: rgba(0, 0, 0, 0.08);
9
+ --gid-primary: #6366f1;
10
+ --gid-primary-on: #fff;
11
+ }
12
+
13
+ .theme-dark .glitch-image-distorter {
14
+ --gid-bg: #0f172a;
15
+ --gid-bg-muted: #1e293b;
16
+ --gid-text: #f8fafc;
17
+ --gid-text-muted: #94a3b8;
18
+ --gid-text-dim: #64748b;
19
+ --gid-border: #334155;
20
+ --gid-shadow: rgba(0, 0, 0, 0.35);
21
+ --gid-primary: #818cf8;
22
+ }
23
+
24
+ .glitch-image-distorter-card {
25
+ position: relative;
26
+ min-height: 500px;
27
+ background-color: var(--gid-bg);
28
+ border-radius: 2rem;
29
+ border: 1px solid var(--gid-border);
30
+ box-shadow: 0 20px 40px -8px var(--gid-shadow);
31
+ display: flex;
32
+ flex-direction: column;
33
+ overflow: hidden;
34
+ }
35
+
36
+ .glitch-image-distorter-canvas-wrapper {
37
+ flex: 1;
38
+ position: relative;
39
+ overflow: hidden;
40
+ background-color: var(--gid-bg-muted);
41
+ border: 2px dashed var(--gid-border);
42
+ border-radius: 1rem;
43
+ margin: 1.5rem;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ cursor: pointer;
48
+ }
49
+
50
+ .glitch-image-distorter-canvas {
51
+ max-width: 100%;
52
+ max-height: 100%;
53
+ border-radius: 0.5rem;
54
+ }
55
+
56
+ .glitch-image-distorter-drop-zone {
57
+ position: absolute;
58
+ inset: 0;
59
+ display: flex;
60
+ flex-direction: column;
61
+ align-items: center;
62
+ justify-content: center;
63
+ gap: 1rem;
64
+ padding: 1rem;
65
+ text-align: center;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .glitch-image-distorter-drop-zone.hidden {
70
+ display: none;
71
+ }
72
+
73
+ .glitch-image-distorter-drop-icon {
74
+ width: 3rem;
75
+ height: 3rem;
76
+ opacity: 0.5;
77
+ color: var(--gid-text-muted);
78
+ }
79
+
80
+ .glitch-image-distorter-drop-text {
81
+ color: var(--gid-text-muted);
82
+ font-size: 0.9rem;
83
+ font-weight: 500;
84
+ }
85
+
86
+ .glitch-image-distorter-paste-hint {
87
+ color: var(--gid-text-dim);
88
+ font-size: 0.8rem;
89
+ margin-top: 0.5rem;
90
+ }
91
+
92
+ .glitch-image-distorter-controls {
93
+ padding: 1.5rem;
94
+ background-color: var(--gid-bg);
95
+ border-top: 1px solid var(--gid-border);
96
+ display: grid;
97
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
98
+ gap: 1rem;
99
+ }
100
+
101
+ .glitch-image-distorter-control {
102
+ display: flex;
103
+ flex-direction: column;
104
+ gap: 0.5rem;
105
+ }
106
+
107
+ .glitch-image-distorter-label {
108
+ font-size: 0.875rem;
109
+ font-weight: 600;
110
+ color: var(--gid-text);
111
+ }
112
+
113
+ .glitch-image-distorter-slider {
114
+ width: 100%;
115
+ height: 6px;
116
+ border-radius: 3px;
117
+ background: linear-gradient(90deg, transparent, var(--gid-primary));
118
+ outline: none;
119
+ cursor: pointer;
120
+ -webkit-appearance: none;
121
+ appearance: none;
122
+ }
123
+
124
+ .glitch-image-distorter-slider::-webkit-slider-thumb {
125
+ -webkit-appearance: none;
126
+ appearance: none;
127
+ width: 16px;
128
+ height: 16px;
129
+ border-radius: 50%;
130
+ background: var(--gid-primary);
131
+ cursor: pointer;
132
+ box-shadow: 0 2px 4px var(--gid-shadow);
133
+ }
134
+
135
+ .glitch-image-distorter-slider::-moz-range-thumb {
136
+ width: 16px;
137
+ height: 16px;
138
+ border-radius: 50%;
139
+ background: var(--gid-primary);
140
+ cursor: pointer;
141
+ border: none;
142
+ box-shadow: 0 2px 4px var(--gid-shadow);
143
+ }
144
+
145
+ .glitch-image-distorter-select {
146
+ padding: 0.5rem;
147
+ border-radius: 0.5rem;
148
+ border: 1px solid var(--gid-border);
149
+ background-color: var(--gid-bg);
150
+ color: var(--gid-text);
151
+ font-size: 0.875rem;
152
+ cursor: pointer;
153
+ }
154
+
155
+ .glitch-image-distorter-buttons {
156
+ padding: 1.5rem;
157
+ background-color: var(--gid-bg-muted);
158
+ border-top: 1px solid var(--gid-border);
159
+ display: flex;
160
+ flex-wrap: wrap;
161
+ gap: 0.75rem;
162
+ justify-content: center;
163
+ }
164
+
165
+ .glitch-image-distorter-btn {
166
+ padding: 0.75rem 1.5rem;
167
+ border-radius: 0.5rem;
168
+ border: 1px solid var(--gid-border);
169
+ background-color: var(--gid-bg);
170
+ color: var(--gid-text);
171
+ font-weight: 500;
172
+ font-size: 0.875rem;
173
+ cursor: pointer;
174
+ transition: all 0.2s ease;
175
+ }
176
+
177
+ .glitch-image-distorter-btn:hover {
178
+ background-color: var(--gid-bg-muted);
179
+ border-color: var(--gid-primary);
180
+ color: var(--gid-primary);
181
+ }
182
+
183
+ .glitch-image-distorter-btn.primary {
184
+ background-color: var(--gid-primary);
185
+ color: var(--gid-primary-on);
186
+ border-color: var(--gid-primary);
187
+ }
188
+
189
+ .glitch-image-distorter-btn.primary:hover {
190
+ opacity: 0.9;
191
+ transform: translateY(-1px);
192
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
193
+ }
194
+
195
+ .glitch-image-distorter-checkbox {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 0.5rem;
199
+ cursor: pointer;
200
+ }
201
+
202
+ .glitch-image-distorter-checkbox input {
203
+ cursor: pointer;
204
+ accent-color: var(--gid-primary);
205
+ }
206
+
207
+ .glitch-image-distorter-checkbox label {
208
+ cursor: pointer;
209
+ font-size: 0.875rem;
210
+ color: var(--gid-text);
211
+ }
212
+
213
+ .glitch-image-distorter-example-btn {
214
+ position: absolute;
215
+ bottom: 1rem;
216
+ right: 1rem;
217
+ padding: 0.75rem 1rem;
218
+ background-color: var(--gid-primary);
219
+ color: var(--gid-primary-on);
220
+ border: none;
221
+ border-radius: 0.5rem;
222
+ font-size: 0.875rem;
223
+ font-weight: 500;
224
+ cursor: pointer;
225
+ transition: all 0.2s ease;
226
+ z-index: 10;
227
+ }
228
+
229
+ .glitch-image-distorter-example-btn:hover {
230
+ opacity: 0.9;
231
+ transform: translateY(-2px);
232
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
233
+ }
@@ -0,0 +1,131 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { GlitchImageDistorterLocaleContent } from '../index';
4
+
5
+ const slug = 'glitch-bild-distorter';
6
+ const title = 'Glitch Bild Distorter';
7
+ const description = 'Verwandle Bilder in Glitch-Art mit RGB-Splits, Scanlines, Pixel-Sorting und animierten Verzerrungen. Ganz ohne Photoshop.';
8
+
9
+ const faq: GlitchImageDistorterLocaleContent['faq'] = [
10
+ {
11
+ question: 'Was ist Glitch-Art?',
12
+ answer: 'Glitch-Art ist eine Form digitaler Kunst, bei der digitale Bilder oder Daten manipuliert werden, um absichtliche visuelle Fehler zu erzeugen. Diese "Glitches" führen zu fragmentierten Farben, verzerrten Formen und unvorhersehbaren Mustern, die eine Ästhetik digitaler Korruption und Chaos erzeugen.',
13
+ },
14
+ {
15
+ question: 'Kann ich meine eigenen Bilder verwenden?',
16
+ answer: 'Ja! Du kannst jedes PNG-, JPG- oder WebP-Bild hochladen, per Drag-and-Drop auf die Leinwand ziehen oder ein Bild direkt aus der Zwischenablage mit Strg+V einfügen. Du kannst auch das Beispielbild verwenden.',
17
+ },
18
+ {
19
+ question: 'Was bewirken die verschiedenen Verzerrungseffekte?',
20
+ answer: 'Korruption trennt die RGB-Kanäle für einen chromatischen Aberrationseffekt. Interferenz fügt monitorähnliche Scanlines mit optionalem Zittern hinzu. Pixel-Sorting lässt helle Pixel in eine gewählte Richtung "fließen". Statisches Rauschen überlagert klassisches TV-Schneerauschen.',
21
+ },
22
+ {
23
+ question: 'Kann ich den Glitch-Effekt animieren?',
24
+ answer: 'Ja! Der "Glitch-Animation"-Modus wendet mikro-zufällige Bewegungen auf die Parameter an und erzeugt so einen lebendigen, flackernden Effekt, der kontinuierlich läuft. Du kannst dies als animiertes GIF oder WebP exportieren.',
25
+ },
26
+ {
27
+ question: 'Welche Formate kann ich exportieren?',
28
+ answer: 'Du kannst ein hochwertiges PNG für die statische Nutzung herunterladen oder als animiertes GIF oder WebP exportieren, wenn der Animationsmodus aktiviert ist. Perfekt für Instagram, Discord oder andere Plattformen.',
29
+ },
30
+ {
31
+ question: 'Was macht die Chaos-Taste?',
32
+ answer: 'Die "Chaos-Zufall"-Taste randomisiert sofort alle Schiebereglerwerte und erzeugt so unerwartete und oft überraschende Glitch-Kombinationen. Ideal zum Erkunden des kreativen Potenzials ohne manuelle Anpassungen.',
33
+ },
34
+ ];
35
+
36
+ const howTo: GlitchImageDistorterLocaleContent['howTo'] = [
37
+ { name: 'Bild laden', text: 'Ziehe ein Bild auf die Leinwand, füge es mit Strg+V ein, lade es über die Datei-Schaltfläche hoch oder klicke auf "Beispielbild verwenden".' },
38
+ { name: 'Regler anpassen', text: 'Verwende die Regler für Korruption, Interferenz, Pixel-Sort und Rauschen, um verschiedene Glitch-Effekte anzuwenden. Die Vorschau wird in Echtzeit aktualisiert.' },
39
+ { name: 'Animation aktivieren', text: 'Schalte die "Glitch-Animation"-Taste ein, um mikro-zufällige Bewegungen hinzuzufügen. Das Bild wird flackern und sich dynamisch verändern.' },
40
+ { name: 'Kreation exportieren', text: 'Lade als PNG für statische Kunstwerke herunter oder exportiere als GIF/WebP, wenn die Animation aktiviert ist. Teile deine Glitch-Art in sozialen Medien!' },
41
+ { name: 'Mit Chaos experimentieren', text: 'Klicke auf die "Chaos-Zufall"-Taste, um alle Einstellungen automatisch zu randomisieren und unerwartete Glitch-Kombinationen zu entdecken.' },
42
+ ];
43
+
44
+ const faqSchema: WithContext<FAQPage> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'FAQPage',
47
+ mainEntity: faq.map((item) => ({
48
+ '@type': 'Question',
49
+ name: item.question,
50
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
51
+ })),
52
+ };
53
+
54
+ const howToSchema: WithContext<HowTo> = {
55
+ '@context': 'https://schema.org',
56
+ '@type': 'HowTo',
57
+ name: title,
58
+ description,
59
+ step: howTo.map((step) => ({
60
+ '@type': 'HowToStep',
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilitiesApplication',
72
+ operatingSystem: 'Web',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
74
+ inLanguage: 'de',
75
+ };
76
+
77
+ export const content: GlitchImageDistorterLocaleContent = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: 'Häufig gestellte Fragen',
82
+ ui: {
83
+ title: 'Glitch Distorter',
84
+ description: 'Erstelle Glitch-Art in Sekundenschnelle.',
85
+ dragDropText: 'Bild hierher ziehen oder zum Hochladen klicken',
86
+ pasteHint: 'Tipp: Du kannst ein Bild auch mit Strg+V einfügen',
87
+ exampleImageBtn: 'Beispielbild verwenden',
88
+ corruptionLabel: 'Korruption (RGB-Split)',
89
+ interferenceLabel: 'Interferenz (Scanlines)',
90
+ tremorLabel: 'Zittern',
91
+ pixelSortLabel: 'Pixel Sorting',
92
+ pixelSortDirectionLabel: 'Richtung',
93
+ noiseLabel: 'Statisches Rauschen',
94
+ animateBtn: 'Glitch Animation',
95
+ chaosBtn: 'Chaos-Zufall',
96
+ downloadPngBtn: 'PNG herunterladen',
97
+ downloadGifBtn: 'GIF herunterladen',
98
+ undoBtn: 'Rückgängig',
99
+ redoBtn: 'Wiederholen',
100
+ footerText: 'Erstelle korrumpierte digitale Kunst in weniger als 30 Sekunden',
101
+ faqTitle: 'FAQ',
102
+ bibliographyTitle: 'Referenzen'
103
+ },
104
+ seo: [
105
+ { type: 'title', text: 'Was ist Glitch-Art?', level: 2 },
106
+ { type: 'paragraph', html: '<strong>Glitch-Art</strong> ist eine kreative Praxis, die absichtlich digitale Fehler, korrupte Daten und visuelle Artefakte nutzt, um ästhetische Ergebnisse zu erzielen. Im Gegensatz zur traditionellen Kunst, die nach Perfektion strebt, feiert Glitch die unerwartete Schönheit des digitalen Zusammenbruchs — fragmentierte Farben und chaotische Muster, die aus technischem Versagen entstehen.' },
107
+ { type: 'title', text: 'Ursprünge und digitale Ästhetik', level: 3 },
108
+ { type: 'paragraph', html: 'Die Glitch-Ästhetik entstand Anfang der 2000er Jahre, als digitale Künstler begannen, mit korrupten Bilddateien und Hardwarefehlern zu experimentieren. Künstler wie <strong>Rosa Menkman</strong> erhoben Glitch-Art zur bildenden Kunst, indem sie die Poetik digitaler Artefakte untersuchten. Die Ästhetik schöpft aus VHS-Degradation, Übertragungsfehlern und dem sichtbaren "Rauschen" digitaler Systeme.' },
109
+ { type: 'title', text: 'Wichtige Glitch-Techniken', level: 3 },
110
+ { type: 'list', items: [
111
+ '<strong>RGB-Splitting:</strong> Das Trennen und Versetzen der roten, grünen und blauen Farbkanäle erzeugt chromatische Aberration.',
112
+ '<strong>Scanlines:</strong> Das Simulieren horizontaler Scanzeilen ahmt alte CRT-Monitore nach und fügt eine retro Ästhetik hinzu.',
113
+ '<strong>Pixel-Sorting:</strong> Das Sortieren von Pixeln nach Helligkeit und deren Verschiebung erzeugt einen "schmelzenden" Effekt.',
114
+ '<strong>Data Moshing:</strong> Die Manipulation von Videocodec-Daten, um Frames auf unerwartete Weise zu mischen.',
115
+ '<strong>Bit Shifting:</strong> Die direkte Veränderung von Binärdaten führt zu dramatischen Farbverschiebungen und Verzerrungen.',
116
+ ]},
117
+ { type: 'tip', title: 'Die Philosophie hinter Glitch', html: 'Glitch-Art stellt die Vorstellung einer "perfekten" digitalen Darstellung in Frage. Indem wir Fehler akzeptieren, hinterfragen wir die Zuverlässigkeit der Technologie und erforschen, wie diese unsere Wahrnehmung der Realität vermittelt. Es ist Kunst über Systemfehler und die in Chaos verborgene Schönheit.' },
118
+ { type: 'title', text: 'Zeitgenössische Anwendungen', level: 3 },
119
+ { type: 'paragraph', html: 'Heute findet man Glitch-Ästhetik überall: Albumcover, Musikvideos, Mode und Grafikdesign. Dieses Tool demokratisiert die Erstellung von Glitch-Art und ermöglicht es jedem, professionell aussehende digitale Korruption ohne tiefes technisches Wissen zu produzieren.' },
120
+ { type: 'stats', items: [
121
+ { value: '2000er', label: 'Entstehung der Glitch-Art', icon: 'mdi:history' },
122
+ { value: '∞', label: 'Mögliche Glitch-Kombinationen', icon: 'mdi:shuffle-variant' },
123
+ { value: '<30s', label: 'Zeit zum Erstellen', icon: 'mdi:flash' },
124
+ { value: '3+', label: 'Export-Formate', icon: 'mdi:download-multiple' },
125
+ ], columns: 4 },
126
+ ],
127
+ faq,
128
+ bibliography,
129
+ howTo,
130
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
131
+ };
@@ -0,0 +1,131 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { GlitchImageDistorterLocaleContent } from '../index';
4
+
5
+ const slug = 'glitch-image-distorter';
6
+ const title = 'Glitch Image Distorter';
7
+ const description = 'Transform images into glitch art with RGB splits, scanlines, pixel sorting, and animated distortions. No Photoshop needed.';
8
+
9
+ const faq: GlitchImageDistorterLocaleContent['faq'] = [
10
+ {
11
+ question: 'What is glitch art?',
12
+ answer: 'Glitch art is a form of digital art created by manipulating digital images or data to produce intentional visual errors. These "glitches" result in fragmented colors, distorted shapes, and unpredictable patterns that create an aesthetic of digital corruption and chaos.',
13
+ },
14
+ {
15
+ question: 'Can I use my own images?',
16
+ answer: 'Yes! You can upload any PNG, JPG, or WebP image, drag and drop it into the canvas, or paste an image directly from your clipboard using Ctrl+V. You can also use the example image to explore the tool without uploading.',
17
+ },
18
+ {
19
+ question: 'What do the different distortion effects do?',
20
+ answer: 'Corruption separates RGB channels for a chromatic aberration effect. Interference adds monitor-like scanlines with optional tremor. Pixel Sorting makes bright pixels "drip" in a chosen direction. Static Noise overlays classic TV snow. Combined, they create the glitch aesthetic.',
21
+ },
22
+ {
23
+ question: 'Can I animate the glitch effect?',
24
+ answer: 'Yes! The "Glitch Animate" mode applies micro-random movements to the parameters, creating a living, flickering effect that loops continuously. You can export this as an animated GIF or WebP for social media.',
25
+ },
26
+ {
27
+ question: 'What formats can I export?',
28
+ answer: 'You can download a high-quality PNG for static use, or export as an animated GIF or WebP if you enabled animation mode. These formats are perfect for sharing on Instagram, Discord, or other platforms.',
29
+ },
30
+ {
31
+ question: 'What does the Chaos button do?',
32
+ answer: 'The "Chaos Random" button instantly randomizes all slider values, creating unexpected and often surprising glitch combinations. It\'s perfect for exploring the tool\'s creative potential without manual tweaking.',
33
+ },
34
+ ];
35
+
36
+ const howTo: GlitchImageDistorterLocaleContent['howTo'] = [
37
+ { name: 'Load an image', text: 'Drag and drop an image onto the canvas, paste one with Ctrl+V, upload via the file button, or click "Use example image" to start immediately.' },
38
+ { name: 'Adjust distortion sliders', text: 'Use the Corruption, Interference, Pixel Sort, and Noise sliders to apply different glitch effects. Watch the preview update in real-time.' },
39
+ { name: 'Enable animation', text: 'Toggle the "Glitch Animate" button to add micro-random movements. The image will flicker and shift, creating a living glitch effect.' },
40
+ { name: 'Export your creation', text: 'Download as PNG for static artwork, or export as GIF/WebP if animation is enabled. Share your glitch art on social media!' },
41
+ { name: 'Experiment with Chaos', text: 'Click the "Chaos Random" button to auto-randomize all settings and discover unexpected glitch combinations.' },
42
+ ];
43
+
44
+ const faqSchema: WithContext<FAQPage> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'FAQPage',
47
+ mainEntity: faq.map((item) => ({
48
+ '@type': 'Question',
49
+ name: item.question,
50
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
51
+ })),
52
+ };
53
+
54
+ const howToSchema: WithContext<HowTo> = {
55
+ '@context': 'https://schema.org',
56
+ '@type': 'HowTo',
57
+ name: title,
58
+ description,
59
+ step: howTo.map((step) => ({
60
+ '@type': 'HowToStep',
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilitiesApplication',
72
+ operatingSystem: 'Web',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
74
+ inLanguage: 'en',
75
+ };
76
+
77
+ export const content: GlitchImageDistorterLocaleContent = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: 'Frequently Asked Questions',
82
+ ui: {
83
+ title: 'Glitch Image Distorter',
84
+ description: 'Create glitch art in seconds.',
85
+ dragDropText: 'Drag & drop an image here or click to upload',
86
+ pasteHint: 'Tip: You can also paste an image with Ctrl+V',
87
+ exampleImageBtn: 'Use example image',
88
+ corruptionLabel: 'Corruption (RGB Split)',
89
+ interferenceLabel: 'Interference (Scanlines)',
90
+ tremorLabel: 'Tremor',
91
+ pixelSortLabel: 'Pixel Sorting',
92
+ pixelSortDirectionLabel: 'Direction',
93
+ noiseLabel: 'Static Noise',
94
+ animateBtn: 'Glitch Animate',
95
+ chaosBtn: 'Chaos Random',
96
+ downloadPngBtn: 'Download PNG',
97
+ downloadGifBtn: 'Download GIF',
98
+ undoBtn: 'Undo',
99
+ redoBtn: 'Redo',
100
+ footerText: 'Create corrupted digital art in less than 30 seconds',
101
+ faqTitle: 'FAQ',
102
+ bibliographyTitle: 'References'
103
+ },
104
+ seo: [
105
+ { type: 'title', text: 'What Is Glitch Art?', level: 2 },
106
+ { type: 'paragraph', html: '<strong>Glitch art</strong> is a creative practice that intentionally exploits digital errors, corrupted data, and visual artifacts to produce aesthetic results. Unlike traditional art, which seeks perfection and clarity, glitch art celebrates the unexpected beauty of digital breakdown—fragmented colors, distorted shapes, and chaotic patterns that emerge from technological failure.' },
107
+ { type: 'title', text: 'Origins and Digital Aesthetics', level: 3 },
108
+ { type: 'paragraph', html: 'The glitch aesthetic emerged in the early 2000s as digital artists began experimenting with corrupted image files, codec errors, and hardware malfunctions. Artists like <strong>Rosa Menkman</strong> and <strong>Evan Roth</strong> elevated glitch art to fine art status by investigating the poetics of digital artifacts. The aesthetic draws from VHS degradation, transmission errors, and the visible "noise" of digital systems—transforming technical failures into cultural commentary.' },
109
+ { type: 'title', text: 'Key Glitch Techniques', level: 3 },
110
+ { type: 'list', items: [
111
+ '<strong>RGB Splitting:</strong> Separating red, green, and blue color channels and offsetting them creates chromatic aberration, a signature glitch effect.',
112
+ '<strong>Scanlines:</strong> Simulating horizontal scan lines mimics old CRT monitors and adds a retro, corrupted television aesthetic.',
113
+ '<strong>Pixel Sorting:</strong> Sorting pixels by brightness or hue and shifting them directionally creates a "melting" or "dripping" effect.',
114
+ '<strong>Data Moshing:</strong> Manipulating video codec data to blend frames in unexpected ways, creating temporal distortion.',
115
+ '<strong>Bit Shifting:</strong> Altering binary data directly results in dramatic color shifts and geometric distortions.',
116
+ ]},
117
+ { type: 'tip', title: 'The Philosophy Behind Glitch', html: 'Glitch art challenges the notion of "perfect" digital representation. By embracing errors and imperfections, glitch artists question the reliability of digital media and explore how technology mediates our perception of reality. It\'s art about systems failure, human fallibility, and the beauty hidden in chaos.' },
118
+ { type: 'title', text: 'Contemporary Applications', level: 3 },
119
+ { type: 'paragraph', html: 'Today, glitch aesthetics appear everywhere: album covers, music videos, fashion, and graphic design. Artists like <strong>Jon Cates</strong> and collectives like <strong>JODI</strong> continue pushing the boundaries of what glitch can express. This tool democratizes glitch art creation, allowing anyone to produce professional-looking digital corruption without deep technical knowledge.' },
120
+ { type: 'stats', items: [
121
+ { value: '2000s', label: 'Emergence of glitch art', icon: 'mdi:history' },
122
+ { value: '∞', label: 'Possible glitch combinations', icon: 'mdi:shuffle-variant' },
123
+ { value: '<30s', label: 'Time to create', icon: 'mdi:flash' },
124
+ { value: '3+', label: 'Export formats', icon: 'mdi:download-multiple' },
125
+ ], columns: 4 },
126
+ ],
127
+ faq,
128
+ bibliography,
129
+ howTo,
130
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
131
+ };
@@ -0,0 +1,131 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { GlitchImageDistorterLocaleContent } from '../index';
4
+
5
+ const slug = 'distorsionador-imagenes-glitch';
6
+ const title = 'Distorsionador de Imágenes Glitch';
7
+ const description = 'Transforma tus fotos en arte glitch con separaciones RGB, líneas de escaneo, pixel sorting y distorsiones animadas. Sin Photoshop.';
8
+
9
+ const faq: GlitchImageDistorterLocaleContent['faq'] = [
10
+ {
11
+ question: '¿Qué es el arte glitch?',
12
+ answer: 'El arte glitch es una forma de expresión digital que consiste en manipular imágenes o datos para producir errores visuales intencionados. Estos "glitches" generan colores fragmentados, formas distorsionadas y patrones impredecibles que crean una estética de corrupción digital y caos.',
13
+ },
14
+ {
15
+ question: '¿Puedo usar mis propias imágenes?',
16
+ answer: '¡Sí! Puedes subir cualquier imagen en formato PNG, JPG o WebP, arrastrarla y soltarla en el lienzo, o pegarla directamente desde el portapapeles usando Ctrl+V. También tienes disponible una imagen de ejemplo para explorar la herramienta.',
17
+ },
18
+ {
19
+ question: '¿Qué hacen los diferentes efectos de distorsión?',
20
+ answer: 'La Corrupción separa los canales RGB para un efecto de aberración cromática. La Interferencia añade líneas de escaneo similares a monitores antiguos con temblor opcional. El Pixel Sorting hace que los píxeles brillantes "goteen" en una dirección. El Ruido Estático añade la clásica nieve de televisor.',
21
+ },
22
+ {
23
+ question: '¿Puedo animar el efecto glitch?',
24
+ answer: '¡Claro! El modo "Animación Glitch" aplica movimientos aleatorios sutiles a los parámetros, creando un efecto vibrante y dinámico que se repite continuamente. Puedes exportarlo como un GIF animado o WebP para redes sociales.',
25
+ },
26
+ {
27
+ question: '¿En qué formatos puedo exportar?',
28
+ answer: 'Puedes descargar un PNG de alta calidad para imágenes estáticas, o exportar como GIF o WebP animado si activaste el modo de animación. Estos formatos son perfectos para compartir en Instagram, Discord y otras plataformas.',
29
+ },
30
+ {
31
+ question: '¿Para qué sirve el botón Caos?',
32
+ answer: 'El botón "Caos Aleatorio" cambia instantáneamente todos los valores de los controles, generando combinaciones de glitch inesperadas y sorprendentes. Es ideal para explorar el potencial creativo de la herramienta sin ajustes manuales.',
33
+ },
34
+ ];
35
+
36
+ const howTo: GlitchImageDistorterLocaleContent['howTo'] = [
37
+ { name: 'Carga una imagen', text: 'Arrastra y suelta una imagen, pégala con Ctrl+V, súbela desde tu dispositivo o usa la imagen de ejemplo para empezar de inmediato.' },
38
+ { name: 'Ajusta los efectos', text: 'Usa los controles de Corrupción, Interferencia, Pixel Sorting y Ruido para aplicar diferentes efectos. La vista previa se actualiza en tiempo real.' },
39
+ { name: 'Activa la animación', text: 'Pulsa el botón "Animación Glitch" para añadir vibraciones y parpadeos aleatorios. La imagen cobrará vida con un efecto glitch dinámico.' },
40
+ { name: 'Exporta tu creación', text: 'Descarga como PNG para arte estático o exporta como GIF/WebP si activaste la animación. ¡Comparte tu arte glitch en redes sociales!' },
41
+ { name: 'Experimenta con el Caos', text: 'Haz clic en el botón "Caos Aleatorio" para descubrir combinaciones de efectos sorprendentes de forma automática.' },
42
+ ];
43
+
44
+ const faqSchema: WithContext<FAQPage> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'FAQPage',
47
+ mainEntity: faq.map((item) => ({
48
+ '@type': 'Question',
49
+ name: item.question,
50
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
51
+ })),
52
+ };
53
+
54
+ const howToSchema: WithContext<HowTo> = {
55
+ '@context': 'https://schema.org',
56
+ '@type': 'HowTo',
57
+ name: title,
58
+ description,
59
+ step: howTo.map((step) => ({
60
+ '@type': 'HowToStep',
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilitiesApplication',
72
+ operatingSystem: 'Web',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
74
+ inLanguage: 'es',
75
+ };
76
+
77
+ export const content: GlitchImageDistorterLocaleContent = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: 'Preguntas Frecuentes',
82
+ ui: {
83
+ title: 'Distorsionador Glitch',
84
+ description: 'Crea arte glitch en segundos.',
85
+ dragDropText: 'Arrastra una imagen aquí o haz clic para subir',
86
+ pasteHint: 'Truco: También puedes pegar una imagen con Ctrl+V',
87
+ exampleImageBtn: 'Usar imagen de ejemplo',
88
+ corruptionLabel: 'Corrupción (Separación RGB)',
89
+ interferenceLabel: 'Interferencia (Líneas)',
90
+ tremorLabel: 'Temblor',
91
+ pixelSortLabel: 'Pixel Sorting',
92
+ pixelSortDirectionLabel: 'Dirección',
93
+ noiseLabel: 'Ruido Estático',
94
+ animateBtn: 'Animación Glitch',
95
+ chaosBtn: 'Caos Aleatorio',
96
+ downloadPngBtn: 'Descargar PNG',
97
+ downloadGifBtn: 'Descargar GIF',
98
+ undoBtn: 'Deshacer',
99
+ redoBtn: 'Rehacer',
100
+ footerText: 'Crea arte digital corrupto en menos de 30 segundos',
101
+ faqTitle: 'FAQ',
102
+ bibliographyTitle: 'Referencias'
103
+ },
104
+ seo: [
105
+ { type: 'title', text: '¿Qué es el Arte Glitch?', level: 2 },
106
+ { type: 'paragraph', html: 'El <strong>arte glitch</strong> es una práctica creativa que explota intencionadamente los errores digitales, los datos corruptos y los artefactos visuales para producir resultados estéticos. A diferencia del arte tradicional, que busca la perfección, el glitch celebra la belleza inesperada del fallo tecnológico: colores fragmentados y patrones caóticos que surgen del error.' },
107
+ { type: 'title', text: 'Orígenes y Estética Digital', level: 3 },
108
+ { type: 'paragraph', html: 'Esta estética surgió a principios de los 2000, cuando artistas digitales empezaron a experimentar con archivos corruptos y fallos de hardware. Artistas como <strong>Rosa Menkman</strong> elevaron el glitch a la categoría de arte mediante la investigación de la poética de los artefactos digitales. La estética se nutre de la degradación del VHS, los errores de transmisión y el "ruido" de los sistemas digitales.' },
109
+ { type: 'title', text: 'Técnicas Clave de Glitch', level: 3 },
110
+ { type: 'list', items: [
111
+ '<strong>Separación RGB:</strong> Desfasar los canales rojo, verde y azul para crear aberración cromática.',
112
+ '<strong>Líneas de Escaneo:</strong> Simular las líneas horizontales de los antiguos monitores CRT para un toque retro.',
113
+ '<strong>Pixel Sorting:</strong> Ordenar píxeles por brillo y desplazarlos para crear un efecto de "derretido".',
114
+ '<strong>Data Moshing:</strong> Manipular datos de códecs de vídeo para mezclar fotogramas de forma inesperada.',
115
+ '<strong>Bit Shifting:</strong> Alterar datos binarios directamente para obtener distorsiones geométricas dramáticas.',
116
+ ]},
117
+ { type: 'tip', title: 'La Filosofía del Glitch', html: 'El arte glitch desafía la idea de la representación digital "perfecta". Al abrazar el error, cuestionamos la fiabilidad de la tecnología y exploramos cómo ésta media en nuestra percepción de la realidad. Es arte sobre el fallo del sistema y la belleza oculta en el caos.' },
118
+ { type: 'title', text: 'Aplicaciones Contemporáneas', level: 3 },
119
+ { type: 'paragraph', html: 'Hoy en día, la estética glitch está en todas partes: portadas de discos, videoclips, moda y diseño gráfico. Esta herramienta democratiza la creación de este estilo, permitiendo que cualquiera genere piezas profesionales de corrupción digital sin conocimientos técnicos profundos.' },
120
+ { type: 'stats', items: [
121
+ { value: '2000s', label: 'Aparición del arte glitch', icon: 'mdi:history' },
122
+ { value: '∞', label: 'Combinaciones posibles', icon: 'mdi:shuffle-variant' },
123
+ { value: '<30s', label: 'Tiempo de creación', icon: 'mdi:flash' },
124
+ { value: '3+', label: 'Formatos de exportación', icon: 'mdi:download-multiple' },
125
+ ], columns: 4 },
126
+ ],
127
+ faq,
128
+ bibliography,
129
+ howTo,
130
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
131
+ };