@gannochenko/staticstripes 0.0.22 → 0.0.24

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 (56) hide show
  1. package/Makefile +8 -0
  2. package/dist/app-builder.d.ts +18 -0
  3. package/dist/app-builder.d.ts.map +1 -0
  4. package/dist/app-builder.js +94 -0
  5. package/dist/app-builder.js.map +1 -0
  6. package/dist/cli/commands/filters.d.ts +3 -0
  7. package/dist/cli/commands/filters.d.ts.map +1 -0
  8. package/dist/cli/commands/filters.js +21 -0
  9. package/dist/cli/commands/filters.js.map +1 -0
  10. package/dist/cli/commands/generate.d.ts.map +1 -1
  11. package/dist/cli/commands/generate.js +6 -1
  12. package/dist/cli/commands/generate.js.map +1 -1
  13. package/dist/cli/instagram/instagram-upload-strategy.d.ts +5 -0
  14. package/dist/cli/instagram/instagram-upload-strategy.d.ts.map +1 -1
  15. package/dist/cli/instagram/instagram-upload-strategy.js +46 -3
  16. package/dist/cli/instagram/instagram-upload-strategy.js.map +1 -1
  17. package/dist/cli.js +2 -0
  18. package/dist/cli.js.map +1 -1
  19. package/dist/ffmpeg.d.ts +32 -0
  20. package/dist/ffmpeg.d.ts.map +1 -1
  21. package/dist/ffmpeg.js +118 -0
  22. package/dist/ffmpeg.js.map +1 -1
  23. package/dist/html-project-parser.d.ts +36 -1
  24. package/dist/html-project-parser.d.ts.map +1 -1
  25. package/dist/html-project-parser.js +332 -15
  26. package/dist/html-project-parser.js.map +1 -1
  27. package/dist/project.d.ts +4 -1
  28. package/dist/project.d.ts.map +1 -1
  29. package/dist/project.js +50 -1
  30. package/dist/project.js.map +1 -1
  31. package/dist/sample-sequences.d.ts.map +1 -1
  32. package/dist/sample-sequences.js +293 -0
  33. package/dist/sample-sequences.js.map +1 -1
  34. package/dist/sequence.d.ts +4 -1
  35. package/dist/sequence.d.ts.map +1 -1
  36. package/dist/sequence.js +71 -21
  37. package/dist/sequence.js.map +1 -1
  38. package/dist/stream.d.ts +17 -0
  39. package/dist/stream.d.ts.map +1 -1
  40. package/dist/stream.js +28 -0
  41. package/dist/stream.js.map +1 -1
  42. package/dist/type.d.ts +29 -2
  43. package/dist/type.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/app-builder.ts +113 -0
  46. package/src/cli/commands/filters.ts +21 -0
  47. package/src/cli/commands/generate.ts +10 -1
  48. package/src/cli/instagram/instagram-upload-strategy.ts +61 -1
  49. package/src/cli.ts +2 -0
  50. package/src/ffmpeg.ts +161 -0
  51. package/src/html-project-parser.ts +410 -28
  52. package/src/project.ts +62 -0
  53. package/src/sample-sequences.ts +300 -0
  54. package/src/sequence.ts +78 -22
  55. package/src/stream.ts +50 -0
  56. package/src/type.ts +31 -2
package/src/type.ts CHANGED
@@ -47,7 +47,7 @@ export type Fragment = {
47
47
  id: string;
48
48
  enabled: boolean;
49
49
  assetName: string;
50
- duration: number; // calculated, in seconds (can come from CSS or from the asset's duration)
50
+ duration: number | CompiledExpression; // calculated, in seconds (can come from CSS or from the asset's duration, or be a calc() expression)
51
51
  trimLeft: number; // in seconds (skip first N seconds of asset via -trim-start)
52
52
  overlayLeft: number | CompiledExpression; // amount of seconds to overlay with the previous fragment (normalized from margin-left + prev margin-right)
53
53
  overlayZIndex: number;
@@ -55,17 +55,28 @@ export type Fragment = {
55
55
  transitionInDuration: number; // how long the transition in lasts
56
56
  transitionOut: string; // how to transition out of the fragment
57
57
  transitionOutDuration: number; // how long the transition out lasts
58
- objectFit: 'cover' | 'contain';
58
+ objectFit: 'cover' | 'contain' | 'ken-burns';
59
59
  objectFitContain: 'ambient' | 'pillarbox';
60
60
  objectFitContainAmbientBlurStrength: number;
61
61
  objectFitContainAmbientBrightness: number;
62
62
  objectFitContainAmbientSaturation: number;
63
63
  objectFitContainPillarboxColor: string;
64
+ objectFitKenBurns: 'zoom-in' | 'zoom-out' | 'pan-left' | 'pan-right' | 'pan-top' | 'pan-bottom';
65
+ objectFitKenBurnsZoom: number; // zoom percentage (e.g., 30 = 30% zoom, applies to all effects)
66
+ objectFitKenBurnsEffectDuration: number; // duration of the ken burns effect in milliseconds
67
+ objectFitKenBurnsEasing: 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out';
68
+ objectFitKenBurnsFocalX: number; // focal point X in percent (0-100, for zoom effects)
69
+ objectFitKenBurnsFocalY: number; // focal point Y in percent (0-100, for zoom effects)
70
+ objectFitKenBurnsPanStartX: number; // pan start position X in percent (0-100, for horizontal pan effects)
71
+ objectFitKenBurnsPanStartY: number; // pan start position Y in percent (0-100, for vertical pan effects)
72
+ objectFitKenBurnsPanEndX: number; // pan end position X in percent (0-100, for horizontal pan effects)
73
+ objectFitKenBurnsPanEndY: number; // pan end position Y in percent (0-100, for vertical pan effects)
64
74
  chromakey: boolean;
65
75
  chromakeyBlend: number;
66
76
  chromakeySimilarity: number;
67
77
  chromakeyColor: string;
68
78
  visualFilter?: string; // Optional visual filter (e.g., 'instagram-nashville')
79
+ sound: 'on' | 'off'; // Whether to use asset audio or replace with silence (default: 'on')
69
80
  container?: Container; // Optional container attached to this fragment
70
81
  app?: App; // Optional app attached to this fragment
71
82
  timecodeLabel?: string; // Optional label for timecode (from data-timecode attribute)
@@ -75,6 +86,23 @@ export type SequenceDefinition = {
75
86
  fragments: Fragment[];
76
87
  };
77
88
 
89
+ export type FragmentDebugInfo = {
90
+ id: string;
91
+ assetName: string;
92
+ startTime: number; // absolute start time in seconds
93
+ endTime: number; // absolute end time in seconds
94
+ duration: number; // fragment duration in seconds
95
+ trimLeft: number; // trim from asset start in seconds
96
+ overlayLeft: number; // overlay with previous fragment in seconds
97
+ enabled: boolean;
98
+ };
99
+
100
+ export type SequenceDebugInfo = {
101
+ sequenceIndex: number;
102
+ totalDuration: number; // total duration of the sequence in seconds
103
+ fragments: FragmentDebugInfo[];
104
+ };
105
+
78
106
  export type Output = {
79
107
  name: string; // e.g. "youtube"
80
108
  path: string; // e.g. "./output/video.mp4"
@@ -118,6 +146,7 @@ export type Upload = {
118
146
  thumbOffset?: number; // Thumbnail frame location in milliseconds
119
147
  coverUrl?: string; // Optional cover image URL
120
148
  videoUrl?: string; // Public URL to video (if not auto-generated from S3)
149
+ locationId?: string; // Facebook Page location ID for geotagging
121
150
  };
122
151
  };
123
152