Add Python script to batch process Schnappix photos with enhanced saturation and contrast
This commit is contained in:
1 parent
bede07e949
commit
eb7fbf20c0
4 files changed
+154
No files matched your search
@@ -0,0 +1,101 @@
|
||||
const fs = require('fs');
|
||||
|
||||
// 1. Update globals.css
|
||||
let css = fs.readFileSync('src/app/globals.css', 'utf8');
|
||||
|
||||
// Replace media-wall and queries
|
||||
const oldCssMatch = css.match(/\.media-wall\s*\{[^}]+\}(?:\s*@media[^}]+\{\s*\.media-wall\s*\{[^}]+\}\s*\}){4}/s);
|
||||
if (oldCssMatch) {
|
||||
const newCss = `.media-wall {
|
||||
column-count: 2;
|
||||
column-gap: 10px;
|
||||
padding: 80px 10px 20px;
|
||||
max-width: 1920px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (min-width: 480px) {
|
||||
.media-wall {
|
||||
column-count: 3;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.media-wall {
|
||||
column-count: 4;
|
||||
column-gap: 15px;
|
||||
padding: 80px 15px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.media-wall {
|
||||
column-count: 5;
|
||||
column-gap: 20px;
|
||||
padding: 90px 20px 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1440px) {
|
||||
.media-wall {
|
||||
column-count: 6;
|
||||
}
|
||||
}`;
|
||||
css = css.replace(oldCssMatch[0], newCss);
|
||||
}
|
||||
|
||||
// Replace media-tile and images
|
||||
const tileMatch = css.match(/\.media-tile\s*\{[^}]+\}\s*\.media-tile:hover\s*\{[^}]+\}\s*\.media-tile img,\s*\.media-tile video\s*\{[^}]+\}/s);
|
||||
if (tileMatch) {
|
||||
const newTile = `.media-tile {
|
||||
break-inside: avoid;
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: var(--radius);
|
||||
background: var(--color-border);
|
||||
cursor: pointer;
|
||||
transition: transform var(--transition), box-shadow var(--transition);
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.media-tile { margin-bottom: 15px; }
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.media-tile { margin-bottom: 20px; }
|
||||
}
|
||||
|
||||
.media-tile:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.media-tile img,
|
||||
.media-tile video {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%; /* Filled by parent aspect-ratio */
|
||||
object-fit: cover;
|
||||
}`;
|
||||
css = css.replace(tileMatch[0], newTile);
|
||||
}
|
||||
|
||||
fs.writeFileSync('src/app/globals.css', css, 'utf8');
|
||||
|
||||
// 2. Update MediaTile.tsx
|
||||
let tile = fs.readFileSync('src/components/MediaTile.tsx', 'utf8');
|
||||
tile = tile.replace(
|
||||
` const style: React.CSSProperties = {
|
||||
gridColumn: \`span \${item.gridWidth || 1}\`,
|
||||
gridRow: \`span \${item.gridHeight || 1}\`,
|
||||
aspectRatio,
|
||||
};`,
|
||||
` const style: React.CSSProperties = {
|
||||
aspectRatio,
|
||||
};`
|
||||
);
|
||||
// Make sure featured items span all columns if needed (optional)
|
||||
// Actually we'll just let them be normal items in the masonry flow
|
||||
fs.writeFileSync('src/components/MediaTile.tsx', tile, 'utf8');
|
||||
Reference in new issue
Block a user