@tikagent/video-editor-cli 0.0.0-stage → 1.5.0-preview.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.
Files changed (87) hide show
  1. package/LICENSE +82 -0
  2. package/THIRD-PARTY-NOTICES.md +21 -0
  3. package/dist/bin/tik-video-editor-cli.js +2 -0
  4. package/dist/lib/asr.js +1 -0
  5. package/dist/lib/audio.js +1 -0
  6. package/dist/lib/auth.js +1 -0
  7. package/dist/lib/browser-zip.js +1 -0
  8. package/dist/lib/browser.js +1 -0
  9. package/dist/lib/cli.js +1 -0
  10. package/dist/lib/doctor.js +1 -0
  11. package/dist/lib/download.js +1 -0
  12. package/dist/lib/export-progress.js +1 -0
  13. package/dist/lib/import-video.js +1 -0
  14. package/dist/lib/local.js +1 -0
  15. package/dist/lib/media.js +1 -0
  16. package/dist/lib/operation.js +1 -0
  17. package/dist/lib/otlp.js +1 -0
  18. package/dist/lib/preset.js +1 -0
  19. package/dist/lib/processes.js +1 -0
  20. package/dist/lib/self.js +1 -0
  21. package/dist/lib/service-urls.js +1 -0
  22. package/dist/lib/storage.js +1 -0
  23. package/dist/lib/telemetry.js +1 -0
  24. package/dist/runtime/LICENSE +21 -0
  25. package/dist/runtime/analyze.js +1 -0
  26. package/dist/runtime/app.js +1 -0
  27. package/dist/runtime/cli/lib/browser-zip.js +1 -0
  28. package/dist/runtime/cli/lib/browser.js +1 -0
  29. package/dist/runtime/cli/lib/otlp.js +1 -0
  30. package/dist/runtime/cli/lib/processes.js +1 -0
  31. package/dist/runtime/cli/lib/telemetry.js +1 -0
  32. package/dist/runtime/export-audio.js +1 -0
  33. package/dist/runtime/export-cache.js +1 -0
  34. package/dist/runtime/export-encoder.js +1 -0
  35. package/dist/runtime/export-save.js +1 -0
  36. package/dist/runtime/export-worker.js +1 -0
  37. package/dist/runtime/favicon.svg +14 -0
  38. package/dist/runtime/i18n.js +1 -0
  39. package/dist/runtime/icons/favicon-32.png +0 -0
  40. package/dist/runtime/icons/tik-logo.png +0 -0
  41. package/dist/runtime/index.html +320 -0
  42. package/dist/runtime/library/README.md +12 -0
  43. package/dist/runtime/library/elements/bokeh-drift.svg +19 -0
  44. package/dist/runtime/library/elements/light-leak-cool.svg +16 -0
  45. package/dist/runtime/library/elements/light-leak-warm.svg +22 -0
  46. package/dist/runtime/library/elements/vhs-scanlines.svg +18 -0
  47. package/dist/runtime/library/elements/vignette-frame.svg +14 -0
  48. package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/344/270/255/351/273/221.woff2 +0 -0
  49. package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/345/270/270/350/247/204.woff2 +0 -0
  50. package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/347/262/227/344/275/223.woff2 +0 -0
  51. package/dist/runtime/library/sfx/README.md +13 -0
  52. package/dist/runtime/library/svg/arrow-bounce.svg +18 -0
  53. package/dist/runtime/library/svg/arrow-scribble.svg +13 -0
  54. package/dist/runtime/library/svg/burst-lines.svg +30 -0
  55. package/dist/runtime/library/svg/checkmark-success.svg +19 -0
  56. package/dist/runtime/library/svg/confetti-burst.svg +23 -0
  57. package/dist/runtime/library/svg/countdown-ring.svg +92 -0
  58. package/dist/runtime/library/svg/equalizer.svg +18 -0
  59. package/dist/runtime/library/svg/glow-orbs.svg +29 -0
  60. package/dist/runtime/library/svg/heart-pop.svg +26 -0
  61. package/dist/runtime/library/svg/loading-dots.svg +16 -0
  62. package/dist/runtime/library/svg/location-pin.svg +25 -0
  63. package/dist/runtime/library/svg/lower-third.svg +17 -0
  64. package/dist/runtime/library/svg/new-badge.svg +18 -0
  65. package/dist/runtime/library/svg/progress-bar.svg +16 -0
  66. package/dist/runtime/library/svg/radial-pulse.svg +19 -0
  67. package/dist/runtime/library/svg/rating-stars.svg +25 -0
  68. package/dist/runtime/library/svg/rec-indicator.svg +41 -0
  69. package/dist/runtime/library/svg/sparkles.svg +17 -0
  70. package/dist/runtime/library/svg/speech-bubble.svg +23 -0
  71. package/dist/runtime/library/svg/subscribe-bell.svg +29 -0
  72. package/dist/runtime/library/svg/subscribe-pill.svg +22 -0
  73. package/dist/runtime/library/svg/swipe-up.svg +46 -0
  74. package/dist/runtime/library/svg/underline-swoosh.svg +15 -0
  75. package/dist/runtime/manifest.json +40 -0
  76. package/dist/runtime/meter-worklet.js +1 -0
  77. package/dist/runtime/optimized-encoder-worker.js +1 -0
  78. package/dist/runtime/optimized-export.js +1 -0
  79. package/dist/runtime/paths.js +1 -0
  80. package/dist/runtime/project-store.js +1 -0
  81. package/dist/runtime/ruler-worker.js +1 -0
  82. package/dist/runtime/server.js +1 -0
  83. package/dist/runtime/style.css +2126 -0
  84. package/dist/runtime/timeline.js +1 -0
  85. package/dist/runtime/waveform.js +1 -0
  86. package/package.json +36 -4
  87. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ !function(t){const r=function(){"use strict";const t=1e-9,r=t=>"audio"===t.kind?"audio":"video",i=t=>t.start+t.duration,e=(r,e)=>r.start<i(e)-t&&e.start<i(r)-t,s=t=>"string"==typeof t&&/^[VA][1-9]\d*$/.test(t)&&Number.isSafeInteger(+t.slice(1)),n=t=>"A"===t[0]?"audio":"video";function a(t,r){const i="audio"===r?"A":"V",e=t.reduce((t,i)=>i.kind===r?Math.max(t,+i.id.slice(1)):t,0)+1;if(!Number.isSafeInteger(e))throw new Error("Track identifier exhausted");return i+e}function o(t,r,i){t.tracks||=[];const e={id:a(t.tracks,r),kind:r};let s=t.tracks.findIndex(t=>t.id===i);return s<0&&(s="video"===r?t.tracks.findIndex(t=>"audio"===t.kind):t.tracks.length),s<0&&(s=t.tracks.length),t.tracks.splice(s,0,e),e.id}return{EPS:t,kindOf:r,overlaps:e,normalize:function(a){if(!a||!Array.isArray(a.clips))return a;const d=[],c=new Set;if(void 0!==a.tracks&&!Array.isArray(a.tracks))throw new Error("tracks must be an array");for(const t of a.tracks||[]){if(!t||!s(t.id)||t.kind!==n(t.id)||c.has(t.id))throw new Error("Invalid or duplicate track");if(null!=t.name&&"string"!=typeof t.name)throw new Error("Track name must be a string");c.add(t.id);const r={id:t.id,kind:t.kind};"string"==typeof t.name&&t.name.trim()&&(r.name=t.name.trim()),d.push(r)}const l=new Set;for(const t of a.clips){if(!s(t.track)||n(t.track)!==r(t))throw new Error(`Invalid track for clip ${t.id||"?"}`);if(!Number.isFinite(t.start)||t.start<0||!Number.isFinite(t.duration)||t.duration<=0)throw new Error(`Invalid timing for clip ${t.id||"?"}`);c.has(t.track)||l.add(t.track)}for(const t of a.disabledTracks||[])s(t)&&!c.has(t)&&l.add(t);const f=[...l].sort((t,r)=>t[0]===r[0]?"V"===t[0]?+r.slice(1)-+t.slice(1):+t.slice(1)-+r.slice(1):"V"===t[0]?-1:1);for(const t of f){const r=n(t);let i=d.findIndex(i=>"video"===r&&("audio"===i.kind||+i.id.slice(1)<+t.slice(1)));i<0&&(i=d.length),d.splice(i,0,{id:t,kind:r}),c.add(t)}if(d.some((t,r)=>"video"===t.kind&&d.slice(0,r).some(t=>"audio"===t.kind)))throw new Error("Video tracks must precede audio tracks");a.tracks=d;const k=new Set(a.disabledTracks||[]),u=new Map;for(const t of a.clips)u.has(t.track)||u.set(t.track,[]),u.get(t.track).push(t);for(const r of[...d]){const s=(u.get(r.id)||[]).sort((t,r)=>t.start-r.start);let n=[];const d=[r.id];for(const c of s){n=n.filter(r=>i(r.clip)>c.start+t);let s=0;for(const t of n)e(c,t.clip)&&(s=Math.max(s,t.level+1));for(;d.length<=s;){const t=o(a,r.kind,"video"===r.kind?d[d.length-1]:void 0);d.push(t),k.has(r.id)&&k.add(t)}c.track=d[s],n.push({clip:c,level:s})}}return(void 0!==a.disabledTracks||k.size)&&(a.disabledTracks=[...k].filter(t=>c.has(t)||d.some(r=>r.id===t))),a},insertTrack:o,firstGap:function(r,e,s,n,a=new Set){let o=Math.max(0,s);const d=r.filter(t=>t.track===e&&!a.has(t.id)).sort((t,r)=>t.start-r.start);for(const r of d){if(o+n<=r.start+t)break;o<i(r)-t&&(o=i(r))}return o},freeTrack:function(t,r,i,s,n,a=new Set){const d=r=>!t.clips.some(t=>t.track===r&&!a.has(t.id)&&e(t,{start:i,duration:s}));if(t.tracks.some(t=>t.id===n&&t.kind===r)&&d(n))return n;const c=t.tracks.find(i=>i.kind===r&&!(t.disabledTracks||[]).includes(i.id)&&d(i.id));return c?c.id:o(t,r)}}}();"object"==typeof module&&module.exports?module.exports=r:t.FableCutTimeline=r}("object"==typeof globalThis?globalThis:this);
