demofly 0.2.0 → 0.2.2
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/commands/auth/login.js +1 -1
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/demos/list.d.ts.map +1 -1
- package/dist/commands/demos/list.js +9 -6
- package/dist/commands/demos/list.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +346 -35
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +11 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +32 -4
- package/dist/commands/render.js.map +1 -1
- package/dist/commands/voices/index.d.ts +3 -0
- package/dist/commands/voices/index.d.ts.map +1 -0
- package/dist/commands/voices/index.js +11 -0
- package/dist/commands/voices/index.js.map +1 -0
- package/dist/commands/voices/list.d.ts +3 -0
- package/dist/commands/voices/list.d.ts.map +1 -0
- package/dist/commands/voices/list.js +72 -0
- package/dist/commands/voices/list.js.map +1 -0
- package/dist/commands/voices/select.d.ts +3 -0
- package/dist/commands/voices/select.d.ts.map +1 -0
- package/dist/commands/voices/select.js +79 -0
- package/dist/commands/voices/select.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/alignment.d.ts +47 -0
- package/dist/lib/alignment.d.ts.map +1 -0
- package/dist/lib/alignment.js +122 -0
- package/dist/lib/alignment.js.map +1 -0
- package/dist/lib/api-client.d.ts +2 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +6 -2
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/api-types.d.ts +15 -0
- package/dist/lib/api-types.d.ts.map +1 -0
- package/dist/lib/api-types.js +2 -0
- package/dist/lib/api-types.js.map +1 -0
- package/dist/lib/cloud-tts.d.ts +21 -0
- package/dist/lib/cloud-tts.d.ts.map +1 -0
- package/dist/lib/cloud-tts.js +42 -0
- package/dist/lib/cloud-tts.js.map +1 -0
- package/dist/lib/credentials.js +1 -1
- package/dist/lib/credentials.js.map +1 -1
- package/dist/lib/demo-config.d.ts +8 -0
- package/dist/lib/demo-config.d.ts.map +1 -0
- package/dist/lib/demo-config.js +29 -0
- package/dist/lib/demo-config.js.map +1 -0
- package/dist/lib/edit-proposals.d.ts +46 -0
- package/dist/lib/edit-proposals.d.ts.map +1 -0
- package/dist/lib/edit-proposals.js +159 -0
- package/dist/lib/edit-proposals.js.map +1 -0
- package/dist/lib/retiming.d.ts +19 -0
- package/dist/lib/retiming.d.ts.map +1 -0
- package/dist/lib/retiming.js +215 -0
- package/dist/lib/retiming.js.map +1 -0
- package/dist/lib/timestamps.d.ts +43 -0
- package/dist/lib/timestamps.d.ts.map +1 -0
- package/dist/lib/timestamps.js +199 -0
- package/dist/lib/timestamps.js.map +1 -0
- package/dist/lib/tts.d.ts +7 -4
- package/dist/lib/tts.d.ts.map +1 -1
- package/dist/lib/tts.js +15 -8
- package/dist/lib/tts.js.map +1 -1
- package/dist/lib/voice-config.d.ts +7 -0
- package/dist/lib/voice-config.d.ts.map +1 -0
- package/dist/lib/voice-config.js +29 -0
- package/dist/lib/voice-config.js.map +1 -0
- package/dist/lib/voice-resolver.d.ts +82 -0
- package/dist/lib/voice-resolver.d.ts.map +1 -0
- package/dist/lib/voice-resolver.js +108 -0
- package/dist/lib/voice-resolver.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { createServer } from "node:http";
|
|
|
4
4
|
import { randomBytes, createHash } from "node:crypto";
|
|
5
5
|
import { execSync } from "node:child_process";
|
|
6
6
|
import { setToken, setCredentials } from "../../lib/credentials.js";
|
|
7
|
-
const API_BASE = process.env.DEMOFLY_URL || "https://demofly.ai";
|
|
7
|
+
const API_BASE = process.env.DEMOFLY_URL || "https://app.demofly.ai";
|
|
8
8
|
const CLI_CLIENT_ID = "demofly-cli";
|
|
9
9
|
const CALLBACK_PORTS = [19823, 19824, 19825];
|
|
10
10
|
const DEVICE_POLL_INTERVAL_MS = 5000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAoB,MAAM,0BAA0B,CAAC;AAEtF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,wBAAwB,CAAC;AACrE,MAAM,aAAa,GAAG,aAAa,CAAC;AACpC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7C,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC3B,CAAC,CAAC,SAAS,GAAG,GAAG;YACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC5B,CAAC,CAAC,aAAa,GAAG,GAAG;gBACrB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;QAC5B,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,cAAc;IAC3B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,uBAAuB,EAAE;QAC9D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;KACnD,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAOrC,CAAC;IAEF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,EAC/B,uBAAuB,CACxB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,wBAAwB,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,8CAA8C;gBAC1D,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,SAAS,EAAE,aAAa;aACzB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKvC,CAAC;YAEF,sCAAsC;YACtC,MAAM,cAAc,CAAC;gBACnB,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI;gBACpD,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGrC,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+EAA+E;AAE/E,SAAS,YAAY;IACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC;SAC7B,QAAQ,CAAC,WAAW,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,WAAW,CAAC,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAY,EACZ,OAA0D,EAC1D,MAA4B;IAE5B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAEhE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACjC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;YAChE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,+CAA+C,IAAI,qDAAqD,CAAC,CAAC;YAClH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,0GAA0G,CAAC,CAAC;QACpH,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAA0D,EAC1D,MAA4B;IAE5B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,wCAAwC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;QACtE,iDAAiD,CAClD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,IAAI,cAAwD,CAAC;IAC7D,IAAI,eAAkE,CAAC;IACvE,IAAI,cAAoC,CAAC;IACzC,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/C,eAAe,GAAG,OAAO,CAAC;QAC1B,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,CAAC,eAAgB,EAAE,cAAe,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,oBAAoB,IAAI,WAAW,CAAC;IAExD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,aAAa;QACxB,YAAY,EAAE,WAAW;QACzB,KAAK;QACL,KAAK,EAAE,qCAAqC;QAC5C,cAAc,EAAE,IAAI,CAAC,SAAS;QAC9B,qBAAqB,EAAE,MAAM;KAC9B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,GAAG,QAAQ,8BAA8B,MAAM,EAAE,CAAC;IAEvE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,IAAI,MAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,cAAc,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,wBAAwB,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE,aAAa;YACxB,aAAa,EAAE,IAAI,CAAC,QAAQ;SAC7B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAMvC,CAAC;IAEF,MAAM,KAAK,GAAgB;QACzB,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI;QACpD,UAAU,EAAE,OAAO;KACpB,CAAC;IAEF,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,OAAO;IACpB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,KAAK,CACzB,GAAG,QAAQ,2CAA2C,EACtD;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KACjD,CACF,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,6BAA6B,EAAE;QACtE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAGnC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAC3C,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC1E,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,OAA6C,EAAE,EAAE;QAC9D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAgIzC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA6BxD"}
|
|
@@ -14,7 +14,7 @@ function formatDuration(ms) {
|
|
|
14
14
|
async function fetchCloudDemos(token) {
|
|
15
15
|
try {
|
|
16
16
|
const client = createApiClient(token);
|
|
17
|
-
return await client.get("/demos");
|
|
17
|
+
return (await client.get("/demos")) ?? [];
|
|
18
18
|
}
|
|
19
19
|
catch {
|
|
20
20
|
return [];
|
|
@@ -31,16 +31,19 @@ function mergeResults(local, cloud) {
|
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
if (cloud) {
|
|
34
|
-
|
|
34
|
+
// Match cloud demos to local demos by projectSlug
|
|
35
|
+
const cloudSlugs = new Set(cloud.filter((c) => c.projectSlug).map((c) => c.projectSlug));
|
|
35
36
|
for (const demo of local) {
|
|
36
|
-
if (
|
|
37
|
+
if (cloudSlugs.has(demo.name)) {
|
|
37
38
|
merged.get(demo.name).cloud = "synced";
|
|
38
39
|
}
|
|
39
40
|
}
|
|
41
|
+
// Add cloud-only demos (no matching local folder)
|
|
40
42
|
for (const c of cloud) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
const displayName = c.projectSlug ?? c.title;
|
|
44
|
+
if (!merged.has(displayName)) {
|
|
45
|
+
merged.set(displayName, {
|
|
46
|
+
name: displayName,
|
|
44
47
|
phase: "\u2014",
|
|
45
48
|
cloud: "cloud",
|
|
46
49
|
duration: "\u2014",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAkB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/demos/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+QnD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA4BV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0CV;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA6BV;AAoQD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+W9D"}
|
|
@@ -4,6 +4,16 @@ import { resolve, basename, extname } from "node:path";
|
|
|
4
4
|
import * as readline from "node:readline";
|
|
5
5
|
import { parseTimingMarkers, normalizeTimingData } from "../lib/timing.js";
|
|
6
6
|
import { debug } from "../lib/logger.js";
|
|
7
|
+
import { generateAllAudio, parseTranscript } from "../lib/tts.js";
|
|
8
|
+
import { extractTimestamps } from "../lib/timestamps.js";
|
|
9
|
+
import { buildAndWriteAlignment } from "../lib/alignment.js";
|
|
10
|
+
import { generateAndWriteEditProposals } from "../lib/edit-proposals.js";
|
|
11
|
+
import { retimeAndAssemble } from "../lib/retiming.js";
|
|
12
|
+
import { getToken } from "../lib/credentials.js";
|
|
13
|
+
import { createApiClient, getAppUrl } from "../lib/api-client.js";
|
|
14
|
+
import { getDefaultVoice } from "../lib/voice-config.js";
|
|
15
|
+
import { isCloudVoice, KOKORO_VOICES, KOKORO_DEFAULT_VOICE, resolveVoiceFromFlags, } from "../lib/voice-resolver.js";
|
|
16
|
+
import { generateCloudAudio, getSubscriptionStatus } from "../lib/cloud-tts.js";
|
|
7
17
|
function validateDemoArtifacts(demoDir, demo) {
|
|
8
18
|
const specPath = resolve(demoDir, "demo.spec.ts");
|
|
9
19
|
const configPath = resolve(demoDir, "playwright.config.ts");
|
|
@@ -109,10 +119,19 @@ function findAudioFiles(demoDir, timingData) {
|
|
|
109
119
|
}
|
|
110
120
|
return { matched, missing };
|
|
111
121
|
}
|
|
112
|
-
function
|
|
122
|
+
function getWatermarkPath() {
|
|
123
|
+
return resolve(import.meta.dirname ?? __dirname, "../../assets/watermark.png");
|
|
124
|
+
}
|
|
125
|
+
function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath, applyWatermark = false) {
|
|
113
126
|
const sceneMap = new Map(timingData.scenes.map((s) => [s.sceneId, s]));
|
|
114
127
|
const inputArgs = ["-i", videoPath];
|
|
115
128
|
const filterParts = [];
|
|
129
|
+
// If watermarking, add the watermark PNG as an input
|
|
130
|
+
const watermarkPath = applyWatermark ? getWatermarkPath() : null;
|
|
131
|
+
let watermarkInputIndex = -1;
|
|
132
|
+
if (watermarkPath && existsSync(watermarkPath)) {
|
|
133
|
+
watermarkInputIndex = 1; // will be shifted after audio inputs are added
|
|
134
|
+
}
|
|
116
135
|
for (let i = 0; i < audioMatches.length; i++) {
|
|
117
136
|
const match = audioMatches[i];
|
|
118
137
|
const scene = sceneMap.get(match.sceneId);
|
|
@@ -123,11 +142,27 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
|
|
|
123
142
|
const delayMs = scene.startMs;
|
|
124
143
|
filterParts.push(`[${audioIndex}:a]adelay=${delayMs}|${delayMs}[a${audioIndex}]`);
|
|
125
144
|
}
|
|
145
|
+
// Add watermark input after all audio inputs
|
|
146
|
+
if (watermarkPath && existsSync(watermarkPath)) {
|
|
147
|
+
inputArgs.push("-i", watermarkPath);
|
|
148
|
+
watermarkInputIndex = inputArgs.filter((a) => a === "-i").length - 1;
|
|
149
|
+
}
|
|
126
150
|
const mixInputs = filterParts
|
|
127
151
|
.map((_, i) => `[a${i + 1}]`)
|
|
128
152
|
.join("");
|
|
129
|
-
|
|
153
|
+
let filterComplex = filterParts.join("; ") +
|
|
130
154
|
`; ${mixInputs}amix=inputs=${audioMatches.length}:normalize=0[aout]`;
|
|
155
|
+
// Build video filter chain with optional watermark overlay
|
|
156
|
+
let videoMap = "0:v";
|
|
157
|
+
if (applyWatermark && watermarkInputIndex >= 0) {
|
|
158
|
+
// Scale watermark to ~8% of video width, position bottom-right with padding
|
|
159
|
+
// Use scale2ref so dimensions reference the main video, not the watermark PNG
|
|
160
|
+
filterComplex +=
|
|
161
|
+
`; [${watermarkInputIndex}:v][0:v]scale2ref=w=main_w*0.08:h=-1[wm_scaled][vmain]` +
|
|
162
|
+
`; [wm_scaled]format=rgba,colorchannelmixer=aa=0.6[wm]` +
|
|
163
|
+
`; [vmain][wm]overlay=W-w-24:H-h-16[vout]`;
|
|
164
|
+
videoMap = "[vout]";
|
|
165
|
+
}
|
|
131
166
|
const args = [
|
|
132
167
|
"ffmpeg",
|
|
133
168
|
"-y",
|
|
@@ -135,7 +170,7 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
|
|
|
135
170
|
"-filter_complex",
|
|
136
171
|
`"${filterComplex}"`,
|
|
137
172
|
"-map",
|
|
138
|
-
|
|
173
|
+
videoMap,
|
|
139
174
|
"-map",
|
|
140
175
|
"[aout]",
|
|
141
176
|
"-c:v",
|
|
@@ -151,9 +186,9 @@ function buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath) {
|
|
|
151
186
|
];
|
|
152
187
|
return args.join(" ");
|
|
153
188
|
}
|
|
154
|
-
function stitchAudio(videoPath, audioMatches, timingData, recordingsDir) {
|
|
189
|
+
function stitchAudio(videoPath, audioMatches, timingData, recordingsDir, applyWatermark = false) {
|
|
155
190
|
const outputPath = resolve(recordingsDir, "final.mp4");
|
|
156
|
-
const cmd = buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath);
|
|
191
|
+
const cmd = buildFfmpegCommand(videoPath, audioMatches, timingData, outputPath, applyWatermark);
|
|
157
192
|
console.log(`Stitching audio with ffmpeg...\n`);
|
|
158
193
|
try {
|
|
159
194
|
execSync(cmd, {
|
|
@@ -272,12 +307,15 @@ function formatDuration(ms) {
|
|
|
272
307
|
}
|
|
273
308
|
return `${seconds}s`;
|
|
274
309
|
}
|
|
275
|
-
function printSummary(videoPath, timingPath, finalPath, timingData) {
|
|
310
|
+
function printSummary(videoPath, timingPath, finalPath, timingData, voice) {
|
|
276
311
|
console.log("\n--- demofly generate summary ---\n");
|
|
277
312
|
if (videoPath) {
|
|
278
313
|
console.log(` Video: ${videoPath}`);
|
|
279
314
|
}
|
|
280
315
|
console.log(` Timing: ${timingPath}`);
|
|
316
|
+
if (voice) {
|
|
317
|
+
console.log(` Voice: ${voice.name} (${voice.provider})`);
|
|
318
|
+
}
|
|
281
319
|
if (finalPath) {
|
|
282
320
|
console.log(` Final: ${finalPath}`);
|
|
283
321
|
console.log(` Stitched: yes`);
|
|
@@ -322,32 +360,233 @@ function hasFfmpeg() {
|
|
|
322
360
|
return false;
|
|
323
361
|
}
|
|
324
362
|
}
|
|
363
|
+
function readVoiceMetadata(projectDir) {
|
|
364
|
+
const metaPath = resolve(projectDir, "audio", ".voice.json");
|
|
365
|
+
try {
|
|
366
|
+
if (!existsSync(metaPath))
|
|
367
|
+
return null;
|
|
368
|
+
return JSON.parse(readFileSync(metaPath, "utf-8"));
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function writeVoiceMetadata(projectDir, voice) {
|
|
375
|
+
const audioDir = resolve(projectDir, "audio");
|
|
376
|
+
if (!existsSync(audioDir))
|
|
377
|
+
mkdirSync(audioDir, { recursive: true });
|
|
378
|
+
writeFileSync(resolve(audioDir, ".voice.json"), JSON.stringify({ name: voice.name, provider: voice.provider, providerId: voice.providerId }, null, 2) + "\n");
|
|
379
|
+
}
|
|
380
|
+
function shouldRegenerateAudio(projectDir, resolvedVoice, explicitVoiceFlag, timingData) {
|
|
381
|
+
if (explicitVoiceFlag)
|
|
382
|
+
return true;
|
|
383
|
+
const audioDir = resolve(projectDir, "audio");
|
|
384
|
+
if (!existsSync(audioDir))
|
|
385
|
+
return true;
|
|
386
|
+
// Check if any scene has audio
|
|
387
|
+
const hasAny = timingData.scenes.some((s) => {
|
|
388
|
+
const wav = resolve(audioDir, `${s.sceneId}.wav`);
|
|
389
|
+
const mp3 = resolve(audioDir, `${s.sceneId}.mp3`);
|
|
390
|
+
return existsSync(wav) || existsSync(mp3);
|
|
391
|
+
});
|
|
392
|
+
if (!hasAny)
|
|
393
|
+
return true;
|
|
394
|
+
const meta = readVoiceMetadata(projectDir);
|
|
395
|
+
if (!meta)
|
|
396
|
+
return true;
|
|
397
|
+
return meta.name !== resolvedVoice.name || meta.provider !== resolvedVoice.provider;
|
|
398
|
+
}
|
|
399
|
+
function resolveVoiceForGenerate(voiceName, providerName) {
|
|
400
|
+
return resolveVoiceFromFlags(voiceName, providerName, {
|
|
401
|
+
getDefaultVoice,
|
|
402
|
+
getToken,
|
|
403
|
+
createApiClient,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
async function generateAudioForProject(narrationPath, projectDir, voice, speed, sceneFilter) {
|
|
407
|
+
console.log(`Generating TTS audio...`);
|
|
408
|
+
console.log(` Voice: ${voice.name} (${voice.provider})\n`);
|
|
409
|
+
let results;
|
|
410
|
+
let actualVoice = voice;
|
|
411
|
+
if (isCloudVoice(voice)) {
|
|
412
|
+
const cloudResult = await generateCloudTtsInline(narrationPath, projectDir, voice, speed, sceneFilter);
|
|
413
|
+
results = cloudResult.ttsResults;
|
|
414
|
+
actualVoice = cloudResult.actualVoice;
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
const ttsOpts = { voice: voice.providerId, speed, sceneFilter };
|
|
418
|
+
results = generateAllAudio(narrationPath, projectDir, ttsOpts);
|
|
419
|
+
}
|
|
420
|
+
if (results.length > 0) {
|
|
421
|
+
writeVoiceMetadata(projectDir, actualVoice);
|
|
422
|
+
}
|
|
423
|
+
return { ttsResults: results, actualVoice };
|
|
424
|
+
}
|
|
425
|
+
async function generateCloudTtsInline(narrationPath, projectDir, voice, speed, sceneFilter) {
|
|
426
|
+
const token = await getToken();
|
|
427
|
+
if (!token) {
|
|
428
|
+
return fallbackToKokoro(narrationPath, projectDir, speed, "Not authenticated.", sceneFilter);
|
|
429
|
+
}
|
|
430
|
+
const api = createApiClient(token);
|
|
431
|
+
try {
|
|
432
|
+
const sub = await getSubscriptionStatus(api);
|
|
433
|
+
if (sub.plan !== "pro") {
|
|
434
|
+
return fallbackToKokoro(narrationPath, projectDir, speed, `Premium voices require a Pro subscription. Upgrade at ${getAppUrl()}/upgrade`, sceneFilter);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
return fallbackToKokoro(narrationPath, projectDir, speed, "Cloud TTS unavailable.", sceneFilter);
|
|
439
|
+
}
|
|
440
|
+
const content = readFileSync(narrationPath, "utf-8");
|
|
441
|
+
let scenes = parseTranscript(content);
|
|
442
|
+
if (sceneFilter) {
|
|
443
|
+
scenes = scenes.filter(s => s.sceneId === sceneFilter);
|
|
444
|
+
}
|
|
445
|
+
if (scenes.length === 0)
|
|
446
|
+
return { ttsResults: [], actualVoice: voice };
|
|
447
|
+
const audioDir = resolve(projectDir, "audio");
|
|
448
|
+
if (!existsSync(audioDir))
|
|
449
|
+
mkdirSync(audioDir, { recursive: true });
|
|
450
|
+
const results = [];
|
|
451
|
+
for (const scene of scenes) {
|
|
452
|
+
console.log(` TTS: ${scene.sceneId} (${scene.text.length} chars)`);
|
|
453
|
+
try {
|
|
454
|
+
const start = performance.now();
|
|
455
|
+
const { audio, durationS } = await generateCloudAudio(scene.text, voice.providerId, voice.provider, api, { speed });
|
|
456
|
+
const elapsedS = (performance.now() - start) / 1000;
|
|
457
|
+
const outputPath = resolve(audioDir, `${scene.sceneId}.mp3`);
|
|
458
|
+
writeFileSync(outputPath, Buffer.from(audio));
|
|
459
|
+
results.push({ sceneId: scene.sceneId, filePath: outputPath, durationS, peakMemoryMb: 0, elapsedS });
|
|
460
|
+
console.log(` -> ${durationS.toFixed(1)}s audio, ${elapsedS.toFixed(1)}s elapsed`);
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
if (err.status === 403) {
|
|
464
|
+
return fallbackToKokoro(narrationPath, projectDir, speed, `Premium voices require a Pro subscription. Upgrade at ${getAppUrl()}/upgrade`, sceneFilter);
|
|
465
|
+
}
|
|
466
|
+
console.warn(` Cloud TTS failed for ${scene.sceneId}: ${err.message}`);
|
|
467
|
+
return fallbackToKokoro(narrationPath, projectDir, speed, "Cloud TTS unavailable, falling back to local voice.", sceneFilter);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return { ttsResults: results, actualVoice: voice };
|
|
471
|
+
}
|
|
472
|
+
function fallbackToKokoro(narrationPath, projectDir, speed, reason, sceneFilter) {
|
|
473
|
+
console.warn(`${reason} Falling back to Kokoro.\n`);
|
|
474
|
+
const ttsResults = generateAllAudio(narrationPath, projectDir, {
|
|
475
|
+
voice: KOKORO_VOICES[0].kokoroId,
|
|
476
|
+
speed,
|
|
477
|
+
sceneFilter,
|
|
478
|
+
});
|
|
479
|
+
return { ttsResults, actualVoice: KOKORO_DEFAULT_VOICE };
|
|
480
|
+
}
|
|
325
481
|
export function registerGenerateCommand(program) {
|
|
326
482
|
program
|
|
327
|
-
.command("generate <
|
|
328
|
-
.description("
|
|
483
|
+
.command("generate <demo>")
|
|
484
|
+
.description("Record, narrate, and assemble a demo video")
|
|
329
485
|
.option("--record", "Run Playwright recording before assembly")
|
|
330
|
-
.option("--
|
|
331
|
-
.
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
486
|
+
.option("--audio", "Generate audio only (skip recording and assembly)")
|
|
487
|
+
.option("--timestamps", "Run Whisper on audio files, produce timestamps.json")
|
|
488
|
+
.option("--align", "Produce alignment.json from timestamps + timing data")
|
|
489
|
+
.option("--assemble", "Full intelligent assembly (align + edit proposals + retiming)")
|
|
490
|
+
.option("--video", "Record video only (skip audio generation)")
|
|
491
|
+
.option("--scene <id>", "Generate audio for a specific scene only")
|
|
492
|
+
.option("--voice <name>", "TTS voice name")
|
|
493
|
+
.option("--provider <provider>", "TTS provider (e.g., elevenlabs, openai, kokoro)")
|
|
494
|
+
.option("--speed <multiplier>", "TTS speed multiplier", "1.0")
|
|
495
|
+
.option("--no-audio", "Skip TTS generation entirely")
|
|
496
|
+
.action(async (demo, opts) => {
|
|
497
|
+
const projectDir = resolve(process.cwd(), "demofly", demo);
|
|
338
498
|
debug(`Resolved demo directory: ${projectDir}`);
|
|
339
499
|
// Step 1: Validate artifacts exist
|
|
340
|
-
if (!validateDemoArtifacts(projectDir,
|
|
500
|
+
if (!validateDemoArtifacts(projectDir, demo)) {
|
|
341
501
|
process.exit(1);
|
|
342
502
|
}
|
|
343
503
|
const recordingsDir = ensureRecordingsDir(projectDir);
|
|
504
|
+
// Flag validation
|
|
505
|
+
if (opts.audio === true && opts.video) {
|
|
506
|
+
console.error("--audio and --video cannot be used together. Use one or run without either for the full pipeline.");
|
|
507
|
+
process.exit(1);
|
|
508
|
+
}
|
|
509
|
+
if (opts.video && opts.scene) {
|
|
510
|
+
console.warn("Warning: --scene has no effect with --video. Scene filtering only applies to audio generation.\n");
|
|
511
|
+
}
|
|
512
|
+
// Audio-only mode: generate TTS and exit
|
|
513
|
+
if (opts.audio === true) {
|
|
514
|
+
// Resolve narration source: prefer narration.md, fall back to transcript.md
|
|
515
|
+
const narrationPath = resolve(projectDir, "narration.md");
|
|
516
|
+
const legacyTranscriptPath = resolve(projectDir, "transcript.md");
|
|
517
|
+
const sourcePath = existsSync(narrationPath) ? narrationPath : legacyTranscriptPath;
|
|
518
|
+
if (!existsSync(sourcePath)) {
|
|
519
|
+
console.error("No narration.md found. Create a narration script to generate audio.");
|
|
520
|
+
process.exit(1);
|
|
521
|
+
}
|
|
522
|
+
const speed = parseFloat(opts.speed);
|
|
523
|
+
const voice = await resolveVoiceForGenerate(opts.voice, opts.provider);
|
|
524
|
+
const { ttsResults, actualVoice } = await generateAudioForProject(sourcePath, projectDir, voice, speed, opts.scene);
|
|
525
|
+
console.log("\n--- demofly generate --audio summary ---\n");
|
|
526
|
+
console.log(` Voice: ${actualVoice.name} (${actualVoice.provider})`);
|
|
527
|
+
console.log(` Generated: ${ttsResults.length} scene(s)`);
|
|
528
|
+
if (opts.scene) {
|
|
529
|
+
console.log(` Scene: ${opts.scene}`);
|
|
530
|
+
}
|
|
531
|
+
console.log();
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
// Timestamps-only mode: run Whisper on existing audio and exit
|
|
535
|
+
if (opts.timestamps) {
|
|
536
|
+
const audioDir = resolve(projectDir, "audio");
|
|
537
|
+
if (!existsSync(audioDir)) {
|
|
538
|
+
console.error(`No audio directory found. Run \`demofly generate ${demo} --audio\` first to generate audio.`);
|
|
539
|
+
process.exit(1);
|
|
540
|
+
}
|
|
541
|
+
console.log("Extracting timestamps from audio files...\n");
|
|
542
|
+
const tsData = extractTimestamps(projectDir);
|
|
543
|
+
console.log("\n--- demofly generate --timestamps summary ---\n");
|
|
544
|
+
console.log(` Scenes: ${tsData.scenes.length}`);
|
|
545
|
+
for (const s of tsData.scenes) {
|
|
546
|
+
console.log(` ${s.sceneId}: ${s.durationMs}ms, ${s.words.length} words, ${s.phrases.length} phrases`);
|
|
547
|
+
}
|
|
548
|
+
console.log();
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
// Align-only mode: produce alignment.json and exit
|
|
552
|
+
if (opts.align && !opts.assemble) {
|
|
553
|
+
console.log("Building alignment from timestamps + timing data...\n");
|
|
554
|
+
const alignment = buildAndWriteAlignment(projectDir);
|
|
555
|
+
if (!alignment) {
|
|
556
|
+
process.exit(1);
|
|
557
|
+
}
|
|
558
|
+
console.log("\n--- demofly generate --align summary ---\n");
|
|
559
|
+
console.log(` Beats: ${alignment.summary.totalBeats}`);
|
|
560
|
+
console.log(` Aligned: ${alignment.summary.aligned}`);
|
|
561
|
+
console.log(` Adjustments: ${alignment.summary.needsAdjustment}`);
|
|
562
|
+
console.log(` Critical: ${alignment.summary.critical}`);
|
|
563
|
+
console.log(` Max drift: ${alignment.summary.maxDriftMs}ms`);
|
|
564
|
+
console.log();
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
// Video-only mode: record and exit
|
|
568
|
+
if (opts.video) {
|
|
569
|
+
debug("Video-only mode: running Playwright test");
|
|
570
|
+
const result = recordDemo(projectDir, demo);
|
|
571
|
+
const videoPath = result.videoPath
|
|
572
|
+
? resolve(recordingsDir, "video.webm")
|
|
573
|
+
: null;
|
|
574
|
+
const timingData = parseTimingMarkers(result.stdout);
|
|
575
|
+
const timingPath = resolve(recordingsDir, "timing.json");
|
|
576
|
+
if (timingData.scenes.length === 0) {
|
|
577
|
+
console.warn("Warning: No DEMOFLY timing markers found in test output. Video was still recorded.");
|
|
578
|
+
}
|
|
579
|
+
printSummary(videoPath, timingPath, null, timingData, null);
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
// Full pipeline
|
|
344
583
|
let videoPath = null;
|
|
345
584
|
let timingData;
|
|
346
585
|
let timingPath;
|
|
347
586
|
// Step 2: Record or use existing artifacts
|
|
348
587
|
if (opts.record) {
|
|
349
588
|
debug("Recording mode: running Playwright test");
|
|
350
|
-
const result = recordDemo(projectDir,
|
|
589
|
+
const result = recordDemo(projectDir, demo);
|
|
351
590
|
videoPath = result.videoPath
|
|
352
591
|
? resolve(recordingsDir, "video.webm")
|
|
353
592
|
: null;
|
|
@@ -375,7 +614,7 @@ export function registerGenerateCommand(program) {
|
|
|
375
614
|
console.warn(missingMsg);
|
|
376
615
|
const shouldRecord = await promptYesNo("No existing artifacts found. Run Playwright recording now?");
|
|
377
616
|
if (shouldRecord) {
|
|
378
|
-
const result = recordDemo(projectDir,
|
|
617
|
+
const result = recordDemo(projectDir, demo);
|
|
379
618
|
videoPath = result.videoPath
|
|
380
619
|
? resolve(recordingsDir, "video.webm")
|
|
381
620
|
: null;
|
|
@@ -391,7 +630,7 @@ export function registerGenerateCommand(program) {
|
|
|
391
630
|
}
|
|
392
631
|
}
|
|
393
632
|
else {
|
|
394
|
-
console.error(`${missingMsg}\nRun \`demofly generate ${
|
|
633
|
+
console.error(`${missingMsg}\nRun \`demofly generate ${demo} --record\` to record artifacts first.`);
|
|
395
634
|
process.exit(1);
|
|
396
635
|
}
|
|
397
636
|
// If we fell through from the prompt path, videoPath/timingData are set above.
|
|
@@ -411,7 +650,54 @@ export function registerGenerateCommand(program) {
|
|
|
411
650
|
timingPath = timingPath;
|
|
412
651
|
}
|
|
413
652
|
}
|
|
414
|
-
//
|
|
653
|
+
// Validate --scene if provided
|
|
654
|
+
if (opts.scene) {
|
|
655
|
+
const validIds = timingData.scenes.map(s => s.sceneId);
|
|
656
|
+
if (!validIds.includes(opts.scene)) {
|
|
657
|
+
console.error(`Scene "${opts.scene}" not found. Available scenes: ${validIds.join(", ")}`);
|
|
658
|
+
process.exit(1);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
// Step 3: Generate TTS audio if needed
|
|
662
|
+
let voiceUsed = null;
|
|
663
|
+
const narrationPath = resolve(projectDir, "narration.md");
|
|
664
|
+
const legacyTranscriptPath = resolve(projectDir, "transcript.md");
|
|
665
|
+
const narrationSourcePath = existsSync(narrationPath) ? narrationPath : legacyTranscriptPath;
|
|
666
|
+
if (opts.audio !== false && existsSync(narrationSourcePath)) {
|
|
667
|
+
const speed = parseFloat(opts.speed);
|
|
668
|
+
const voice = await resolveVoiceForGenerate(opts.voice, opts.provider);
|
|
669
|
+
const explicitVoiceFlag = !!(opts.voice || opts.provider);
|
|
670
|
+
if (opts.scene || shouldRegenerateAudio(projectDir, voice, explicitVoiceFlag, timingData)) {
|
|
671
|
+
const { ttsResults, actualVoice } = await generateAudioForProject(narrationSourcePath, projectDir, voice, speed, opts.scene);
|
|
672
|
+
if (ttsResults.length > 0) {
|
|
673
|
+
voiceUsed = actualVoice;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
debug("Audio in sync with voice selection, skipping TTS");
|
|
678
|
+
voiceUsed = voice;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
else if (opts.audio === false) {
|
|
682
|
+
debug("--no-audio: skipping TTS generation");
|
|
683
|
+
}
|
|
684
|
+
// Step 4: Determine if watermark should be applied (free-tier users)
|
|
685
|
+
let applyWatermark = true; // default to watermark for safety
|
|
686
|
+
try {
|
|
687
|
+
const token = await getToken();
|
|
688
|
+
if (token) {
|
|
689
|
+
const api = createApiClient(token);
|
|
690
|
+
const sub = await getSubscriptionStatus(api);
|
|
691
|
+
applyWatermark = sub.plan !== "pro";
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
catch {
|
|
695
|
+
debug("Could not check subscription for watermark — defaulting to watermark");
|
|
696
|
+
}
|
|
697
|
+
if (applyWatermark) {
|
|
698
|
+
debug("Applying DemoFly watermark (free tier)");
|
|
699
|
+
}
|
|
700
|
+
// Step 5: Find audio files and check ffmpeg
|
|
415
701
|
const { matched, missing } = findAudioFiles(projectDir, timingData);
|
|
416
702
|
debug(`Audio files: ${matched.length} matched, ${missing.length} missing`);
|
|
417
703
|
let finalPath = null;
|
|
@@ -423,16 +709,49 @@ export function registerGenerateCommand(program) {
|
|
|
423
709
|
if (missing.length > 0) {
|
|
424
710
|
console.warn(`Warning: No audio files found for scenes: ${missing.join(", ")}`);
|
|
425
711
|
}
|
|
426
|
-
|
|
712
|
+
if (opts.assemble) {
|
|
713
|
+
// Intelligent assembly: align → edit proposals → retiming
|
|
714
|
+
console.log("Running intelligent assembly pipeline...\n");
|
|
715
|
+
// Step 4a: Build alignment
|
|
716
|
+
console.log(" Step 1: Building alignment...");
|
|
717
|
+
const alignment = buildAndWriteAlignment(projectDir);
|
|
718
|
+
if (alignment) {
|
|
719
|
+
// Step 4b: Generate edit proposals
|
|
720
|
+
console.log(" Step 2: Generating edit proposals...");
|
|
721
|
+
const proposals = generateAndWriteEditProposals(projectDir);
|
|
722
|
+
if (proposals && proposals.decisions.length > 0) {
|
|
723
|
+
// Step 4c: Retiming + assembly
|
|
724
|
+
console.log(" Step 3: Retiming and assembling...\n");
|
|
725
|
+
const audioDir = resolve(projectDir, "audio");
|
|
726
|
+
finalPath = retimeAndAssemble(videoPath, audioDir, timingData, proposals, recordingsDir);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
// Fall back to simple stitch if intelligent assembly failed
|
|
730
|
+
if (!finalPath) {
|
|
731
|
+
console.log(" Intelligent assembly incomplete, falling back to simple stitch.\n");
|
|
732
|
+
finalPath = stitchAudio(videoPath, matched, timingData, recordingsDir, applyWatermark);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
// Simple stitch (default)
|
|
737
|
+
finalPath = stitchAudio(videoPath, matched, timingData, recordingsDir, applyWatermark);
|
|
738
|
+
}
|
|
427
739
|
}
|
|
428
740
|
else if (videoPath) {
|
|
429
741
|
// No audio — copy or convert video as final output
|
|
430
742
|
if (hasFfmpeg()) {
|
|
431
|
-
// Convert webm to mp4 for compatibility
|
|
432
743
|
const outputPath = resolve(recordingsDir, "final.mp4");
|
|
433
744
|
console.log("No audio files found. Converting video to mp4...\n");
|
|
434
745
|
try {
|
|
435
|
-
|
|
746
|
+
const watermarkPath = getWatermarkPath();
|
|
747
|
+
if (applyWatermark && existsSync(watermarkPath)) {
|
|
748
|
+
execSync(`ffmpeg -y -i "${videoPath}" -i "${watermarkPath}" ` +
|
|
749
|
+
`-filter_complex "[1:v][0:v]scale2ref=w=main_w*0.08:h=-1[wm_scaled][vmain];[wm_scaled]format=rgba,colorchannelmixer=aa=0.6[wm];[vmain][wm]overlay=W-w-24:H-h-16[vout]" ` +
|
|
750
|
+
`-map "[vout]" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p "${outputPath}"`, { encoding: "utf-8", timeout: 600_000, stdio: ["pipe", "pipe", "pipe"] });
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
execSync(`ffmpeg -y -i "${videoPath}" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p "${outputPath}"`, { encoding: "utf-8", timeout: 600_000, stdio: ["pipe", "pipe", "pipe"] });
|
|
754
|
+
}
|
|
436
755
|
finalPath = outputPath;
|
|
437
756
|
}
|
|
438
757
|
catch (error) {
|
|
@@ -454,7 +773,7 @@ export function registerGenerateCommand(program) {
|
|
|
454
773
|
else if (!videoPath) {
|
|
455
774
|
console.warn("Warning: No recorded video found. Skipping assembly.");
|
|
456
775
|
}
|
|
457
|
-
// Step
|
|
776
|
+
// Step 5: Split scenes and extract thumbnails
|
|
458
777
|
if (videoPath && timingData.scenes.length > 0 && hasFfmpeg()) {
|
|
459
778
|
console.log("Splitting video into per-scene clips...\n");
|
|
460
779
|
const sceneClips = splitScenes(videoPath, timingData, recordingsDir);
|
|
@@ -466,16 +785,8 @@ export function registerGenerateCommand(program) {
|
|
|
466
785
|
else if (videoPath && timingData.scenes.length > 0 && !hasFfmpeg()) {
|
|
467
786
|
console.warn("Warning: ffmpeg not available. Skipping scene splitting and thumbnail extraction.");
|
|
468
787
|
}
|
|
469
|
-
// Step
|
|
470
|
-
printSummary(videoPath, timingPath, finalPath, timingData);
|
|
788
|
+
// Step 6: Print summary
|
|
789
|
+
printSummary(videoPath, timingPath, finalPath, timingData, voiceUsed);
|
|
471
790
|
});
|
|
472
|
-
// Hide the --narrate option from help output
|
|
473
|
-
const generateCmd = program.commands.find((c) => c.name() === "generate");
|
|
474
|
-
if (generateCmd) {
|
|
475
|
-
const narrateOpt = generateCmd.options.find((o) => o.long === "--narrate");
|
|
476
|
-
if (narrateOpt) {
|
|
477
|
-
narrateOpt.hidden = true;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
791
|
}
|
|
481
792
|
//# sourceMappingURL=generate.js.map
|