@boruto_vk7/stickengine 0.0.1-alpha → 0.0.2-alpha
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.
- package/README.md +86 -82
- package/README.md.bak +131 -0
- package/package.json +11 -4
package/README.md
CHANGED
|
@@ -1,131 +1,135 @@
|
|
|
1
|
-
# StickEngine
|
|
1
|
+
# StickEngine
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@boruto_vk7/stickengine)
|
|
4
|
+
[](https://github.com/Borutovk7/StickEngine/blob/main/LICENSE)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Módulo Node.js para criação de stickers para WhatsApp — feito pra funcionar em qualquer lugar, do **Termux no seu celular** até um servidor dedicado. Sem dependências nativas complicadas, sem dor de cabeça na instalação.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- **Metadados Personalizados (EXIF)**: Adiciona informações como nome do pacote, autor e emojis diretamente no sticker.
|
|
9
|
-
- **Suporte a URLs, Buffers e Caminhos Locais**: Flexibilidade na entrada de dados para a criação dos stickers.
|
|
10
|
-
- **Remoção de Fundo (Opcional)**: Integração com a API `remove.bg` para remover o fundo de imagens, ideal para criar stickers transparentes.
|
|
11
|
-
- **Compatibilidade CJS e ESM**: O módulo pode ser utilizado tanto em projetos CommonJS (`require`) quanto em módulos ES (`import`).
|
|
8
|
+
> Sabe aquele sofrimento de tentar rodar um módulo de sticker no Termux e quebrar tudo por causa do `sharp` ou de alguma lib nativa? O StickEngine foi criado exatamente pra resolver isso. Aqui funciona.
|
|
12
9
|
|
|
13
|
-
##
|
|
10
|
+
## Por que o StickEngine?
|
|
11
|
+
|
|
12
|
+
- ✅ **Funciona no Termux** — sem `sharp`, sem compilação nativa, sem erro de permissão
|
|
13
|
+
- ✅ **Funciona em VPS, Replit, Railway, servidor dedicado** — em qualquer ambiente
|
|
14
|
+
- ✅ **Zero configuração extra** — instala e já usa
|
|
15
|
+
- ✅ **Suporte a ESM e CJS** — compatível com qualquer projeto
|
|
16
|
+
- ✅ **Entrada flexível** — URL, Buffer ou caminho local, tanto faz
|
|
17
|
+
|
|
18
|
+
## Requisitos
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
- Node.js 16+
|
|
21
|
+
- [ffmpeg](https://ffmpeg.org/) instalado no sistema
|
|
16
22
|
|
|
17
23
|
```bash
|
|
18
|
-
#
|
|
19
|
-
|
|
24
|
+
# Termux
|
|
25
|
+
pkg install ffmpeg
|
|
20
26
|
|
|
21
|
-
#
|
|
22
|
-
|
|
23
|
-
sudo apt update && sudo apt install ffmpeg
|
|
24
|
-
# Para outras plataformas, consulte a documentação oficial do ffmpeg.
|
|
27
|
+
# Debian/Ubuntu/VPS
|
|
28
|
+
sudo apt install ffmpeg
|
|
25
29
|
```
|
|
26
30
|
|
|
27
|
-
##
|
|
31
|
+
## Instalação
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install @boruto_vk7/stickengine
|
|
35
|
+
```
|
|
28
36
|
|
|
29
|
-
|
|
37
|
+
## Uso
|
|
30
38
|
|
|
31
|
-
###
|
|
39
|
+
### ESM
|
|
32
40
|
|
|
33
41
|
```javascript
|
|
34
|
-
import StickEngine from '
|
|
42
|
+
import StickEngine from '@boruto_vk7/stickengine';
|
|
35
43
|
|
|
36
44
|
const engine = new StickEngine({
|
|
37
45
|
metadata: {
|
|
38
46
|
pack: 'Meu Pack de Stickers',
|
|
39
|
-
author: 'Borutovk7
|
|
40
|
-
emojis: ['✨', '🚀']
|
|
47
|
+
author: 'Borutovk7',
|
|
48
|
+
emojis: ['✨', '🚀']
|
|
41
49
|
},
|
|
42
|
-
//
|
|
43
|
-
// transparent: ['
|
|
50
|
+
// Opcional: chaves da API remove.bg para remoção de fundo
|
|
51
|
+
// transparent: ['SUA_API_KEY']
|
|
44
52
|
});
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
engine.on('st.
|
|
48
|
-
engine.on('st.
|
|
49
|
-
engine.on('st.data', (data) => console.log(`[DATA] Sticker ${data.index} gerado em:`, data.file));
|
|
50
|
-
engine.on('st.error', (data) => console.error(`[ERROR] Falha no arquivo ${data.index}:`, data.error));
|
|
54
|
+
engine.on('st.start', (data) => console.log(`Processando:`, data.input));
|
|
55
|
+
engine.on('st.data', (data) => console.log(`Sticker gerado:`, data.file));
|
|
56
|
+
engine.on('st.error', (data) => console.error(`Erro:`, data.error));
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.start()
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
})
|
|
60
|
-
.catch(err => {
|
|
61
|
-
console.error('Ocorreu um erro geral no processamento:', err);
|
|
62
|
-
});
|
|
58
|
+
const results = await engine
|
|
59
|
+
.addFile('https://picsum.photos/512') // URL
|
|
60
|
+
.addFile('caminho/para/video.mp4') // caminho local
|
|
61
|
+
.addFile(buffer) // Buffer
|
|
62
|
+
.start();
|
|
63
|
+
|
|
64
|
+
console.log(results);
|
|
63
65
|
```
|
|
64
66
|
|
|
65
|
-
###
|
|
67
|
+
### CJS
|
|
66
68
|
|
|
67
69
|
```javascript
|
|
68
|
-
const StickEngine = require('
|
|
70
|
+
const StickEngine = require('@boruto_vk7/stickengine');
|
|
69
71
|
|
|
70
72
|
const engine = new StickEngine({
|
|
71
73
|
metadata: {
|
|
72
|
-
pack: 'Meu Pack
|
|
73
|
-
author: 'Borutovk7
|
|
74
|
+
pack: 'Meu Pack',
|
|
75
|
+
author: 'Borutovk7',
|
|
74
76
|
emojis: ['🎉']
|
|
75
77
|
}
|
|
76
78
|
});
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
engine.on('st.
|
|
80
|
-
|
|
80
|
+
engine.on('st.start', (data) => console.log(`Processando:`, data.input));
|
|
81
|
+
engine.on('st.data', (data) => console.log(`Sticker gerado:`, data.file));
|
|
82
|
+
engine.on('st.error', (data) => console.error(`Erro:`, data.error));
|
|
81
83
|
|
|
82
84
|
engine.addFile('https://picsum.photos/200')
|
|
83
85
|
.start()
|
|
84
|
-
.then(results =>
|
|
85
|
-
|
|
86
|
-
})
|
|
87
|
-
.catch(err => {
|
|
88
|
-
console.error('Ocorreu um erro geral no processamento CJS:', err);
|
|
89
|
-
});
|
|
86
|
+
.then(results => console.log(results))
|
|
87
|
+
.catch(err => console.error(err));
|
|
90
88
|
```
|
|
91
89
|
|
|
92
|
-
|
|
90
|
+
## Eventos
|
|
93
91
|
|
|
94
|
-
|
|
92
|
+
| Evento | Descrição |
|
|
93
|
+
|--------|-----------|
|
|
94
|
+
| `st.start` | Disparado ao iniciar o processamento de um arquivo |
|
|
95
|
+
| `st.info` | Metadados do arquivo sendo processado |
|
|
96
|
+
| `st.data` | Sticker gerado com sucesso |
|
|
97
|
+
| `st.error` | Erro ao processar um arquivo |
|
|
95
98
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
downloadAndProcess();
|
|
113
|
-
```
|
|
99
|
+
## API
|
|
100
|
+
|
|
101
|
+
### `new StickEngine(options)`
|
|
102
|
+
|
|
103
|
+
| Opção | Tipo | Descrição |
|
|
104
|
+
|-------|------|-----------|
|
|
105
|
+
| `metadata.pack` | `string` | Nome do pacote de stickers |
|
|
106
|
+
| `metadata.author` | `string` | Nome do autor |
|
|
107
|
+
| `metadata.emojis` | `string[]` | Emojis associados ao sticker |
|
|
108
|
+
| `transparent` | `string[]` | Chaves da API remove.bg para remoção de fundo |
|
|
109
|
+
|
|
110
|
+
### `.addFile(input)`
|
|
111
|
+
|
|
112
|
+
Adiciona um arquivo à fila. Aceita URL, Buffer ou caminho local. Retorna a instância para encadeamento.
|
|
114
113
|
|
|
115
|
-
|
|
114
|
+
### `.start()`
|
|
116
115
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
Inicia o processamento da fila. Retorna uma Promise com os resultados.
|
|
117
|
+
|
|
118
|
+
### `getBuffer(url)`
|
|
119
|
+
|
|
120
|
+
Utilitário para baixar uma URL como Buffer.
|
|
121
|
+
|
|
122
|
+
```javascript
|
|
123
|
+
import { getBuffer } from '@boruto_vk7/stickengine';
|
|
124
|
+
|
|
125
|
+
const buffer = await getBuffer('https://example.com/image.png');
|
|
126
|
+
```
|
|
120
127
|
|
|
121
128
|
## Créditos
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
- [Eduh dev](https://github.com/Borutovk7)
|
|
124
131
|
|
|
125
|
-
- **Borutovk7** (GitHub: [Borutovk7](https://github.com/Borutovk7))
|
|
126
|
-
- **Eduh Dev**
|
|
127
|
-
- **Manus AI** (Adaptação e refatoração)
|
|
128
132
|
|
|
129
133
|
## Licença
|
|
130
134
|
|
|
131
|
-
|
|
135
|
+
ISC
|
package/README.md.bak
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# StickEngine: Gerador de Stickers para WhatsApp
|
|
2
|
+
|
|
3
|
+
Bem-vindo ao **StickEngine**, um módulo Node.js robusto e flexível para a criação de stickers personalizados para WhatsApp. Desenvolvido para ser eficiente e compatível com diversos ambientes, o StickEngine permite transformar imagens e vídeos em stickers WebP com metadados personalizados, além de oferecer funcionalidades como remoção de fundo.
|
|
4
|
+
|
|
5
|
+
## Funcionalidades Principais
|
|
6
|
+
|
|
7
|
+
- **Geração de Stickers WebP**: Converte imagens (JPG, PNG, GIF) e vídeos (MP4, WebM) para o formato WebP, otimizado para stickers do WhatsApp.
|
|
8
|
+
- **Metadados Personalizados (EXIF)**: Adiciona informações como nome do pacote, autor e emojis diretamente no sticker.
|
|
9
|
+
- **Suporte a URLs, Buffers e Caminhos Locais**: Flexibilidade na entrada de dados para a criação dos stickers.
|
|
10
|
+
- **Remoção de Fundo (Opcional)**: Integração com a API `remove.bg` para remover o fundo de imagens, ideal para criar stickers transparentes.
|
|
11
|
+
- **Compatibilidade CJS e ESM**: O módulo pode ser utilizado tanto em projetos CommonJS (`require`) quanto em módulos ES (`import`).
|
|
12
|
+
|
|
13
|
+
## Instalação
|
|
14
|
+
|
|
15
|
+
Para utilizar o StickEngine, você precisará ter o Node.js e o `ffmpeg` instalados em seu sistema. O `ffmpeg` é essencial para a conversão de mídia.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Instale as dependências do Node.js
|
|
19
|
+
pnpm install axios fluent-ffmpeg node-webpmux file-type jimp remove.bg node-fetch
|
|
20
|
+
|
|
21
|
+
# Certifique-se de ter o ffmpeg instalado e acessível no PATH do seu sistema.
|
|
22
|
+
# Para sistemas baseados em Debian/Ubuntu:
|
|
23
|
+
sudo apt update && sudo apt install ffmpeg
|
|
24
|
+
# Para outras plataformas, consulte a documentação oficial do ffmpeg.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Uso
|
|
28
|
+
|
|
29
|
+
O StickEngine é projetado para ser fácil de usar, com uma API baseada em classes e eventos para feedback de progresso.
|
|
30
|
+
|
|
31
|
+
### Exemplo de Uso (ESM - `index.js`)
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
import StickEngine from './index.js';
|
|
35
|
+
|
|
36
|
+
const engine = new StickEngine({
|
|
37
|
+
metadata: {
|
|
38
|
+
pack: 'Meu Pack de Stickers',
|
|
39
|
+
author: 'Borutovk7 & Eduh Dev',
|
|
40
|
+
emojis: ['✨', '🚀'] // Emojis opcionais
|
|
41
|
+
},
|
|
42
|
+
// Para remover o fundo, forneça uma ou mais chaves de API do remove.bg
|
|
43
|
+
// transparent: ['SUA_API_KEY_REMOVEBG_1', 'SUA_API_KEY_REMOVEBG_2']
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Eventos para acompanhar o progresso
|
|
47
|
+
engine.on('st.start', (data) => console.log(`[START] Processando arquivo ${data.index}:`, data.input));
|
|
48
|
+
engine.on('st.info', (data) => console.log(`[INFO] Metadados do arquivo ${data.index}:`, data));
|
|
49
|
+
engine.on('st.data', (data) => console.log(`[DATA] Sticker ${data.index} gerado em:`, data.file));
|
|
50
|
+
engine.on('st.error', (data) => console.error(`[ERROR] Falha no arquivo ${data.index}:`, data.error));
|
|
51
|
+
|
|
52
|
+
// Adicione arquivos à fila (pode ser URL, Buffer ou caminho local)
|
|
53
|
+
engine.addFile('https://picsum.photos/512') // Exemplo de URL de imagem
|
|
54
|
+
.addFile('caminho/para/seu/video.mp4') // Exemplo de caminho local para vídeo
|
|
55
|
+
.addFile(Buffer.from('...')) // Exemplo de Buffer
|
|
56
|
+
.start()
|
|
57
|
+
.then(results => {
|
|
58
|
+
console.log('Processamento concluído. Resultados:', results);
|
|
59
|
+
})
|
|
60
|
+
.catch(err => {
|
|
61
|
+
console.error('Ocorreu um erro geral no processamento:', err);
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Exemplo de Uso (CommonJS - `index.cjs`)
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
const StickEngine = require('./index.cjs');
|
|
69
|
+
|
|
70
|
+
const engine = new StickEngine({
|
|
71
|
+
metadata: {
|
|
72
|
+
pack: 'Meu Pack CJS',
|
|
73
|
+
author: 'Borutovk7 & Eduh Dev',
|
|
74
|
+
emojis: ['🎉']
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Os eventos e a forma de adicionar arquivos são os mesmos do exemplo ESM.
|
|
79
|
+
engine.on('st.start', (data) => console.log(`[START CJS] Processando arquivo ${data.index}:`, data.input));
|
|
80
|
+
// ... (outros eventos)
|
|
81
|
+
|
|
82
|
+
engine.addFile('https://picsum.photos/200')
|
|
83
|
+
.start()
|
|
84
|
+
.then(results => {
|
|
85
|
+
console.log('Processamento CJS concluído. Resultados:', results);
|
|
86
|
+
})
|
|
87
|
+
.catch(err => {
|
|
88
|
+
console.error('Ocorreu um erro geral no processamento CJS:', err);
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Função `getBuffer`
|
|
93
|
+
|
|
94
|
+
A função `getBuffer` fornecida pelo usuário foi integrada ao módulo para lidar com o download de URLs de forma robusta. Ela pode ser importada e utilizada separadamente, se necessário:
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
// ESM
|
|
98
|
+
import { getBuffer } from './index.js';
|
|
99
|
+
|
|
100
|
+
// CJS
|
|
101
|
+
const { getBuffer } = require('./index.cjs');
|
|
102
|
+
|
|
103
|
+
async function downloadAndProcess() {
|
|
104
|
+
try {
|
|
105
|
+
const buffer = await getBuffer('https://example.com/image.png');
|
|
106
|
+
console.log('Buffer obtido com sucesso:', buffer.length, 'bytes');
|
|
107
|
+
// Faça algo com o buffer
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error('Erro ao obter buffer:', error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
downloadAndProcess();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Notas Importantes
|
|
116
|
+
|
|
117
|
+
* **Diretrizes `async`**: Lembre-se de que as operações do StickEngine são assíncronas. Certifique-se de usar `async/await` ou `.then().catch()` para lidar com as Promises retornadas, garantindo um código funcional e sem bloqueios.
|
|
118
|
+
* **`extractMetadata` (EXIF) sem `sharp`**: A implementação da manipulação de metadados (EXIF) foi cuidadosamente desenvolvida para **não depender da biblioteca `sharp`**. Esta decisão foi tomada para garantir a máxima compatibilidade e leveza do módulo, especialmente para usuários que executam o código em ambientes com recursos limitados, como o Termux, ou em hosts que não suportam a compilação de dependências nativas como o `sharp`. Agradecemos a compreensão, caro usuário! 👊🏻
|
|
119
|
+
* **Verificação de Atualizações**: Caso encontre algum erro na execução ou comportamento inesperado, verifique se os módulos e dependências foram atualizados. Em alguns casos, pode ser necessário obter a versão mais recente do arquivo.
|
|
120
|
+
|
|
121
|
+
## Créditos
|
|
122
|
+
|
|
123
|
+
Este módulo foi desenvolvido com base nas contribuições e inspiração de:
|
|
124
|
+
|
|
125
|
+
- **Borutovk7** (GitHub: [Borutovk7](https://github.com/Borutovk7))
|
|
126
|
+
- **Eduh Dev**
|
|
127
|
+
- **Manus AI** (Adaptação e refatoração)
|
|
128
|
+
|
|
129
|
+
## Licença
|
|
130
|
+
|
|
131
|
+
Este projeto está licenciado sob a licença ISC. Veja o arquivo `LICENSE` para mais detalhes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boruto_vk7/stickengine",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2-alpha",
|
|
4
4
|
"description": "StickEngine module for creating WhatsApp stickers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/StickEngine.js",
|
|
@@ -17,9 +17,16 @@
|
|
|
17
17
|
"build": "tsc",
|
|
18
18
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
19
19
|
},
|
|
20
|
-
"keywords": [
|
|
20
|
+
"keywords": [
|
|
21
|
+
"sticker",
|
|
22
|
+
"whatsapp",
|
|
23
|
+
"stickengine"
|
|
24
|
+
],
|
|
21
25
|
"author": "Borutovk7 <https://github.com/Borutovk7>",
|
|
22
|
-
"contributors": [
|
|
26
|
+
"contributors": [
|
|
27
|
+
"Eduh Dev",
|
|
28
|
+
"Manus AI"
|
|
29
|
+
],
|
|
23
30
|
"license": "ISC",
|
|
24
31
|
"repository": {
|
|
25
32
|
"type": "git",
|
|
@@ -40,4 +47,4 @@
|
|
|
40
47
|
"@types/node-fetch": "2.6.1",
|
|
41
48
|
"typescript": "^6.0.3"
|
|
42
49
|
}
|
|
43
|
-
}
|
|
50
|
+
}
|