@@ -0,0 +1 @@
1
+ "use strict";const e=require("node:fs").promises,r=require("node:path"),s=require("node:crypto"),{spawn:t}=require("node:child_process"),{localMedia:a,command:o}=require("./export-cache");function i(e,r){return Object.assign(new Error(e),{status:r})}async function n(e){const r=JSON.parse(await o("ffprobe",["-v","error","-select_streams","a:0","-show_entries","stream=channels","-of","json",e])),s=r.streams?.[0]?.channels;if(!Number.isInteger(s)||s<1)throw i("source has no audio stream",422);return s}module.exports={Waveforms:class{constructor({libraryDir:e}){this.libraryDir=e,this.jobs=new Map,this.queue=Promise.resolve()}async channels(e,r){return n(await a(e,this.libraryDir,r))}async peaks(o,c){const u=await a(o,this.libraryDir,c),l=await e.stat(u),f=s.createHash("sha256").update(`1|${u}|${l.size}|${l.mtimeMs}`).digest("hex"),h=r.join(o.analysisDir,"waveforms",f+".json");try{return JSON.parse(await e.readFile(h,"utf8"))}catch{}if(!this.jobs.has(h)){const s=this.queue.then(async()=>{const s=await function(e,r){return new Promise((s,a)=>{const o=t("ffmpeg",["-v","error","-nostdin","-i",e,"-map","0:a:0","-af","aresample=8000:async=1:first_pts=0","-f","s16le","-acodec","pcm_s16le","-"],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),n=2*r,c=Array.from({length:r},()=>[]),u=new Array(r).fill(0);let l,f=Buffer.alloc(0),h=0,m="";const d=()=>{for(let e=0;e<r;e++)c[e].push(Math.min(255,Math.round(u[e]/32768*255))),u[e]=0},p=setTimeout(()=>{l=new Error("ffmpeg waveform timed out"),o.kill("SIGKILL")},6e5);o.stdout.on("data",e=>{const s=f.length?Buffer.concat([f,e]):e,t=s.length-s.length%n;for(let e=0;e<t;e+=n){for(let t=0;t<r;t++){const r=Math.abs(s.readInt16LE(e+2*t));r>u[t]&&(u[t]=r)}++h%160==0&&d()}f=Buffer.from(s.subarray(t))}),o.stderr.on("data",e=>{m=(m+e).slice(-4e3)}),o.on("error",e=>{l=e}),o.on("close",e=>(clearTimeout(p),l||0!==e?a(l||new Error(m||"ffmpeg waveform failed")):h?(h%160&&d(),void s({version:1,peaksPerSecond:50,duration:h/8e3,channels:r,peaks:c.map(e=>Buffer.from(Uint8Array.from(e)).toString("base64"))})):a(i("source has no decodable audio",422))))})}(u,await n(u));await e.mkdir(r.dirname(h),{recursive:!0});const a=`${h}.${process.pid}.tmp`;return await e.writeFile(a,JSON.stringify(s)),await e.rename(a,h),s}).finally(()=>this.jobs.delete(h));this.queue=s.catch(()=>{}),this.jobs.set(h,s)}return this.jobs.get(h)}},PEAKS_PER_SECOND:50,SAMPLE_RATE:8e3};
package/package.json CHANGED
@@ -1,6 +1,38 @@
1
1
  {
2
2
  "name": "@tikagent/video-editor-cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.5.0-preview.2",
4
+ "description": "Local video editing, on-demand preview, and headless",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "type": "commonjs",
7
+ "bin": {
8
+ "tik-video-editor-cli": "dist/bin/tik-video-editor-cli.js"
9
+ },
10
+ "publishConfig": {
11
+ "registry": "https://registry.npmjs.org/",
12
+ "access": "public"
13
+ },
14
+ "files": [
15
+ "dist/",
16
+ "LICENSE",
17
+ "THIRD-PARTY-NOTICES.md"
18
+ ],
19
+ "scripts": {
20
+ "next": "node scripts/next-version.js",
21
+ "sync-runtime": "node scripts/pack-runtime.js",
22
+ "build": "node scripts/build-package.js",
23
+ "prepare": "node -e \"const fs=require('node:fs');const {execFileSync}=require('node:child_process');if(fs.existsSync('lib/cli.js')){execFileSync(process.execPath,['scripts/build-package.js'],{stdio:'inherit'})}else{for(const file of ['dist/bin/tik-video-editor-cli.js','dist/runtime/server.js']){if(!fs.existsSync(file)){console.error('Incomplete CLI distribution: '+file);process.exit(1)}}}\""
24
+ },
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "keywords": [
29
+ "tik",
30
+ "video-editor",
31
+ "cli",
32
+ "headless-export"
33
+ ],
34
+ "devDependencies": {
35
+ "javascript-obfuscator": "5.8.1",
36
+ "terser": "5.51.2"
37
+ }
38
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.