@mediaproc/image 1.0.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 (179) hide show
  1. package/README.md +2516 -0
  2. package/bin/cli.js +6 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +89 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/auto-enhance.d.ts +3 -0
  8. package/dist/commands/auto-enhance.d.ts.map +1 -0
  9. package/dist/commands/auto-enhance.js +148 -0
  10. package/dist/commands/auto-enhance.js.map +1 -0
  11. package/dist/commands/batch.d.ts +3 -0
  12. package/dist/commands/batch.d.ts.map +1 -0
  13. package/dist/commands/batch.js +230 -0
  14. package/dist/commands/batch.js.map +1 -0
  15. package/dist/commands/blur.d.ts +3 -0
  16. package/dist/commands/blur.d.ts.map +1 -0
  17. package/dist/commands/blur.js +122 -0
  18. package/dist/commands/blur.js.map +1 -0
  19. package/dist/commands/border.d.ts +3 -0
  20. package/dist/commands/border.d.ts.map +1 -0
  21. package/dist/commands/border.js +122 -0
  22. package/dist/commands/border.js.map +1 -0
  23. package/dist/commands/clahe.d.ts +3 -0
  24. package/dist/commands/clahe.d.ts.map +1 -0
  25. package/dist/commands/clahe.js +121 -0
  26. package/dist/commands/clahe.js.map +1 -0
  27. package/dist/commands/composite.d.ts +3 -0
  28. package/dist/commands/composite.d.ts.map +1 -0
  29. package/dist/commands/composite.js +167 -0
  30. package/dist/commands/composite.js.map +1 -0
  31. package/dist/commands/convert.d.ts +3 -0
  32. package/dist/commands/convert.d.ts.map +1 -0
  33. package/dist/commands/convert.js +136 -0
  34. package/dist/commands/convert.js.map +1 -0
  35. package/dist/commands/convolve.d.ts +3 -0
  36. package/dist/commands/convolve.d.ts.map +1 -0
  37. package/dist/commands/convolve.js +171 -0
  38. package/dist/commands/convolve.js.map +1 -0
  39. package/dist/commands/crop.d.ts +3 -0
  40. package/dist/commands/crop.d.ts.map +1 -0
  41. package/dist/commands/crop.js +120 -0
  42. package/dist/commands/crop.js.map +1 -0
  43. package/dist/commands/dominant-color.d.ts +3 -0
  44. package/dist/commands/dominant-color.d.ts.map +1 -0
  45. package/dist/commands/dominant-color.js +175 -0
  46. package/dist/commands/dominant-color.js.map +1 -0
  47. package/dist/commands/extend.d.ts +3 -0
  48. package/dist/commands/extend.d.ts.map +1 -0
  49. package/dist/commands/extend.js +146 -0
  50. package/dist/commands/extend.js.map +1 -0
  51. package/dist/commands/extract.d.ts +3 -0
  52. package/dist/commands/extract.d.ts.map +1 -0
  53. package/dist/commands/extract.js +169 -0
  54. package/dist/commands/extract.js.map +1 -0
  55. package/dist/commands/flip.d.ts +3 -0
  56. package/dist/commands/flip.d.ts.map +1 -0
  57. package/dist/commands/flip.js +112 -0
  58. package/dist/commands/flip.js.map +1 -0
  59. package/dist/commands/gamma.d.ts +3 -0
  60. package/dist/commands/gamma.d.ts.map +1 -0
  61. package/dist/commands/gamma.js +129 -0
  62. package/dist/commands/gamma.js.map +1 -0
  63. package/dist/commands/grayscale.d.ts +3 -0
  64. package/dist/commands/grayscale.d.ts.map +1 -0
  65. package/dist/commands/grayscale.js +94 -0
  66. package/dist/commands/grayscale.js.map +1 -0
  67. package/dist/commands/grid.d.ts +3 -0
  68. package/dist/commands/grid.d.ts.map +1 -0
  69. package/dist/commands/grid.js +193 -0
  70. package/dist/commands/grid.js.map +1 -0
  71. package/dist/commands/median.d.ts +3 -0
  72. package/dist/commands/median.d.ts.map +1 -0
  73. package/dist/commands/median.js +132 -0
  74. package/dist/commands/median.js.map +1 -0
  75. package/dist/commands/metadata-cmd.d.ts +3 -0
  76. package/dist/commands/metadata-cmd.d.ts.map +1 -0
  77. package/dist/commands/metadata-cmd.js +201 -0
  78. package/dist/commands/metadata-cmd.js.map +1 -0
  79. package/dist/commands/mirror.d.ts +3 -0
  80. package/dist/commands/mirror.d.ts.map +1 -0
  81. package/dist/commands/mirror.js +218 -0
  82. package/dist/commands/mirror.js.map +1 -0
  83. package/dist/commands/modulate.d.ts +3 -0
  84. package/dist/commands/modulate.d.ts.map +1 -0
  85. package/dist/commands/modulate.js +151 -0
  86. package/dist/commands/modulate.js.map +1 -0
  87. package/dist/commands/negate.d.ts +3 -0
  88. package/dist/commands/negate.d.ts.map +1 -0
  89. package/dist/commands/negate.js +111 -0
  90. package/dist/commands/negate.js.map +1 -0
  91. package/dist/commands/normalize.d.ts +3 -0
  92. package/dist/commands/normalize.d.ts.map +1 -0
  93. package/dist/commands/normalize.js +119 -0
  94. package/dist/commands/normalize.js.map +1 -0
  95. package/dist/commands/optimize.d.ts +3 -0
  96. package/dist/commands/optimize.d.ts.map +1 -0
  97. package/dist/commands/optimize.js +137 -0
  98. package/dist/commands/optimize.js.map +1 -0
  99. package/dist/commands/palette.d.ts +3 -0
  100. package/dist/commands/palette.d.ts.map +1 -0
  101. package/dist/commands/palette.js +138 -0
  102. package/dist/commands/palette.js.map +1 -0
  103. package/dist/commands/pixelate.d.ts +3 -0
  104. package/dist/commands/pixelate.d.ts.map +1 -0
  105. package/dist/commands/pixelate.js +123 -0
  106. package/dist/commands/pixelate.js.map +1 -0
  107. package/dist/commands/resize.d.ts +3 -0
  108. package/dist/commands/resize.d.ts.map +1 -0
  109. package/dist/commands/resize.js +187 -0
  110. package/dist/commands/resize.js.map +1 -0
  111. package/dist/commands/rotate.d.ts +3 -0
  112. package/dist/commands/rotate.d.ts.map +1 -0
  113. package/dist/commands/rotate.js +103 -0
  114. package/dist/commands/rotate.js.map +1 -0
  115. package/dist/commands/sepia.d.ts +3 -0
  116. package/dist/commands/sepia.d.ts.map +1 -0
  117. package/dist/commands/sepia.js +119 -0
  118. package/dist/commands/sepia.js.map +1 -0
  119. package/dist/commands/sharpen.d.ts +3 -0
  120. package/dist/commands/sharpen.d.ts.map +1 -0
  121. package/dist/commands/sharpen.js +123 -0
  122. package/dist/commands/sharpen.js.map +1 -0
  123. package/dist/commands/smart-crop.d.ts +3 -0
  124. package/dist/commands/smart-crop.d.ts.map +1 -0
  125. package/dist/commands/smart-crop.js +137 -0
  126. package/dist/commands/smart-crop.js.map +1 -0
  127. package/dist/commands/split.d.ts +3 -0
  128. package/dist/commands/split.d.ts.map +1 -0
  129. package/dist/commands/split.js +177 -0
  130. package/dist/commands/split.js.map +1 -0
  131. package/dist/commands/stack.d.ts +3 -0
  132. package/dist/commands/stack.d.ts.map +1 -0
  133. package/dist/commands/stack.js +205 -0
  134. package/dist/commands/stack.js.map +1 -0
  135. package/dist/commands/stats.d.ts +3 -0
  136. package/dist/commands/stats.d.ts.map +1 -0
  137. package/dist/commands/stats.js +187 -0
  138. package/dist/commands/stats.js.map +1 -0
  139. package/dist/commands/thumbnail.d.ts +3 -0
  140. package/dist/commands/thumbnail.d.ts.map +1 -0
  141. package/dist/commands/thumbnail.js +131 -0
  142. package/dist/commands/thumbnail.js.map +1 -0
  143. package/dist/commands/tint.d.ts +3 -0
  144. package/dist/commands/tint.d.ts.map +1 -0
  145. package/dist/commands/tint.js +123 -0
  146. package/dist/commands/tint.js.map +1 -0
  147. package/dist/commands/trim.d.ts +3 -0
  148. package/dist/commands/trim.d.ts.map +1 -0
  149. package/dist/commands/trim.js +123 -0
  150. package/dist/commands/trim.js.map +1 -0
  151. package/dist/commands/vignette.d.ts +3 -0
  152. package/dist/commands/vignette.d.ts.map +1 -0
  153. package/dist/commands/vignette.js +139 -0
  154. package/dist/commands/vignette.js.map +1 -0
  155. package/dist/commands/watermark.d.ts +3 -0
  156. package/dist/commands/watermark.d.ts.map +1 -0
  157. package/dist/commands/watermark.js +172 -0
  158. package/dist/commands/watermark.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +2 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/register.d.ts +5 -0
  164. package/dist/register.d.ts.map +1 -0
  165. package/dist/register.js +93 -0
  166. package/dist/register.js.map +1 -0
  167. package/dist/types.d.ts +91 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +2 -0
  170. package/dist/types.js.map +1 -0
  171. package/dist/utils/helpFormatter.d.ts +63 -0
  172. package/dist/utils/helpFormatter.d.ts.map +1 -0
  173. package/dist/utils/helpFormatter.js +171 -0
  174. package/dist/utils/helpFormatter.js.map +1 -0
  175. package/dist/utils/sharp.d.ts +20 -0
  176. package/dist/utils/sharp.d.ts.map +1 -0
  177. package/dist/utils/sharp.js +14 -0
  178. package/dist/utils/sharp.js.map +1 -0
  179. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function sepiaCommand(imageCmd: Command): void;
