mediacript 1.0.2 → 1.0.3
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/dist/config/index.d.ts +5 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +43 -14
- package/dist/config/index.js.map +1 -1
- package/dist/index.js +57 -57
- package/dist/index.js.map +1 -1
- package/dist/transcript/groq.d.ts +4 -4
- package/dist/transcript/groq.js +6 -6
- package/dist/transcript/groq.js.map +1 -1
- package/dist/transcript/index.d.ts +5 -5
- package/dist/transcript/index.js +16 -16
- package/dist/transcript/index.js.map +1 -1
- package/dist/transcript/openai.d.ts +4 -4
- package/dist/transcript/openai.js +6 -6
- package/dist/transcript/openai.js.map +1 -1
- package/dist/utils/ffmpegCheck.d.ts +4 -4
- package/dist/utils/ffmpegCheck.js +15 -15
- package/dist/utils/ffmpegCheck.js.map +1 -1
- package/dist/utils/ffmpegOperations.d.ts +5 -5
- package/dist/utils/ffmpegOperations.js +15 -15
- package/dist/utils/ffmpegOperations.js.map +1 -1
- package/dist/utils/fileHelpers.d.ts +3 -3
- package/dist/utils/fileHelpers.js +4 -4
- package/dist/utils/fileHelpers.js.map +1 -1
- package/dist/workflow/state.d.ts +9 -9
- package/dist/workflow/state.js +12 -12
- package/dist/workflow/state.js.map +1 -1
- package/package.json +9 -1
package/dist/config/index.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { Config } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Loads saved configuration
|
|
4
4
|
*/
|
|
5
5
|
export declare function loadConfig(): Config;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Saves configuration
|
|
8
8
|
*/
|
|
9
9
|
export declare function saveConfig(config: Config): void;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Prompts user for API keys (interactive)
|
|
12
12
|
*/
|
|
13
13
|
export declare function promptApiKeys(): Promise<Config>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Checks if at least one API key is configured
|
|
16
16
|
*/
|
|
17
17
|
export declare function hasApiKey(config: Config): boolean;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Gets configuration, prompting the user if necessary
|
|
20
20
|
*/
|
|
21
21
|
export declare function ensureConfig(): Promise<Config>;
|
|
22
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAwB1C;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAe/C;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CA6BrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAwB1C;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAe/C;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CA6BrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CA2DpD"}
|
package/dist/config/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import path from 'path';
|
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import inquirer from 'inquirer';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Returns the configuration directory based on the operating system
|
|
7
7
|
* Linux/Mac: ~/.config/ffmpeg-simple-converter
|
|
8
8
|
* Windows: %APPDATA%/ffmpeg-simple-converter
|
|
9
9
|
*/
|
|
@@ -23,7 +23,7 @@ function getConfigFilePath() {
|
|
|
23
23
|
return path.join(getConfigDir(), 'config.json');
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Loads saved configuration
|
|
27
27
|
*/
|
|
28
28
|
export function loadConfig() {
|
|
29
29
|
try {
|
|
@@ -34,33 +34,33 @@ export function loadConfig() {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
catch (error) {
|
|
37
|
-
console.warn('
|
|
37
|
+
console.warn('Error loading configuration:', error);
|
|
38
38
|
}
|
|
39
39
|
return {};
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Saves configuration
|
|
43
43
|
*/
|
|
44
44
|
export function saveConfig(config) {
|
|
45
45
|
try {
|
|
46
46
|
const configDir = getConfigDir();
|
|
47
47
|
const configPath = getConfigFilePath();
|
|
48
|
-
//
|
|
48
|
+
// Create directory if it doesn't exist
|
|
49
49
|
if (!fs.existsSync(configDir)) {
|
|
50
50
|
fs.mkdirSync(configDir, { recursive: true });
|
|
51
51
|
}
|
|
52
52
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
53
|
-
console.log(`✓
|
|
53
|
+
console.log(`✓ Configuration saved in: ${configPath}`);
|
|
54
54
|
}
|
|
55
55
|
catch (error) {
|
|
56
|
-
console.error('
|
|
56
|
+
console.error('Error saving configuration:', error);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Prompts user for API keys (interactive)
|
|
61
61
|
*/
|
|
62
62
|
export async function promptApiKeys() {
|
|
63
|
-
console.log('\n🔑 Configure
|
|
63
|
+
console.log('\n🔑 Configure your API keys (optional - press Enter to skip)\n');
|
|
64
64
|
const answers = await inquirer.prompt([
|
|
65
65
|
{
|
|
66
66
|
type: 'input',
|
|
@@ -85,24 +85,28 @@ export async function promptApiKeys() {
|
|
|
85
85
|
return config;
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
88
|
+
* Checks if at least one API key is configured
|
|
89
89
|
*/
|
|
90
90
|
export function hasApiKey(config) {
|
|
91
91
|
return !!(config.openaiApiKey || config.groqApiKey);
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
|
-
*
|
|
94
|
+
* Gets configuration, prompting the user if necessary
|
|
95
95
|
*/
|
|
96
96
|
export async function ensureConfig() {
|
|
97
97
|
let config = loadConfig();
|
|
98
|
-
//
|
|
98
|
+
// Display where API keys are being loaded from
|
|
99
|
+
const configPath = getConfigFilePath();
|
|
100
|
+
console.log(`\n🔑 API Keys Configuration`);
|
|
101
|
+
console.log(`ℹ️ Loading from: ${configPath}`);
|
|
102
|
+
// If no API keys are found
|
|
99
103
|
if (!hasApiKey(config)) {
|
|
100
|
-
console.log('
|
|
104
|
+
console.log('⚠️ No API keys found.');
|
|
101
105
|
const { shouldConfigure } = await inquirer.prompt([
|
|
102
106
|
{
|
|
103
107
|
type: 'confirm',
|
|
104
108
|
name: 'shouldConfigure',
|
|
105
|
-
message: '
|
|
109
|
+
message: 'Would you like to configure your API keys now?',
|
|
106
110
|
default: true
|
|
107
111
|
}
|
|
108
112
|
]);
|
|
@@ -114,6 +118,31 @@ export async function ensureConfig() {
|
|
|
114
118
|
}
|
|
115
119
|
}
|
|
116
120
|
}
|
|
121
|
+
else {
|
|
122
|
+
// Display current API keys status
|
|
123
|
+
console.log('✓ API Keys found:');
|
|
124
|
+
if (config.groqApiKey) {
|
|
125
|
+
console.log(' • Groq API Key: Configured');
|
|
126
|
+
}
|
|
127
|
+
if (config.openaiApiKey) {
|
|
128
|
+
console.log(' • OpenAI API Key: Configured');
|
|
129
|
+
}
|
|
130
|
+
const { updateKeys } = await inquirer.prompt([
|
|
131
|
+
{
|
|
132
|
+
type: 'confirm',
|
|
133
|
+
name: 'updateKeys',
|
|
134
|
+
message: 'Would you like to update or add new API keys?',
|
|
135
|
+
default: false
|
|
136
|
+
}
|
|
137
|
+
]);
|
|
138
|
+
if (updateKeys) {
|
|
139
|
+
const newConfig = await promptApiKeys();
|
|
140
|
+
if (hasApiKey(newConfig)) {
|
|
141
|
+
config = { ...config, ...newConfig };
|
|
142
|
+
saveConfig(config);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
117
146
|
return config;
|
|
118
147
|
}
|
|
119
148
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B;;;;GAIG;AACH,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAE5B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,UAAU;QACV,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,YAAY;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAA;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,53 +9,53 @@ import { createWorkflowState, updateStepStatus, nextStep, printWorkflowProgress,
|
|
|
9
9
|
import path from 'path';
|
|
10
10
|
const WORKFLOW_OPTIONS = [
|
|
11
11
|
{
|
|
12
|
-
name: '🎬
|
|
12
|
+
name: '🎬 Convert video + Extract audio + Transcribe',
|
|
13
13
|
value: 'video-full',
|
|
14
|
-
steps: ['
|
|
14
|
+
steps: ['Convert video', 'Extract audio', 'Transcribe audio'],
|
|
15
15
|
requiresType: 'video'
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
|
-
name: '🎬
|
|
18
|
+
name: '🎬 Extract audio from video + Transcribe',
|
|
19
19
|
value: 'video-extract-transcribe',
|
|
20
|
-
steps: ['
|
|
20
|
+
steps: ['Extract audio', 'Transcribe audio'],
|
|
21
21
|
requiresType: 'video'
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
name: '🎵
|
|
24
|
+
name: '🎵 Convert audio + Transcribe',
|
|
25
25
|
value: 'audio-convert-transcribe',
|
|
26
|
-
steps: ['
|
|
26
|
+
steps: ['Convert audio', 'Transcribe audio'],
|
|
27
27
|
requiresType: 'audio'
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
name: '🎙️
|
|
30
|
+
name: '🎙️ Transcribe audio only',
|
|
31
31
|
value: 'audio-transcribe',
|
|
32
|
-
steps: ['
|
|
32
|
+
steps: ['Transcribe audio'],
|
|
33
33
|
requiresType: 'audio'
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
|
-
name: '🎬
|
|
36
|
+
name: '🎬 Convert video only',
|
|
37
37
|
value: 'video-convert',
|
|
38
|
-
steps: ['
|
|
38
|
+
steps: ['Convert video'],
|
|
39
39
|
requiresType: 'video'
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
name: '🎵
|
|
42
|
+
name: '🎵 Convert audio only',
|
|
43
43
|
value: 'audio-convert',
|
|
44
|
-
steps: ['
|
|
44
|
+
steps: ['Convert audio'],
|
|
45
45
|
requiresType: 'audio'
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
name: '🎵
|
|
48
|
+
name: '🎵 Extract audio from video only',
|
|
49
49
|
value: 'video-extract',
|
|
50
|
-
steps: ['
|
|
50
|
+
steps: ['Extract audio'],
|
|
51
51
|
requiresType: 'video'
|
|
52
52
|
}
|
|
53
53
|
];
|
|
54
54
|
async function executeWorkflow(workflow, inputFile, config) {
|
|
55
55
|
const state = createWorkflowState(inputFile, workflow.steps);
|
|
56
56
|
const outputDir = path.dirname(inputFile);
|
|
57
|
-
console.log(`\n🚀
|
|
58
|
-
console.log(`📁
|
|
57
|
+
console.log(`\n🚀 Starting workflow: ${workflow.name}`);
|
|
58
|
+
console.log(`📁 Input file: ${path.basename(inputFile)}\n`);
|
|
59
59
|
let currentFile = inputFile;
|
|
60
60
|
let audioFile;
|
|
61
61
|
let transcriptionFile;
|
|
@@ -67,28 +67,28 @@ async function executeWorkflow(workflow, inputFile, config) {
|
|
|
67
67
|
console.log(`\n[${i + 1}/${state.steps.length}] ${step.name}...`);
|
|
68
68
|
try {
|
|
69
69
|
switch (step.name) {
|
|
70
|
-
case '
|
|
70
|
+
case 'Convert video':
|
|
71
71
|
currentFile = await convertVideo(currentFile, outputDir);
|
|
72
72
|
state.intermediateFiles.convertedVideo = currentFile;
|
|
73
73
|
updateStepStatus(state, i, 'completed', { outputFile: currentFile });
|
|
74
74
|
break;
|
|
75
|
-
case '
|
|
75
|
+
case 'Extract audio':
|
|
76
76
|
audioFile = await extractAudio(currentFile, outputDir);
|
|
77
77
|
state.intermediateFiles.extractedAudio = audioFile;
|
|
78
78
|
currentFile = audioFile;
|
|
79
79
|
updateStepStatus(state, i, 'completed', { outputFile: audioFile });
|
|
80
80
|
break;
|
|
81
|
-
case '
|
|
81
|
+
case 'Convert audio':
|
|
82
82
|
audioFile = await convertAudio(currentFile, outputDir);
|
|
83
83
|
currentFile = audioFile;
|
|
84
84
|
updateStepStatus(state, i, 'completed', { outputFile: audioFile });
|
|
85
85
|
break;
|
|
86
|
-
case '
|
|
86
|
+
case 'Transcribe audio':
|
|
87
87
|
// Usa o arquivo de áudio atual ou o arquivo de entrada se for áudio
|
|
88
88
|
const fileToTranscribe = audioFile || currentFile;
|
|
89
|
-
//
|
|
89
|
+
// Check if API key is configured
|
|
90
90
|
if (!hasApiKey(config)) {
|
|
91
|
-
console.log('\n⚠️
|
|
91
|
+
console.log('\n⚠️ Skipping transcription - no API key configured');
|
|
92
92
|
updateStepStatus(state, i, 'skipped');
|
|
93
93
|
break;
|
|
94
94
|
}
|
|
@@ -100,64 +100,64 @@ async function executeWorkflow(workflow, inputFile, config) {
|
|
|
100
100
|
updateStepStatus(state, i, 'completed', { outputFile: transcriptionFile });
|
|
101
101
|
}
|
|
102
102
|
else {
|
|
103
|
-
throw new Error('
|
|
103
|
+
throw new Error('Failed to transcribe audio');
|
|
104
104
|
}
|
|
105
105
|
break;
|
|
106
106
|
default:
|
|
107
|
-
throw new Error(`
|
|
107
|
+
throw new Error(`Unknown step: ${step.name}`);
|
|
108
108
|
}
|
|
109
109
|
nextStep(state);
|
|
110
110
|
}
|
|
111
111
|
catch (error) {
|
|
112
|
-
console.error(`\n❌
|
|
112
|
+
console.error(`\n❌ Error in step "${step.name}":`, error.message);
|
|
113
113
|
updateStepStatus(state, i, 'failed', undefined, error.message);
|
|
114
114
|
break;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
//
|
|
117
|
+
// Save final state
|
|
118
118
|
saveWorkflowState(state, outputDir);
|
|
119
|
-
//
|
|
119
|
+
// Display summary
|
|
120
120
|
printWorkflowProgress(state);
|
|
121
|
-
//
|
|
122
|
-
console.log('\n📦
|
|
121
|
+
// Display generated files
|
|
122
|
+
console.log('\n📦 Generated files:');
|
|
123
123
|
if (state.intermediateFiles.convertedVideo) {
|
|
124
|
-
console.log(` •
|
|
124
|
+
console.log(` • Video: ${path.basename(state.intermediateFiles.convertedVideo)}`);
|
|
125
125
|
}
|
|
126
126
|
if (state.intermediateFiles.extractedAudio) {
|
|
127
|
-
console.log(` •
|
|
127
|
+
console.log(` • Audio: ${path.basename(state.intermediateFiles.extractedAudio)}`);
|
|
128
128
|
}
|
|
129
129
|
if (state.intermediateFiles.transcriptionText) {
|
|
130
|
-
console.log(` •
|
|
130
|
+
console.log(` • Transcription: ${path.basename(state.intermediateFiles.transcriptionText)}`);
|
|
131
131
|
}
|
|
132
132
|
console.log('');
|
|
133
133
|
}
|
|
134
134
|
async function main() {
|
|
135
135
|
console.log('🎬 FFmpeg Simple Converter - Workflow Multi-Step\n');
|
|
136
|
-
//
|
|
136
|
+
// Check ffmpeg
|
|
137
137
|
const ffmpegInstalled = verifyFfmpeg();
|
|
138
138
|
if (!ffmpegInstalled) {
|
|
139
139
|
process.exit(1);
|
|
140
140
|
}
|
|
141
141
|
console.log('');
|
|
142
|
-
//
|
|
142
|
+
// Ensure configuration exists (even without API keys)
|
|
143
143
|
const config = await ensureConfig();
|
|
144
|
-
//
|
|
144
|
+
// List files
|
|
145
145
|
const currentDir = process.cwd();
|
|
146
146
|
const mediaFiles = listMediaFiles(currentDir);
|
|
147
147
|
if (mediaFiles.length === 0) {
|
|
148
|
-
console.log('\n⚠️
|
|
149
|
-
console.log('
|
|
150
|
-
console.log(' •
|
|
151
|
-
console.log(' •
|
|
148
|
+
console.log('\n⚠️ No media files found in current directory.');
|
|
149
|
+
console.log('Supported formats:');
|
|
150
|
+
console.log(' • Audio: .ogg, .wav, .mp3, .m4a, .aac, .flac');
|
|
151
|
+
console.log(' • Video: .mp4, .mov, .mkv, .webm, .avi\n');
|
|
152
152
|
process.exit(0);
|
|
153
153
|
}
|
|
154
|
-
console.log(`\n📁
|
|
155
|
-
//
|
|
154
|
+
console.log(`\n📁 Found ${mediaFiles.length} media file(s)\n`);
|
|
155
|
+
// File selection
|
|
156
156
|
const { selectedFile } = await inquirer.prompt([
|
|
157
157
|
{
|
|
158
158
|
type: 'list',
|
|
159
159
|
name: 'selectedFile',
|
|
160
|
-
message: '
|
|
160
|
+
message: 'Select the file:',
|
|
161
161
|
choices: mediaFiles.map((f) => ({
|
|
162
162
|
name: `${f.type === 'video' ? '🎬' : '🎵'} ${f.name}`,
|
|
163
163
|
value: f.fullPath
|
|
@@ -165,49 +165,49 @@ async function main() {
|
|
|
165
165
|
}
|
|
166
166
|
]);
|
|
167
167
|
const fileType = detectFileType(selectedFile);
|
|
168
|
-
//
|
|
168
|
+
// Filter workflows compatible with file type
|
|
169
169
|
const availableWorkflows = WORKFLOW_OPTIONS.filter((w) => {
|
|
170
170
|
if (w.requiresType === 'any')
|
|
171
171
|
return true;
|
|
172
172
|
return w.requiresType === fileType;
|
|
173
173
|
});
|
|
174
|
-
//
|
|
174
|
+
// Mark workflows that require API key
|
|
175
175
|
const workflowChoices = availableWorkflows.map((w) => {
|
|
176
|
-
const requiresTranscription = w.steps.some(s => s.includes('
|
|
176
|
+
const requiresTranscription = w.steps.some(s => s.includes('Transcribe'));
|
|
177
177
|
const hasKey = hasApiKey(config);
|
|
178
178
|
let name = w.name;
|
|
179
179
|
if (requiresTranscription && !hasKey) {
|
|
180
|
-
name += ' ⚠️ (
|
|
180
|
+
name += ' ⚠️ (requires API key)';
|
|
181
181
|
}
|
|
182
182
|
return {
|
|
183
183
|
name,
|
|
184
184
|
value: w.value
|
|
185
185
|
};
|
|
186
186
|
});
|
|
187
|
-
//
|
|
187
|
+
// Workflow selection
|
|
188
188
|
const { selectedWorkflow } = await inquirer.prompt([
|
|
189
189
|
{
|
|
190
190
|
type: 'list',
|
|
191
191
|
name: 'selectedWorkflow',
|
|
192
|
-
message: '
|
|
192
|
+
message: 'Select what you want to do:',
|
|
193
193
|
choices: workflowChoices
|
|
194
194
|
}
|
|
195
195
|
]);
|
|
196
196
|
const workflow = availableWorkflows.find((w) => w.value === selectedWorkflow);
|
|
197
197
|
if (!workflow) {
|
|
198
|
-
console.error('❌
|
|
198
|
+
console.error('❌ Invalid workflow');
|
|
199
199
|
process.exit(1);
|
|
200
200
|
}
|
|
201
|
-
//
|
|
202
|
-
const requiresTranscription = workflow.steps.some(s => s.includes('
|
|
201
|
+
// Warning if workflow requires transcription but no API key
|
|
202
|
+
const requiresTranscription = workflow.steps.some(s => s.includes('Transcribe'));
|
|
203
203
|
if (requiresTranscription && !hasApiKey(config)) {
|
|
204
|
-
console.log('\n⚠️
|
|
205
|
-
console.log('
|
|
204
|
+
console.log('\n⚠️ This workflow includes transcription, but no API key is configured.');
|
|
205
|
+
console.log('Transcription will be skipped. Configure an API key to enable transcription.\n');
|
|
206
206
|
const { confirm } = await inquirer.prompt([
|
|
207
207
|
{
|
|
208
208
|
type: 'confirm',
|
|
209
209
|
name: 'confirm',
|
|
210
|
-
message: '
|
|
210
|
+
message: 'Continue anyway?',
|
|
211
211
|
default: true
|
|
212
212
|
}
|
|
213
213
|
]);
|
|
@@ -215,12 +215,12 @@ async function main() {
|
|
|
215
215
|
process.exit(0);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
-
//
|
|
218
|
+
// Execute workflow
|
|
219
219
|
await executeWorkflow(workflow, selectedFile, config);
|
|
220
220
|
}
|
|
221
|
-
//
|
|
221
|
+
// Execute
|
|
222
222
|
main().catch((error) => {
|
|
223
|
-
console.error('\n❌
|
|
223
|
+
console.error('\n❌ Error:', error.message);
|
|
224
224
|
process.exit(1);
|
|
225
225
|
});
|
|
226
226
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AASvB,MAAM,gBAAgB,GAAqB;IACzC;QACE,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Transcribes an audio file using Groq Whisper
|
|
3
3
|
* https://console.groq.com/docs/speech-to-text
|
|
4
|
-
* @param audioLocalFilePath -
|
|
5
|
-
* @param apiKey - API Key
|
|
6
|
-
* @returns
|
|
4
|
+
* @param audioLocalFilePath - Local audio file path
|
|
5
|
+
* @param apiKey - Groq API Key
|
|
6
|
+
* @returns Transcribed text or null in case of error
|
|
7
7
|
*/
|
|
8
8
|
export declare const groqTranscriptAudio: (audioLocalFilePath: string, apiKey: string) => Promise<string | null>;
|
|
9
9
|
//# sourceMappingURL=groq.d.ts.map
|
package/dist/transcript/groq.js
CHANGED
|
@@ -2,15 +2,15 @@ import FormData from 'form-data';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Transcribes an audio file using Groq Whisper
|
|
6
6
|
* https://console.groq.com/docs/speech-to-text
|
|
7
|
-
* @param audioLocalFilePath -
|
|
8
|
-
* @param apiKey - API Key
|
|
9
|
-
* @returns
|
|
7
|
+
* @param audioLocalFilePath - Local audio file path
|
|
8
|
+
* @param apiKey - Groq API Key
|
|
9
|
+
* @returns Transcribed text or null in case of error
|
|
10
10
|
*/
|
|
11
11
|
export const groqTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
12
12
|
if (!apiKey) {
|
|
13
|
-
console.error('❌ Groq API Key
|
|
13
|
+
console.error('❌ Groq API Key not provided');
|
|
14
14
|
return null;
|
|
15
15
|
}
|
|
16
16
|
try {
|
|
@@ -31,7 +31,7 @@ export const groqTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
|
31
31
|
return data?.text?.trim() || null;
|
|
32
32
|
}
|
|
33
33
|
catch (error) {
|
|
34
|
-
console.error('
|
|
34
|
+
console.error('Error transcribing audio with Groq:', error.response?.data || error.message);
|
|
35
35
|
return null;
|
|
36
36
|
}
|
|
37
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/transcript/groq.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/transcript/groq.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;QAE/B,+BAA+B;QAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAChE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;QAC5C,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAA;QAClD,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QACnC,oCAAoC;QAEpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,qDAAqD,EACrD,QAAQ,EACR;YACE,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,GAAG,QAAQ,CAAC,UAAU,EAAE;aACzB;SACF,CACF,CAAA;QAED,OAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAA;IAEnC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3F,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Config } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @param audioFilePath -
|
|
5
|
-
* @param config -
|
|
6
|
-
* @returns
|
|
3
|
+
* Transcribes an audio file trying Groq first, then OpenAI
|
|
4
|
+
* @param audioFilePath - Audio file path
|
|
5
|
+
* @param config - Configuration with API keys
|
|
6
|
+
* @returns Transcribed text or null
|
|
7
7
|
*/
|
|
8
8
|
export declare function transcribeAudio(audioFilePath: string, config: Config): Promise<string | null>;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Saves transcription to file
|
|
11
11
|
*/
|
|
12
12
|
export declare function saveTranscription(audioPath: string, transcription: string): string;
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/transcript/index.js
CHANGED
|
@@ -3,43 +3,43 @@ import fs from 'fs';
|
|
|
3
3
|
import { groqTranscriptAudio } from './groq.js';
|
|
4
4
|
import { openaiTranscriptAudio } from './openai.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @param audioFilePath -
|
|
8
|
-
* @param config -
|
|
9
|
-
* @returns
|
|
6
|
+
* Transcribes an audio file trying Groq first, then OpenAI
|
|
7
|
+
* @param audioFilePath - Audio file path
|
|
8
|
+
* @param config - Configuration with API keys
|
|
9
|
+
* @returns Transcribed text or null
|
|
10
10
|
*/
|
|
11
11
|
export async function transcribeAudio(audioFilePath, config) {
|
|
12
|
-
console.log(`\n🎙️
|
|
13
|
-
//
|
|
12
|
+
console.log(`\n🎙️ Transcribing: ${path.basename(audioFilePath)}`);
|
|
13
|
+
// Try Groq first (faster and cheaper)
|
|
14
14
|
if (config.groqApiKey) {
|
|
15
|
-
console.log('📡
|
|
15
|
+
console.log('📡 Trying Groq Whisper (fast)...');
|
|
16
16
|
const result = await groqTranscriptAudio(audioFilePath, config.groqApiKey);
|
|
17
17
|
if (result) {
|
|
18
|
-
console.log('✓
|
|
18
|
+
console.log('✓ Transcription completed with Groq');
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
|
-
console.log('⚠️
|
|
21
|
+
console.log('⚠️ Failed with Groq, trying OpenAI...');
|
|
22
22
|
}
|
|
23
|
-
//
|
|
23
|
+
// If Groq failed or is not configured, try OpenAI
|
|
24
24
|
if (config.openaiApiKey) {
|
|
25
|
-
console.log('📡
|
|
25
|
+
console.log('📡 Trying OpenAI Whisper...');
|
|
26
26
|
const result = await openaiTranscriptAudio(audioFilePath, config.openaiApiKey);
|
|
27
27
|
if (result) {
|
|
28
|
-
console.log('✓
|
|
28
|
+
console.log('✓ Transcription completed with OpenAI');
|
|
29
29
|
return result;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//
|
|
32
|
+
// If we got here, no service worked
|
|
33
33
|
if (!config.groqApiKey && !config.openaiApiKey) {
|
|
34
|
-
console.error('❌
|
|
34
|
+
console.error('❌ No API key configured for transcription');
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
|
-
console.error('❌
|
|
37
|
+
console.error('❌ Failed to transcribe with all available services');
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Saves transcription to file
|
|
43
43
|
*/
|
|
44
44
|
export function saveTranscription(audioPath, transcription) {
|
|
45
45
|
const outputFileName = path.basename(audioPath, path.extname(audioPath)) + '.txt';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcript/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,MAAc;IAGd,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcript/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,MAAc;IAGd,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAEnE,sCAAsC;IACtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC1E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAClD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACvD,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC9E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,aAAqB;IACxE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAA;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAA;IAErE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IACpD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param audioLocalFilePath -
|
|
4
|
-
* @param apiKey - API Key
|
|
5
|
-
* @returns
|
|
2
|
+
* Transcribes an audio file using OpenAI Whisper
|
|
3
|
+
* @param audioLocalFilePath - Local audio file path
|
|
4
|
+
* @param apiKey - OpenAI API Key
|
|
5
|
+
* @returns Transcribed text or null in case of error
|
|
6
6
|
*/
|
|
7
7
|
export declare const openaiTranscriptAudio: (audioLocalFilePath: string, apiKey: string) => Promise<string | null>;
|
|
8
8
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import OpenAI from 'openai';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @param audioLocalFilePath -
|
|
6
|
-
* @param apiKey - API Key
|
|
7
|
-
* @returns
|
|
4
|
+
* Transcribes an audio file using OpenAI Whisper
|
|
5
|
+
* @param audioLocalFilePath - Local audio file path
|
|
6
|
+
* @param apiKey - OpenAI API Key
|
|
7
|
+
* @returns Transcribed text or null in case of error
|
|
8
8
|
*/
|
|
9
9
|
export const openaiTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
10
10
|
if (!apiKey) {
|
|
11
|
-
console.error('❌ OpenAI API Key
|
|
11
|
+
console.error('❌ OpenAI API Key not provided');
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
14
|
try {
|
|
@@ -20,7 +20,7 @@ export const openaiTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
|
20
20
|
return transcription.text ?? null;
|
|
21
21
|
}
|
|
22
22
|
catch (error) {
|
|
23
|
-
console.error('
|
|
23
|
+
console.error('Error transcribing audio with OpenAI:', error.response?.data || error.message);
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/transcript/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/transcript/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAErC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;YAC7D,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;YAC7C,KAAK,EAAE,WAAW;SACnB,CAAC,CAAA;QAEF,OAAO,aAAa,CAAC,IAAI,IAAI,IAAI,CAAA;IAEnC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7F,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Checks if ffmpeg is installed and available in PATH
|
|
3
3
|
*/
|
|
4
4
|
export declare function checkFfmpegInstalled(): {
|
|
5
5
|
installed: boolean;
|
|
@@ -7,12 +7,12 @@ export declare function checkFfmpegInstalled(): {
|
|
|
7
7
|
error?: string;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Displays ffmpeg installation instructions based on operating system
|
|
11
11
|
*/
|
|
12
12
|
export declare function showFfmpegInstallInstructions(): void;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Checks and reports on ffmpeg installation
|
|
15
|
+
* Returns true if installed, false otherwise
|
|
16
16
|
*/
|
|
17
17
|
export declare function verifyFfmpeg(): boolean;
|
|
18
18
|
//# sourceMappingURL=ffmpegCheck.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Checks if ffmpeg is installed and available in PATH
|
|
4
4
|
*/
|
|
5
5
|
export function checkFfmpegInstalled() {
|
|
6
6
|
try {
|
|
@@ -8,7 +8,7 @@ export function checkFfmpegInstalled() {
|
|
|
8
8
|
encoding: 'utf-8',
|
|
9
9
|
stdio: ['pipe', 'pipe', 'pipe']
|
|
10
10
|
});
|
|
11
|
-
//
|
|
11
|
+
// Extract version from first line
|
|
12
12
|
const versionMatch = output.match(/ffmpeg version ([^\s]+)/);
|
|
13
13
|
const version = versionMatch ? versionMatch[1] : 'unknown';
|
|
14
14
|
return {
|
|
@@ -24,25 +24,25 @@ export function checkFfmpegInstalled() {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Displays ffmpeg installation instructions based on operating system
|
|
28
28
|
*/
|
|
29
29
|
export function showFfmpegInstallInstructions() {
|
|
30
30
|
const platform = process.platform;
|
|
31
|
-
console.log('\n⚠️ FFmpeg
|
|
32
|
-
console.log('📦
|
|
31
|
+
console.log('\n⚠️ FFmpeg is not installed or not available in PATH\n');
|
|
32
|
+
console.log('📦 Installation instructions:\n');
|
|
33
33
|
if (platform === 'win32') {
|
|
34
34
|
console.log('Windows:');
|
|
35
|
-
console.log(' 1.
|
|
35
|
+
console.log(' 1. Using Chocolatey:');
|
|
36
36
|
console.log(' choco install ffmpeg');
|
|
37
|
-
console.log('\n 2.
|
|
37
|
+
console.log('\n 2. Using Scoop:');
|
|
38
38
|
console.log(' scoop install ffmpeg');
|
|
39
|
-
console.log('\n 3.
|
|
40
|
-
console.log(' -
|
|
41
|
-
console.log(' -
|
|
39
|
+
console.log('\n 3. Manual download:');
|
|
40
|
+
console.log(' - Download from: https://ffmpeg.org/download.html');
|
|
41
|
+
console.log(' - Extract and add to system PATH');
|
|
42
42
|
}
|
|
43
43
|
else if (platform === 'darwin') {
|
|
44
44
|
console.log('macOS:');
|
|
45
|
-
console.log('
|
|
45
|
+
console.log(' Using Homebrew:');
|
|
46
46
|
console.log(' brew install ffmpeg');
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
@@ -54,16 +54,16 @@ export function showFfmpegInstallInstructions() {
|
|
|
54
54
|
console.log('\n Arch Linux:');
|
|
55
55
|
console.log(' sudo pacman -S ffmpeg');
|
|
56
56
|
}
|
|
57
|
-
console.log('\n💡
|
|
57
|
+
console.log('\n💡 After installation, restart the terminal and try again.\n');
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
60
|
+
* Checks and reports on ffmpeg installation
|
|
61
|
+
* Returns true if installed, false otherwise
|
|
62
62
|
*/
|
|
63
63
|
export function verifyFfmpeg() {
|
|
64
64
|
const result = checkFfmpegInstalled();
|
|
65
65
|
if (result.installed) {
|
|
66
|
-
console.log(`✓ FFmpeg
|
|
66
|
+
console.log(`✓ FFmpeg is installed (version: ${result.version})`);
|
|
67
67
|
return true;
|
|
68
68
|
}
|
|
69
69
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegCheck.js","sourceRoot":"","sources":["../../src/utils/ffmpegCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE;YACzC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QAEF,
|
|
1
|
+
{"version":3,"file":"ffmpegCheck.js","sourceRoot":"","sources":["../../src/utils/ffmpegCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE;YACzC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QAEF,kCAAkC;QAClC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAE1D,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO;SACR,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAEjC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;IACvE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IAE9C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACtD,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;IAErC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;SAAM,CAAC;QACN,6BAA6B,EAAE,CAAA;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Generates unique output file path
|
|
3
3
|
*/
|
|
4
4
|
export declare function uniqueOutputPath(dir: string, baseName: string, extWithDot: string): string;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Executes an ffmpeg command
|
|
7
7
|
*/
|
|
8
8
|
export declare function runFfmpegCommand(args: string[]): Promise<string>;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Converts video to performant format (H.264/AAC)
|
|
11
11
|
*/
|
|
12
12
|
export declare function convertVideo(inputPath: string, outputDir?: string): Promise<string>;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Extracts audio from a video
|
|
15
15
|
*/
|
|
16
16
|
export declare function extractAudio(inputPath: string, outputDir?: string): Promise<string>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Converts audio to performant format
|
|
19
19
|
*/
|
|
20
20
|
export declare function convertAudio(inputPath: string, outputDir?: string): Promise<string>;
|
|
21
21
|
//# sourceMappingURL=ffmpegOperations.d.ts.map
|
|
@@ -2,7 +2,7 @@ import { spawn } from 'child_process';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Generates unique output file path
|
|
6
6
|
*/
|
|
7
7
|
export function uniqueOutputPath(dir, baseName, extWithDot) {
|
|
8
8
|
let candidate = path.join(dir, `${baseName}${extWithDot}`);
|
|
@@ -13,10 +13,10 @@ export function uniqueOutputPath(dir, baseName, extWithDot) {
|
|
|
13
13
|
if (!fs.existsSync(candidate))
|
|
14
14
|
return candidate;
|
|
15
15
|
}
|
|
16
|
-
throw new Error('
|
|
16
|
+
throw new Error('Could not generate a unique output name.');
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Executes an ffmpeg command
|
|
20
20
|
*/
|
|
21
21
|
export function runFfmpegCommand(args) {
|
|
22
22
|
return new Promise((resolve, reject) => {
|
|
@@ -30,10 +30,10 @@ export function runFfmpegCommand(args) {
|
|
|
30
30
|
});
|
|
31
31
|
ffmpeg.stderr.on('data', (data) => {
|
|
32
32
|
stderr += data.toString();
|
|
33
|
-
// FFmpeg
|
|
33
|
+
// FFmpeg sends progress to stderr
|
|
34
34
|
const lines = stderr.split('\n');
|
|
35
35
|
const lastLine = lines[lines.length - 2] || '';
|
|
36
|
-
//
|
|
36
|
+
// Display progress if there is time information
|
|
37
37
|
if (lastLine.includes('time=')) {
|
|
38
38
|
process.stdout.write(`\r${lastLine.trim()}`);
|
|
39
39
|
}
|
|
@@ -44,7 +44,7 @@ export function runFfmpegCommand(args) {
|
|
|
44
44
|
resolve(stdout);
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
reject(new Error(`FFmpeg
|
|
47
|
+
reject(new Error(`FFmpeg failed with code ${code}\n${stderr}`));
|
|
48
48
|
}
|
|
49
49
|
});
|
|
50
50
|
ffmpeg.on('error', (err) => {
|
|
@@ -53,13 +53,13 @@ export function runFfmpegCommand(args) {
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
56
|
+
* Converts video to performant format (H.264/AAC)
|
|
57
57
|
*/
|
|
58
58
|
export async function convertVideo(inputPath, outputDir) {
|
|
59
59
|
const dir = outputDir || path.dirname(inputPath);
|
|
60
60
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
61
61
|
const outputPath = uniqueOutputPath(dir, `${baseName}_converted`, '.mp4');
|
|
62
|
-
console.log(`\n🎬
|
|
62
|
+
console.log(`\n🎬 Converting video to performant format...`);
|
|
63
63
|
const args = [
|
|
64
64
|
'-i', inputPath,
|
|
65
65
|
'-c:v', 'libx264',
|
|
@@ -72,17 +72,17 @@ export async function convertVideo(inputPath, outputDir) {
|
|
|
72
72
|
outputPath
|
|
73
73
|
];
|
|
74
74
|
await runFfmpegCommand(args);
|
|
75
|
-
console.log(`\n✓
|
|
75
|
+
console.log(`\n✓ Video converted: ${path.basename(outputPath)}`);
|
|
76
76
|
return outputPath;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Extracts audio from a video
|
|
80
80
|
*/
|
|
81
81
|
export async function extractAudio(inputPath, outputDir) {
|
|
82
82
|
const dir = outputDir || path.dirname(inputPath);
|
|
83
83
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
84
84
|
const outputPath = uniqueOutputPath(dir, `${baseName}_audio`, '.mp3');
|
|
85
|
-
console.log(`\n🎵
|
|
85
|
+
console.log(`\n🎵 Extracting audio from video...`);
|
|
86
86
|
const args = [
|
|
87
87
|
'-i', inputPath,
|
|
88
88
|
'-vn',
|
|
@@ -92,17 +92,17 @@ export async function extractAudio(inputPath, outputDir) {
|
|
|
92
92
|
outputPath
|
|
93
93
|
];
|
|
94
94
|
await runFfmpegCommand(args);
|
|
95
|
-
console.log(`\n✓
|
|
95
|
+
console.log(`\n✓ Audio extracted: ${path.basename(outputPath)}`);
|
|
96
96
|
return outputPath;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* Converts audio to performant format
|
|
100
100
|
*/
|
|
101
101
|
export async function convertAudio(inputPath, outputDir) {
|
|
102
102
|
const dir = outputDir || path.dirname(inputPath);
|
|
103
103
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
104
104
|
const outputPath = uniqueOutputPath(dir, `${baseName}_converted`, '.mp3');
|
|
105
|
-
console.log(`\n🎵
|
|
105
|
+
console.log(`\n🎵 Converting audio to MP3...`);
|
|
106
106
|
const args = [
|
|
107
107
|
'-i', inputPath,
|
|
108
108
|
'-acodec', 'libmp3lame',
|
|
@@ -111,7 +111,7 @@ export async function convertAudio(inputPath, outputDir) {
|
|
|
111
111
|
outputPath
|
|
112
112
|
];
|
|
113
113
|
await runFfmpegCommand(args);
|
|
114
|
-
console.log(`\n✓
|
|
114
|
+
console.log(`\n✓ Audio converted: ${path.basename(outputPath)}`);
|
|
115
115
|
return outputPath;
|
|
116
116
|
}
|
|
117
117
|
//# sourceMappingURL=ffmpegOperations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegOperations.js","sourceRoot":"","sources":["../../src/utils/ffmpegOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,QAAgB,EAAE,UAAkB;IAChF,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IACjD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ffmpegOperations.js","sourceRoot":"","sources":["../../src/utils/ffmpegOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export type FileType = 'audio' | 'video' | 'unknown';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Detects file type by extension
|
|
4
4
|
*/
|
|
5
5
|
export declare function detectFileType(filePath: string): FileType;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Lists audio/video files in directory
|
|
8
8
|
*/
|
|
9
9
|
export declare function listMediaFiles(dir: string): Array<{
|
|
10
10
|
name: string;
|
|
@@ -12,7 +12,7 @@ export declare function listMediaFiles(dir: string): Array<{
|
|
|
12
12
|
type: FileType;
|
|
13
13
|
}>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Checks if a file exists
|
|
16
16
|
*/
|
|
17
17
|
export declare function fileExists(filePath: string): boolean;
|
|
18
18
|
//# sourceMappingURL=fileHelpers.d.ts.map
|
|
@@ -3,7 +3,7 @@ import path from 'path';
|
|
|
3
3
|
const AUDIO_EXTS = new Set(['.ogg', '.wav', '.mp3', '.m4a', '.aac', '.flac']);
|
|
4
4
|
const VIDEO_EXTS = new Set(['.mp4', '.mov', '.mkv', '.webm', '.avi']);
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Detects file type by extension
|
|
7
7
|
*/
|
|
8
8
|
export function detectFileType(filePath) {
|
|
9
9
|
const ext = path.extname(filePath).toLowerCase();
|
|
@@ -14,7 +14,7 @@ export function detectFileType(filePath) {
|
|
|
14
14
|
return 'unknown';
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Lists audio/video files in directory
|
|
18
18
|
*/
|
|
19
19
|
export function listMediaFiles(dir) {
|
|
20
20
|
try {
|
|
@@ -41,12 +41,12 @@ export function listMediaFiles(dir) {
|
|
|
41
41
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
44
|
-
console.error('
|
|
44
|
+
console.error('Error listing files:', error);
|
|
45
45
|
return [];
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Checks if a file exists
|
|
50
50
|
*/
|
|
51
51
|
export function fileExists(filePath) {
|
|
52
52
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileHelpers.js","sourceRoot":"","sources":["../../src/utils/fileHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAIrE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAEhD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,OAAO;gBACL,IAAI;gBACJ,QAAQ;gBACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;aAC3B,CAAA;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"fileHelpers.js","sourceRoot":"","sources":["../../src/utils/fileHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAIrE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAEhD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,OAAO;gBACL,IAAI;gBACJ,QAAQ;gBACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;aAC3B,CAAA;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
package/dist/workflow/state.d.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import { WorkflowState, WorkflowStep } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Creates a new workflow state
|
|
4
4
|
*/
|
|
5
5
|
export declare function createWorkflowState(inputFile: string, stepNames: string[]): WorkflowState;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Updates step status
|
|
8
8
|
*/
|
|
9
9
|
export declare function updateStepStatus(state: WorkflowState, stepIndex: number, status: WorkflowStep['status'], result?: any, error?: string): void;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Gets current step
|
|
12
12
|
*/
|
|
13
13
|
export declare function getCurrentStep(state: WorkflowState): WorkflowStep | null;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Advances to next step
|
|
16
16
|
*/
|
|
17
17
|
export declare function nextStep(state: WorkflowState): boolean;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Checks if workflow is complete
|
|
20
20
|
*/
|
|
21
21
|
export declare function isWorkflowComplete(state: WorkflowState): boolean;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Checks if there were any workflow errors
|
|
24
24
|
*/
|
|
25
25
|
export declare function hasWorkflowErrors(state: WorkflowState): boolean;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Displays workflow progress
|
|
28
28
|
*/
|
|
29
29
|
export declare function printWorkflowProgress(state: WorkflowState): void;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Saves workflow state to file
|
|
32
32
|
*/
|
|
33
33
|
export declare function saveWorkflowState(state: WorkflowState, outputDir: string): void;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Loads workflow state from file
|
|
36
36
|
*/
|
|
37
37
|
export declare function loadWorkflowState(outputDir: string): WorkflowState | null;
|
|
38
38
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/workflow/state.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Creates a new workflow state
|
|
5
5
|
*/
|
|
6
6
|
export function createWorkflowState(inputFile, stepNames) {
|
|
7
7
|
return {
|
|
@@ -16,7 +16,7 @@ export function createWorkflowState(inputFile, stepNames) {
|
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Updates step status
|
|
20
20
|
*/
|
|
21
21
|
export function updateStepStatus(state, stepIndex, status, result, error) {
|
|
22
22
|
if (stepIndex >= 0 && stepIndex < state.steps.length) {
|
|
@@ -37,7 +37,7 @@ export function updateStepStatus(state, stepIndex, status, result, error) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Gets current step
|
|
41
41
|
*/
|
|
42
42
|
export function getCurrentStep(state) {
|
|
43
43
|
if (state.currentStepIndex < state.steps.length) {
|
|
@@ -46,7 +46,7 @@ export function getCurrentStep(state) {
|
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Advances to next step
|
|
50
50
|
*/
|
|
51
51
|
export function nextStep(state) {
|
|
52
52
|
if (state.currentStepIndex < state.steps.length - 1) {
|
|
@@ -56,22 +56,22 @@ export function nextStep(state) {
|
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
59
|
+
* Checks if workflow is complete
|
|
60
60
|
*/
|
|
61
61
|
export function isWorkflowComplete(state) {
|
|
62
62
|
return state.steps.every(step => step.status === 'completed' || step.status === 'skipped');
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* Checks if there were any workflow errors
|
|
66
66
|
*/
|
|
67
67
|
export function hasWorkflowErrors(state) {
|
|
68
68
|
return state.steps.some(step => step.status === 'failed');
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Displays workflow progress
|
|
72
72
|
*/
|
|
73
73
|
export function printWorkflowProgress(state) {
|
|
74
|
-
console.log('\n📊
|
|
74
|
+
console.log('\n📊 Workflow Progress:');
|
|
75
75
|
console.log('━'.repeat(50));
|
|
76
76
|
state.steps.forEach((step, index) => {
|
|
77
77
|
let icon = '⏳';
|
|
@@ -88,20 +88,20 @@ export function printWorkflowProgress(state) {
|
|
|
88
88
|
: '';
|
|
89
89
|
console.log(`${icon} ${index + 1}. ${step.name}${duration}`);
|
|
90
90
|
if (step.error) {
|
|
91
|
-
console.log(` └─
|
|
91
|
+
console.log(` └─ Error: ${step.error}`);
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
console.log('━'.repeat(50));
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
97
|
+
* Saves workflow state to file
|
|
98
98
|
*/
|
|
99
99
|
export function saveWorkflowState(state, outputDir) {
|
|
100
100
|
const stateFile = path.join(outputDir, '.workflow-state.json');
|
|
101
101
|
fs.writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
|
-
*
|
|
104
|
+
* Loads workflow state from file
|
|
105
105
|
*/
|
|
106
106
|
export function loadWorkflowState(outputDir) {
|
|
107
107
|
const stateFile = path.join(outputDir, '.workflow-state.json');
|
|
@@ -112,7 +112,7 @@ export function loadWorkflowState(outputDir) {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
catch (error) {
|
|
115
|
-
console.warn('
|
|
115
|
+
console.warn('Error loading workflow state:', error);
|
|
116
116
|
}
|
|
117
117
|
return null;
|
|
118
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAmB;IACxE,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,EAAE,EAAE,QAAQ,KAAK,EAAE;YACnB,IAAI;YACJ,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,SAAS;QACT,iBAAiB,EAAE,EAAE;KACtB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,SAAiB,EACjB,MAA8B,EAC9B,MAAY,EACZ,KAAc;IAEd,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,CAAC;aAAM,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAC9B,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CACzD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediacript",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "CLI to convert media files to performat formats and extract text using Groq and OpenAI's Whisper API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
"convert.js",
|
|
14
14
|
"README.md"
|
|
15
15
|
],
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git://github.com/igortrinidad/mediacript.git"
|
|
19
|
+
},
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/igortrinidad/mediacript/issues"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/igortrinidad/mediacript#readme",
|
|
16
24
|
"scripts": {
|
|
17
25
|
"convert": "node convert.js",
|
|
18
26
|
"start": "node --loader ts-node/esm src/index.ts",
|