86 lines
7.1 KiB
JavaScript
86 lines
7.1 KiB
JavaScript
import { CONFIG_DEFAULT } from '@polymech/commons';
|
|
import { logger } from '../index.js';
|
|
import { cli } from '../cli.js';
|
|
import { sanitize, defaults } from '../_cli.js';
|
|
import { backgroundRemove } from '../lib/media/images/background-remove.js';
|
|
export const defaultOptions = (yargs) => {
|
|
return yargs.option('src', {
|
|
describe: 'FILE|FOLDER|GLOB',
|
|
demandOption: true
|
|
}).option('dst', {
|
|
describe: 'FILE|FOLDER|GLOB'
|
|
}).option('debug', {
|
|
default: false,
|
|
describe: 'Enable internal debug messages',
|
|
type: 'boolean'
|
|
}).option('alt', {
|
|
default: false,
|
|
describe: 'Use alternate tokenizer, & instead of $',
|
|
type: 'boolean'
|
|
}).option('dry', {
|
|
default: false,
|
|
describe: 'Run without conversion',
|
|
type: 'boolean'
|
|
}).option('verbose', {
|
|
default: false,
|
|
describe: 'Show internal messages',
|
|
type: 'boolean'
|
|
}).option('logLevel', {
|
|
describe: 'Log level : warn, info, debug, error',
|
|
type: 'string',
|
|
default: 'info'
|
|
}).option('apiKey', {
|
|
describe: 'Replicate API key (or set REPLICATE_API_TOKEN env var)',
|
|
type: 'string'
|
|
}).option('model', {
|
|
describe: 'Background removal model to use',
|
|
default: 'lucataco/remove-bg:95fcc2a26d3899cd6c2691c900465aaeff466285a65c14638cc5f36f34befaf1',
|
|
type: 'string'
|
|
}).option('alpha_matting', {
|
|
describe: 'Enable alpha matting for better edge refinement',
|
|
type: 'boolean',
|
|
default: false
|
|
}).option('alpha_matting_foreground_threshold', {
|
|
describe: 'Alpha matting foreground threshold',
|
|
type: 'number',
|
|
default: 270
|
|
}).option('alpha_matting_background_threshold', {
|
|
describe: 'Alpha matting background threshold',
|
|
type: 'number',
|
|
default: 10
|
|
}).option('alpha_matting_erode_size', {
|
|
describe: 'Alpha matting erode size',
|
|
type: 'number',
|
|
default: 10
|
|
});
|
|
};
|
|
export const command = 'background:remove';
|
|
export const desc = 'Remove background from images using AI';
|
|
export const builder = defaultOptions;
|
|
export async function handler(argv) {
|
|
defaults();
|
|
const options = sanitize(argv);
|
|
logger.settings.minLevel = options.logLevel;
|
|
const config = CONFIG_DEFAULT();
|
|
// Get API key from argument or environment variable
|
|
options.apiKey = options.apiKey || process.env.REPLICATE_API_TOKEN || config?.replicate?.key;
|
|
if (!options.apiKey) {
|
|
logger.error('Replicate API key is required. Provide it via --apiKey argument or set REPLICATE_API_TOKEN environment variable');
|
|
logger.info('Get your API key at: https://replicate.com/account/api-tokens');
|
|
process.exit(1);
|
|
}
|
|
// Map CLI arguments to library options (using same names)
|
|
options.model = argv.model;
|
|
options.alpha_matting = argv.alpha_matting;
|
|
options.alpha_matting_foreground_threshold = argv.alpha_matting_foreground_threshold;
|
|
options.alpha_matting_background_threshold = argv.alpha_matting_background_threshold;
|
|
options.alpha_matting_erode_size = argv.alpha_matting_erode_size;
|
|
logger.info("Removing background with options:", {
|
|
model: options.model,
|
|
alpha_matting: options.alpha_matting,
|
|
files: options.srcInfo?.FILES?.length || 0
|
|
});
|
|
await backgroundRemove(options);
|
|
}
|
|
cli.command(command, desc, builder, handler);
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1yZW1vdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvYmFja2dyb3VuZC1yZW1vdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMvQixPQUFPLEVBQ0gsUUFBUSxFQUNSLFFBQVEsRUFDWCxNQUFNLFlBQVksQ0FBQTtBQUluQixPQUFPLEVBQ0gsZ0JBQWdCLEVBRW5CLE1BQU0sMENBQTBDLENBQUE7QUFFakQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN2QixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsUUFBUSxFQUFFLGtCQUFrQjtLQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLGdDQUFnQztRQUMxQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHlDQUF5QztRQUNuRCxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixPQUFPLEVBQUUs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
|