Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Automatic ai cut outs of people, products and cars with remove.bg service.
API key from remove.bg service
npm i removd
Multiple examples can be located in examples directory
Images can be processed using file, url and base64 workflows. Balance and subscription details can be retrieved using account workflow.
File workflow allows to upload files and save its outcome. Available options:
required (string || array)
- source filename to be forwarded for processing. Can be either single file or array of files (.png, .jpg, .jpeg files are supported).optional (boolean)
- glob patterns can be used to match files in multiple directories.optional (string)
- can be set to small, medium, hd, 4k, auto. If omitted image will be automatically recognised and correct size
option will be assigned.optional (string)
- can be set to person, product, car, auto. If omitted image will be automatically recognised.optional (string)
- can be set to rgba, alpha. If omitted defaults to rgba as RGB color corrections is used for highest quality.optional (string)
- can be set to hex color code RGB, RGBA, RRGGBB, RRGGBBAA e.g. 81d4fa77 or rgba colors (R, G, B), (R, G, B, A), rgba(R, G, B, A) e.g. rgba(197, 127, 73, .5) or color name e.g. red, green etc. If omitted defaults to fully transparent hex.optional (string)
- can be set to auto, png, jpg format. If omitted defaults to PNG format if transparent regions exists, otherwise JPEG.optional (string)
- directory where final image will be saved. Can be either path to directory or path to filename. If directory specyfied source filename will be used for saved outcome. If filename specyfied all processed images would be saved with it. If file already exists new file will be suffixed with nine character short id (defaults to source
image directory).optional (boolean)
- source image can be deleted after outcome returned back and saved (defaults to false
).optional (boolean)
- track progress of processed images when source contains more then single item (defaults to false
).optional (boolean)
- upscale image to original dimensions if it has been downscaled previously due to being over 10 megapixels limit (defaults to false
).optional (string)
- service api key (defaults to REMOVD_API_KEY env veriable).const removd = require('removd');
(async () => {
const done = await removd.file({
source: '/directory/christopher-campbell-28567-unsplash-400x267.jpg'
});
})();
Response done (object)
will be similar to:
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/directory/christopher-campbell-28567-unsplash-400x267.png',
detected: 'person',
preserved: true,
resized: false
}
await removd.file({
deleteOriginal: true,
channels: 'alpha',
detect: 'person',
format: 'jpg',
destination: '/new-directory/christopher-campbell.png',
source: [
'/directory/christopher-campbell-28567-unsplash-400x267.jpg',
'/directory/christopher-campbell-28567-unsplash-2400x1600.jpg'
]
});
Response (array)
will be similar to:
[
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/new-directory/christopher-campbell.jpeg',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 5,
size: 'hd',
duration: '371 ms',
dimensions: '2400x1600',
destination: '/new-directory/christopher-campbell-23TplPdSD.jpeg',
detected: 'person',
preserved: true,
resized: false
}
]
If glob
enabled glob patterns can be used in the source array to match images sent for processing:
await removd.file({
glob: true,
destination: '/new-directory/',
background: 'rgba(111, 98, 199, 0.51)',
source: [
'/initial-directory/*.jpg',
'/directory/christopher-campbell-28567-unsplash-2400x1600.jpg'
]
});
Response (array)
will be similar to:
[
{
charged: 8,
size: '4k',
duration: '683 ms',
dimensions: '3750x2500',
destination: '/new-directory/christopher-campbell-28567-unsplash-3750x2500.png',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 3,
size: 'medium',
duration: '111 ms',
dimensions: '1500x1000',
destination: '/new-directory/christopher-campbell-28567-unsplash-1500x1000.png',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 5,
size: 'hd',
duration: '371 ms',
dimensions: '2400x1600',
destination: '/new-directory/christopher-campbell-28567-unsplash-2400x1600.png',
detected: 'person',
preserved: true,
resized: false
}
]
To preserve image dimensions when image is larger then service limit of 10 megapixels enable preserve
option:
await removd.file({
preserve: true,
source: '/directory/christopher-campbell-28567-unsplash-5184x3456.jpg'
});
Response (object)
will be similar to:
{
charged: 8,
size: '4k',
duration: '611 ms',
dimensions: '5184x3456',
destination: '/directory/christopher-campbell-28567-unsplash-5184x3456.png',
detected: 'person',
preserved: true,
resized: true
}
To track progress of processed images enable progress
option then initialise batch to start processing:
const batch = await removd.file({
glob: true,
progress: true,
destination: '/new-directory/',
source: [
'/initial-directory/*.jpg',
'/directory/christopher-campbell-28567-unsplash-2400x1600.jpg'
]
});
const files = batch.files;
batch.progress.on('item', item => {});
const done = await batch.init();
Response files (array)
will be similar to:
[
'/initial-directory/christopher-campbell-28567-unsplash-1500x1000.jpg',
'/initial-directory/christopher-campbell-28567-unsplash-3750x2500.jpg',
'/directory/christopher-campbell-28567-unsplash-2400x1600.jpg'
]
Response done (array)
will be similar to:
[
{
charged: 8,
size: '4k',
duration: '683 ms',
dimensions: '3750x2500',
destination: '/new-directory/christopher-campbell-28567-unsplash-3750x2500.png',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 3,
size: 'medium',
duration: '111 ms',
dimensions: '1500x1000',
destination: '/new-directory/christopher-campbell-28567-unsplash-1500x1000.png',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 5,
size: 'hd',
duration: '371 ms',
dimensions: '2400x1600',
destination: '/new-directory/christopher-campbell-28567-unsplash-2400x1600.png',
detected: 'person',
preserved: true,
resized: false
}
]
Url workflow allows to upload images available via url and save its outcome. Available options:
required (string || array)
- source url to be forwarded for processing. Can be either single url or array of urls.optional (string)
- can be set to person, product, car, auto. If omitted image will be automatically recognised.optional (string)
- can be set to rgba, alpha. If omitted defaults to rgba as RGB color corrections is used for highest quality.optional (string)
- can be set to hex color code RGB, RGBA, RRGGBB, RRGGBBAA e.g. 81d4fa77 or rgba colors (R, G, B), (R, G, B, A), rgba(R, G, B, A) e.g. rgba(197, 127, 73, .5) or color name e.g. red, green etc. If omitted defaults to fully transparent hex.optional (string)
- can be set to auto, png, jpg format. If omitted defaults to PNG format if transparent regions exists, otherwise JPEG.required (string)
- directory where final image will be saved. Can be either path to directory or path to filename. If directory specyfied source url filename will be used for saved outcome. If filename specyfied all processed images would be saved with it. If file already exists new file will be suffixed with nine character short id.optional (string)
- can be set to small, medium, hd, 4k, auto. If omitted url image will be automatically recognised and correct size
option will be assigned.optional (boolean)
- track progress of processed images when source contains more then single item (defaults to false
).optional (boolean)
- upscale image to original dimensions if it has been downscaled previously due to being over 10 megapixels limit (defaults to false
).optional (string)
- service api key (defaults to REMOVD_API_KEY env veriable)const removd = require('removd');
(async () => {
const done = await removd.url({
destination: '/directory/',
source: 'https://images.unsplash.com/photo-1504455583697-3a9b04be6397?w=400&q=80'
});
})();
Response done (object)
will be similar to:
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/directory/photo-1504455583697-3a9b04be6397.png',
detected: 'person',
preserved: true,
resized: false
}
await removd.url({
detect: 'person',
format: 'jpg',
background: 'red',
destination: '/new-directory/',
source: [
'https://images.unsplash.com/photo-1504455583697-3a9b04be6397?w=400&q=80',
'https://images.unsplash.com/photo-1504455583697-3a9b04be6397?w=2400&q=80'
]
});
Response (array)
will be similar to:
[
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/new-directory/photo-1504455583697-3a9b04be6397l.jpeg',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 5,
size: 'hd',
duration: '371 ms',
dimensions: '2400x1600',
destination: '/new-directory/photo-1504455583697-3a9b04be6397l-2FF3lddS1.jpeg',
detected: 'person',
preserved: true,
resized: false
}
]
Base64 workflow allows to upload images, base64 and base64url encoded txt files and save its outcome. Available options:
required (string || array)
- source filename to be forwarded for processing. Can be either single file or array of files (.png, .jpg, .jpeg, .txt files are supported).optional (boolean)
- glob patterns can be used to match files in multiple directories.optional (string)
- can be set to small, medium, hd, 4k, auto. If omitted image will be automatically recognised and correct size
option will be assigned.optional (string)
- can be set to person, product, car, auto. If omitted image will be automatically recognised.optional (string)
- can be set to rgba, alpha. If omitted defaults to rgba as RGB color corrections is used for highest quality.optional (string)
- can be set to hex color code RGB, RGBA, RRGGBB, RRGGBBAA e.g. 81d4fa77 or rgba colors (R, G, B), (R, G, B, A), rgba(R, G, B, A) e.g. rgba(197, 127, 73, .5) or color name e.g. red, green etc. If omitted defaults to fully transparent hex.optional (string)
- can be set to auto, png, jpg format. If omitted defaults to PNG format if transparent regions exists, otherwise JPEG.optional (string)
- directory where final image will be saved. Can be either path to directory or path to filename. If directory specyfied source filename will be used for saved outcome. If filename specyfied all processed images would be saved with it. If file already exists new file will be suffixed with nine character short id (defaults to source
image directory).optional (boolean)
- source image can be deleted after outcome returned back and saved (defaults to false
).optional (boolean)
- if source image is a base64 or base64url encoded text file processed outcome can be saved as an image (defaults to false
).optional (boolean)
- track progress of processed images when source contains more then single item (defaults to false
).optional (boolean)
- upscale image to original dimensions if it has been downscaled previously due to being over 10 megapixels limit (defaults to false
).optional (string)
- service api key (defaults to REMOVD_API_KEY env veriable)const removd = require('removd');
(async () => {
const done = await removd.base64({
source: '/directory/christopher-campbell-28567-unsplash-400x267.txt'
});
})();
Response done (object)
will be similar to:
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/directory/christopher-campbell-28567-unsplash-400x267-g35fgj1Sp.txt',
detected: 'person',
preserved: true,
resized: false
}
await removd.base64({
toImage: true,
destination: '/new-directory/christopher-campbell.png',
background: '00afff1f',
source: [
'/directory/christopher-campbell-28567-unsplash-400x267.jpg',
'/directory/christopher-campbell-28567-unsplash-2400x1600.txt'
]
});
Response (array)
will be similar to:
[
{
charged: 1,
size: 'small',
duration: '211 ms',
dimensions: '400x267',
destination: '/new-directory/christopher-campbell.png',
detected: 'person',
preserved: true,
resized: false
},
{
charged: 5,
size: 'hd',
duration: '371 ms',
dimensions: '2400x1600',
destination: '/new-directory/christopher-campbell-56T11Ptk3.png',
detected: 'person',
preserved: true,
resized: false
}
]
Account workflow allows to retrieve details of current credit balance, number of free API calls and status of existing subscriptions. Balance changes may be delayed by several seconds.
const removd = require('removd');
(async () => {
const done = await removd.account();
console.dir(done);
})();
Response (object)
will be similar to:
{
credits: {
total: 200,
subscription: 150,
payg: 50
},
api: {
free_calls: 50,
sizes: 'all'
}
}
All erros are resolved and fallow similar convention:
const removd = require('removd');
(async () => {
const done = await removd.file({
source: '/directory/christopher-campbell-28567-unsplash-400x267.bmp'
});
})();
Response done (object)
will be similar to:
{
error: 'Unsupported file format',
source: '/directory/christopher-campbell-28567-unsplash-400x267.bmp'
}
To limit batch processing use REMOVD_BATCH_LIMIT (defaults to cpu count).
REMOVD_BATCH_LIMIT=2
To run all available tests against previously recorded mocks
npm test
To record mocks either remove fixtures or force record with NOCK_RECORD
NOCK_RECORD=true npm test
As record is done against actual API endoints you'll be charged relevant amount of credits per test sequence.
Workflow | Credits |
---|---|
file | 109 |
base64 | 101 |
url | 97 |
account | 0 |
In total you'd be charged 307 credits
for all available tests.
The MIT License (MIT). Please see license file for more information.
FAQs
automatic ai cut outs of people, products and cars with remove.bg service
We found that removd demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.