3
+ //# sourceMappingURL=sepia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sepia.d.ts","sourceRoot":"","sources":["../../src/commands/sepia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAyHpD"}
@@ -0,0 +1,119 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { createSharpInstance } from '../utils/sharp.js';
6
+ import { createStandardHelp } from '../utils/helpFormatter.js';
7
+ export function sepiaCommand(imageCmd) {
8
+ imageCmd
9
+ .command('sepia <input>')
10
+ .description('Apply sepia tone effect (vintage/antique look)')
11
+ .option('-i, --intensity <value>', 'Sepia intensity 0-100 (default: 80)', parseFloat, 80)
12
+ .option('-o, --output <path>', 'Output file path')
13
+ .option('--dry-run', 'Show what would be done without executing')
14
+ .option('-v, --verbose', 'Verbose output')
15
+ .option('--help', 'Display help for sepia command')
16
+ .action(async (input, options) => {
17
+ if (options.help) {
18
+ createStandardHelp({
19
+ commandName: 'sepia',
20
+ emoji: '📜',
21
+ description: 'Apply sepia tone effect to create vintage, antique, or nostalgic photographs. Converts colors to warm brown tones.',
22
+ usage: ['sepia <input>', 'sepia <input> -i 90', 'sepia <input> -o vintage.jpg'],
23
+ options: [
24
+ { flag: '-i, --intensity <value>', description: 'Sepia intensity 0-100 (default: 80)' },
25
+ { flag: '-o, --output <path>', description: 'Output file path' },
26
+ { flag: '--dry-run', description: 'Preview changes without executing' },
27
+ { flag: '-v, --verbose', description: 'Show detailed output' }
28
+ ],
29
+ examples: [
30
+ { command: 'sepia photo.jpg', description: 'Apply default sepia effect' },
31
+ { command: 'sepia image.png -i 100', description: 'Maximum sepia intensity' },
32
+ { command: 'sepia pic.jpg -i 50', description: 'Subtle sepia tone' },
33
+ { command: 'sepia photo.jpg -o vintage.jpg', description: 'Save as vintage photo' }
34
+ ],
35
+ additionalSections: [
36
+ {
37
+ title: 'Intensity Guide',
38
+ items: [
39
+ '0-30 - Subtle warm tint',
40
+ '40-60 - Moderate vintage look',
41
+ '70-85 - Classic sepia (recommended)',
42
+ '90-100 - Strong antique effect'
43
+ ]
44
+ },
45
+ {
46
+ title: 'Use Cases',
47
+ items: [
48
+ 'Create vintage photograph effects',
49
+ 'Historical photo restoration style',
50
+ 'Artistic nostalgic looks',
51
+ 'Wedding photo albums',
52
+ 'Heritage collections'
53
+ ]
54
+ }
55
+ ],
56
+ tips: [
57
+ 'Start with 80 intensity for classic look',
58
+ 'Combine with vignette for enhanced vintage feel',
59
+ 'Works great on portraits and landscapes',
60
+ 'Lower intensity for subtle warmth'
61
+ ]
62
+ });
63
+ process.exit(0);
64
+ }
65
+ const spinner = ora('Applying sepia tone...').start();
66
+ try {
67
+ if (!fs.existsSync(input)) {
68
+ spinner.fail(chalk.red(`Input file not found: ${input}`));
69
+ process.exit(1);
70
+ }
71
+ const intensity = Math.max(0, Math.min(100, options.intensity || 80)) / 100;
72
+ const inputPath = path.parse(input);
73
+ const outputPath = options.output || path.join(inputPath.dir, `${inputPath.name}-sepia${inputPath.ext}`);
74
+ if (options.verbose) {
75
+ spinner.info(chalk.blue('Configuration:'));
76
+ console.log(chalk.dim(` Input: ${input}`));
77
+ console.log(chalk.dim(` Output: ${outputPath}`));
78
+ console.log(chalk.dim(` Intensity: ${(intensity * 100).toFixed(0)}%`));
79
+ spinner.start('Processing...');
80
+ }
81
+ if (options.dryRun) {
82
+ spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
83
+ console.log(chalk.green('✓ Would apply sepia tone:'));
84
+ console.log(chalk.dim(` Input: ${input}`));
85
+ console.log(chalk.dim(` Intensity: ${(intensity * 100).toFixed(0)}%`));
86
+ return;
87
+ }
88
+ const metadata = await createSharpInstance(input).metadata();
89
+ // Sepia tone matrix (standard sepia transformation)
90
+ // Adjusted by intensity
91
+ const sepiaMatrix = [
92
+ [0.393 * intensity + (1 - intensity), 0.769 * intensity, 0.189 * intensity],
93
+ [0.349 * intensity, 0.686 * intensity + (1 - intensity), 0.168 * intensity],
94
+ [0.272 * intensity, 0.534 * intensity, 0.131 * intensity + (1 - intensity)]
95
+ ];
96
+ await createSharpInstance(input)
97
+ .recomb(sepiaMatrix)
98
+ .toFile(outputPath);
99
+ const outputStats = fs.statSync(outputPath);
100
+ spinner.succeed(chalk.green('✓ Sepia tone applied successfully!'));
101
+ console.log(chalk.dim(` Input: ${input}`));
102
+ console.log(chalk.dim(` Output: ${outputPath}`));
103
+ console.log(chalk.dim(` Size: ${metadata.width}x${metadata.height}`));
104
+ console.log(chalk.dim(` Intensity: ${(intensity * 100).toFixed(0)}%`));
105
+ console.log(chalk.dim(` File size: ${(outputStats.size / 1024).toFixed(2)}KB`));
106
+ }
107
+ catch (error) {
108
+ spinner.fail(chalk.red('Failed to apply sepia tone'));
109
+ if (options.verbose) {
110
+ console.error(chalk.red('Error details:'), error);
111
+ }
112
+ else {
113
+ console.error(chalk.red(error.message));
114
+ }
115
+ process.exit(1);
116
+ }
117
+ });
118
+ }
119
+ //# sourceMappingURL=sepia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sepia.js","sourceRoot":"","sources":["../../src/commands/sepia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function sharpenCommand(imageCmd: Command): void;
3
+ //# sourceMappingURL=sharpen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharpen.d.ts","sourceRoot":"","sources":["../../src/commands/sharpen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CA0HtD"}
@@ -0,0 +1,123 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { createSharpInstance } from '../utils/sharp.js';
6
+ import { createStandardHelp } from '../utils/helpFormatter.js';
7
+ export function sharpenCommand(imageCmd) {
8
+ imageCmd
9
+ .command('sharpen <input>')
10
+ .description('Sharpen image')
11
+ .option('-s, --sigma <sigma>', 'Sharpening strength (0.01-10, default: 1)', parseFloat, 1)
12
+ .option('--flat <flat>', 'Level of sharpening for flat areas (default: 1)', parseFloat, 1)
13
+ .option('--jagged <jagged>', 'Level of sharpening for jagged areas (default: 2)', parseFloat, 2)
14
+ .option('-o, --output <path>', 'Output file path')
15
+ .option('-q, --quality <quality>', 'Quality (1-100)', parseInt, 90)
16
+ .option('--dry-run', 'Show what would be done without executing')
17
+ .option('-v, --verbose', 'Verbose output')
18
+ .option('--help', 'Display help for sharpen command')
19
+ .action(async (input, options) => {
20
+ if (options.help) {
21
+ createStandardHelp({
22
+ commandName: 'sharpen',
23
+ emoji: '🔪',
24
+ description: 'Sharpen images to enhance details and edges. Perfect for improving slightly blurry photos or enhancing image clarity.',
25
+ usage: ['sharpen <input>', 'sharpen <input> -s <sigma>', 'sharpen <input> -s <sigma> --flat <flat> --jagged <jagged>'],
26
+ options: [
27
+ { flag: '-s, --sigma <sigma>', description: 'Sharpening strength 0.01-10 (default: 1)' },
28
+ { flag: '--flat <flat>', description: 'Sharpening for flat areas (default: 1)' },
29
+ { flag: '--jagged <jagged>', description: 'Sharpening for jagged areas (default: 2)' },
30
+ { flag: '-o, --output <path>', description: 'Output file path (default: <input>-sharpened.<ext>)' },
31
+ { flag: '-q, --quality <quality>', description: 'Output quality 1-100 (default: 90)' },
32
+ { flag: '--dry-run', description: 'Preview changes without executing' },
33
+ { flag: '-v, --verbose', description: 'Show detailed output' }
34
+ ],
35
+ examples: [
36
+ { command: 'sharpen photo.jpg', description: 'Apply default sharpening' },
37
+ { command: 'sharpen image.png -s 2', description: 'Strong sharpening' },
38
+ { command: 'sharpen pic.jpg -s 0.5', description: 'Subtle sharpening' },
39
+ { command: 'sharpen photo.jpg -s 1.5 --flat 1.5 --jagged 2.5', description: 'Custom sharpening parameters' }
40
+ ],
41
+ additionalSections: [
42
+ {
43
+ title: 'Sharpening Guide',
44
+ items: [
45
+ 'Subtle: sigma 0.3-0.7 (slight enhancement)',
46
+ 'Normal: sigma 1.0-1.5 (standard sharpening)',
47
+ 'Strong: sigma 2.0-3.0 (heavy sharpening)',
48
+ 'Extreme: sigma 3.0+ (risk of artifacts)'
49
+ ]
50
+ }
51
+ ],
52
+ tips: [
53
+ 'Start with default values and adjust as needed',
54
+ 'Too much sharpening creates halos and artifacts',
55
+ 'Sharpen after resizing for best results',
56
+ 'Use lower values for portraits, higher for landscapes'
57
+ ]
58
+ });
59
+ process.exit(0);
60
+ }
61
+ const spinner = ora('Processing image...').start();
62
+ try {
63
+ if (!fs.existsSync(input)) {
64
+ spinner.fail(chalk.red(`Input file not found: ${input}`));
65
+ process.exit(1);
66
+ }
67
+ const inputPath = path.parse(input);
68
+ const outputPath = options.output || path.join(process.cwd(), `${inputPath.name}-sharpened${inputPath.ext}`);
69
+ if (options.verbose) {
70
+ spinner.info(chalk.blue('Configuration:'));
71
+ console.log(chalk.dim(` Input: ${input}`));
72
+ console.log(chalk.dim(` Output: ${outputPath}`));
73
+ console.log(chalk.dim(` Sigma: ${options.sigma || 1}`));
74
+ console.log(chalk.dim(` Flat: ${options.flat || 1}`));
75
+ console.log(chalk.dim(` Jagged: ${options.jagged || 2}`));
76
+ spinner.start('Processing...');
77
+ }
78
+ if (options.dryRun) {
79
+ spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
80
+ console.log(chalk.green('✓ Would sharpen image:'));
81
+ console.log(chalk.dim(` From: ${input}`));
82
+ console.log(chalk.dim(` To: ${outputPath}`));
83
+ console.log(chalk.dim(` Sigma: ${options.sigma || 1}`));
84
+ return;
85
+ }
86
+ const metadata = await createSharpInstance(input).metadata();
87
+ const pipeline = createSharpInstance(input).sharpen({
88
+ sigma: options.sigma || 1,
89
+ m1: options.flat || 1,
90
+ m2: options.jagged || 2
91
+ });
92
+ const outputExt = path.extname(outputPath).toLowerCase();
93
+ if (outputExt === '.jpg' || outputExt === '.jpeg') {
94
+ pipeline.jpeg({ quality: options.quality || 90 });
95
+ }
96
+ else if (outputExt === '.png') {
97
+ pipeline.png({ quality: options.quality || 90 });
98
+ }
99
+ else if (outputExt === '.webp') {
100
+ pipeline.webp({ quality: options.quality || 90 });
101
+ }
102
+ await pipeline.toFile(outputPath);
103
+ const outputStats = fs.statSync(outputPath);
104
+ spinner.succeed(chalk.green('✓ Image sharpened successfully!'));
105
+ console.log(chalk.dim(` Input: ${input}`));
106
+ console.log(chalk.dim(` Output: ${outputPath}`));
107
+ console.log(chalk.dim(` Size: ${metadata.width}x${metadata.height}`));
108
+ console.log(chalk.dim(` Sigma: ${options.sigma || 1}`));
109
+ console.log(chalk.dim(` File size: ${(outputStats.size / 1024).toFixed(2)}KB`));
110
+ }
111
+ catch (error) {
112
+ spinner.fail(chalk.red('Failed to sharpen image'));
113
+ if (options.verbose) {
114
+ console.error(chalk.red('Error details:'), error);
115
+ }
116
+ else {
117
+ console.error(chalk.red(error.message));
118
+ }
119
+ process.exit(1);
120
+ }
121
+ });
122
+ }
123
+ //# sourceMappingURL=sharpen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharpen.js","sourceRoot":"","sources":["../../src/commands/sharpen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function smartCropCommand(imageCmd: Command): void;
3
+ //# sourceMappingURL=smart-crop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-crop.d.ts","sourceRoot":"","sources":["../../src/commands/smart-crop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CA2IxD"}
@@ -0,0 +1,137 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { createSharpInstance } from '../utils/sharp.js';
6
+ import { createStandardHelp } from '../utils/helpFormatter.js';
7
+ export function smartCropCommand(imageCmd) {
8
+ imageCmd
9
+ .command('smart-crop <input>')
10
+ .description('Intelligent cropping based on image content')
11
+ .requiredOption('-w, --width <pixels>', 'Target width', parseInt)
12
+ .requiredOption('-h, --height <pixels>', 'Target height', parseInt)
13
+ .option('-s, --strategy <type>', 'Cropping strategy: entropy (default), attention', 'entropy')
14
+ .option('-o, --output <path>', 'Output file path')
15
+ .option('--dry-run', 'Show what would be done without executing')
16
+ .option('-v, --verbose', 'Verbose output')
17
+ .option('--help', 'Display help for smart-crop command')
18
+ .action(async (input, options) => {
19
+ if (options.help) {
20
+ createStandardHelp({
21
+ commandName: 'smart-crop',
22
+ emoji: '🎯',
23
+ description: 'Intelligently crop images to target dimensions while preserving the most important content. Uses entropy or attention-based algorithms.',
24
+ usage: ['smart-crop <input> -w 1200 -h 630', 'smart-crop <input> -w 800 -h 800 --strategy attention', 'smart-crop <input> -w 1920 -h 1080 -o banner.jpg'],
25
+ options: [
26
+ { flag: '-w, --width <pixels>', description: 'Target width in pixels (required)' },
27
+ { flag: '-h, --height <pixels>', description: 'Target height in pixels (required)' },
28
+ { flag: '-s, --strategy <type>', description: 'Cropping strategy: entropy (edges/details) or attention (center-weighted) (default: entropy)' },
29
+ { flag: '-o, --output <path>', description: 'Output file path' },
30
+ { flag: '--dry-run', description: 'Preview changes without executing' },
31
+ { flag: '-v, --verbose', description: 'Show detailed output' }
32
+ ],
33
+ examples: [
34
+ { command: 'smart-crop photo.jpg -w 1200 -h 630', description: 'Create social media banner' },
35
+ { command: 'smart-crop portrait.jpg -w 800 -h 800 --strategy attention', description: 'Square crop with center focus' },
36
+ { command: 'smart-crop landscape.jpg -w 1920 -h 1080', description: 'Full HD crop with detail preservation' },
37
+ { command: 'smart-crop product.png -w 600 -h 600 -o thumbnail.png', description: 'Smart product thumbnail' }
38
+ ],
39
+ additionalSections: [
40
+ {
41
+ title: 'Cropping Strategies',
42
+ items: [
43
+ 'entropy - Analyzes image details and edges, preserves high-information areas',
44
+ 'attention - Center-weighted, ideal for portraits and centered subjects',
45
+ 'Both strategies avoid cutting off important content'
46
+ ]
47
+ },
48
+ {
49
+ title: 'Use Cases',
50
+ items: [
51
+ 'Social media images (Facebook, Twitter, LinkedIn)',
52
+ 'Product thumbnails for e-commerce',
53
+ 'Blog post featured images',
54
+ 'Profile pictures and avatars',
55
+ 'Banner images for websites',
56
+ 'Mobile app screenshots'
57
+ ]
58
+ },
59
+ {
60
+ title: 'Common Dimensions',
61
+ items: [
62
+ '1200x630 - Facebook/LinkedIn shared posts',
63
+ '1024x512 - Twitter cards',
64
+ '1080x1080 - Instagram square posts',
65
+ '1080x1920 - Instagram stories',
66
+ '800x800 - General square thumbnails',
67
+ '1920x1080 - Full HD banners'
68
+ ]
69
+ }
70
+ ],
71
+ tips: [
72
+ 'Use entropy for landscapes and detailed images',
73
+ 'Use attention for portraits and centered subjects',
74
+ 'Preview with --dry-run to check crop area',
75
+ 'Works best when target size is smaller than source'
76
+ ]
77
+ });
78
+ process.exit(0);
79
+ }
80
+ const spinner = ora('Analyzing image content...').start();
81
+ try {
82
+ if (!fs.existsSync(input)) {
83
+ spinner.fail(chalk.red(`Input file not found: ${input}`));
84
+ process.exit(1);
85
+ }
86
+ const inputPath = path.parse(input);
87
+ const outputPath = options.output || path.join(inputPath.dir, `${inputPath.name}-cropped${inputPath.ext}`);
88
+ const metadata = await createSharpInstance(input).metadata();
89
+ if (!metadata.width || !metadata.height) {
90
+ spinner.fail(chalk.red('Unable to read image dimensions'));
91
+ process.exit(1);
92
+ }
93
+ if (options.verbose) {
94
+ spinner.info(chalk.blue('Configuration:'));
95
+ console.log(chalk.dim(` Input: ${input} (${metadata.width}x${metadata.height})`));
96
+ console.log(chalk.dim(` Target: ${options.width}x${options.height}`));
97
+ console.log(chalk.dim(` Strategy: ${options.strategy}`));
98
+ console.log(chalk.dim(` Output: ${outputPath}`));
99
+ spinner.start('Processing...');
100
+ }
101
+ if (options.dryRun) {
102
+ spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
103
+ console.log(chalk.green('✓ Would smart crop:'));
104
+ console.log(chalk.dim(` From: ${metadata.width}x${metadata.height}`));
105
+ console.log(chalk.dim(` To: ${options.width}x${options.height}`));
106
+ console.log(chalk.dim(` Strategy: ${options.strategy}`));
107
+ return;
108
+ }
109
+ // Use Sharp's smart cropping capabilities
110
+ const strategy = options.strategy === 'attention' ? 'attention' : 'entropy';
111
+ await createSharpInstance(input)
112
+ .resize(options.width, options.height, {
113
+ fit: 'cover',
114
+ position: strategy
115
+ })
116
+ .toFile(outputPath);
117
+ const outputStats = fs.statSync(outputPath);
118
+ spinner.succeed(chalk.green('✓ Smart crop completed successfully!'));
119
+ console.log(chalk.dim(` Input: ${input} (${metadata.width}x${metadata.height})`));
120
+ console.log(chalk.dim(` Output: ${outputPath} (${options.width}x${options.height})`));
121
+ console.log(chalk.dim(` Strategy: ${strategy}`));
122
+ console.log(chalk.dim(` Aspect ratio: ${metadata.width}:${metadata.height} → ${options.width}:${options.height}`));
123
+ console.log(chalk.dim(` File size: ${(outputStats.size / 1024).toFixed(2)}KB`));
124
+ }
125
+ catch (error) {
126
+ spinner.fail(chalk.red('Smart crop failed'));
127
+ if (options.verbose) {
128
+ console.error(chalk.red('Error details:'), error);
129
+ }
130
+ else {
131
+ console.error(chalk.red(error.message));
132
+ }
133
+ process.exit(1);
134
+ }
135
+ });
136
+ }
137
+ //# sourceMappingURL=smart-crop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-crop.js","sourceRoot":"","sources":["../../src/commands/smart-crop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function splitCommand(imageCmd: Command): void;
3
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../src/commands/split.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAwLpD"}