@transcodely/sdk 0.3.10 → 0.3.12

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/index.mjs CHANGED
@@ -4422,7 +4422,8 @@ var WebhookEndpoint = class _WebhookEndpoint extends Message {
4422
4422
  * Event types this endpoint subscribes to.
4423
4423
  * Use "*" to subscribe to all event types.
4424
4424
  * Possible values: "job.created", "job.succeeded", "job.failed",
4425
- * "job.canceled", "job.progress", "output.created", "output.ready",
4425
+ * "job.canceled", "job.progress", "job.insights.ready",
4426
+ * "job.insights.failed", "output.created", "output.ready",
4426
4427
  * "output.failed", "output.progress", "video.uploaded", "video.ready",
4427
4428
  * "video.failed", "video.deleted", "video.source_scheduled_for_deletion",
4428
4429
  * "app.created", "app.updated", "app.spend_limit_warning",
@@ -7336,6 +7337,43 @@ proto3.util.setEnumType(SubtitleFormat, "transcodely.v1.SubtitleFormat", [
7336
7337
  { no: 3, name: "SUBTITLE_FORMAT_TTML" },
7337
7338
  { no: 4, name: "SUBTITLE_FORMAT_ASS" }
7338
7339
  ]);
7340
+ var TranscriptStyle = /* @__PURE__ */ ((TranscriptStyle2) => {
7341
+ TranscriptStyle2[TranscriptStyle2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7342
+ TranscriptStyle2[TranscriptStyle2["CLEAN"] = 1] = "CLEAN";
7343
+ TranscriptStyle2[TranscriptStyle2["LITERAL"] = 2] = "LITERAL";
7344
+ return TranscriptStyle2;
7345
+ })(TranscriptStyle || {});
7346
+ proto3.util.setEnumType(TranscriptStyle, "transcodely.v1.TranscriptStyle", [
7347
+ { no: 0, name: "TRANSCRIPT_STYLE_UNSPECIFIED" },
7348
+ { no: 1, name: "TRANSCRIPT_STYLE_CLEAN" },
7349
+ { no: 2, name: "TRANSCRIPT_STYLE_LITERAL" }
7350
+ ]);
7351
+ var TranscriptFormat = /* @__PURE__ */ ((TranscriptFormat2) => {
7352
+ TranscriptFormat2[TranscriptFormat2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7353
+ TranscriptFormat2[TranscriptFormat2["JSON"] = 1] = "JSON";
7354
+ TranscriptFormat2[TranscriptFormat2["TXT"] = 2] = "TXT";
7355
+ TranscriptFormat2[TranscriptFormat2["MD"] = 3] = "MD";
7356
+ return TranscriptFormat2;
7357
+ })(TranscriptFormat || {});
7358
+ proto3.util.setEnumType(TranscriptFormat, "transcodely.v1.TranscriptFormat", [
7359
+ { no: 0, name: "TRANSCRIPT_FORMAT_UNSPECIFIED" },
7360
+ { no: 1, name: "TRANSCRIPT_FORMAT_JSON" },
7361
+ { no: 2, name: "TRANSCRIPT_FORMAT_TXT" },
7362
+ { no: 3, name: "TRANSCRIPT_FORMAT_MD" }
7363
+ ]);
7364
+ var InsightsStatus = /* @__PURE__ */ ((InsightsStatus2) => {
7365
+ InsightsStatus2[InsightsStatus2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7366
+ InsightsStatus2[InsightsStatus2["PENDING"] = 1] = "PENDING";
7367
+ InsightsStatus2[InsightsStatus2["READY"] = 2] = "READY";
7368
+ InsightsStatus2[InsightsStatus2["FAILED"] = 3] = "FAILED";
7369
+ return InsightsStatus2;
7370
+ })(InsightsStatus || {});
7371
+ proto3.util.setEnumType(InsightsStatus, "transcodely.v1.InsightsStatus", [
7372
+ { no: 0, name: "INSIGHTS_STATUS_UNSPECIFIED" },
7373
+ { no: 1, name: "INSIGHTS_STATUS_PENDING" },
7374
+ { no: 2, name: "INSIGHTS_STATUS_READY" },
7375
+ { no: 3, name: "INSIGHTS_STATUS_FAILED" }
7376
+ ]);
7339
7377
  var BurnInStyle = class _BurnInStyle extends Message {
7340
7378
  /**
7341
7379
  * Font family name. Default: "Arial".
@@ -7480,18 +7518,45 @@ var SubtitleTrack = class _SubtitleTrack extends Message {
7480
7518
  */
7481
7519
  burnInStyle;
7482
7520
  /**
7483
- * Generate an AI chapters track from the transcript this track produces.
7484
- *
7485
- * Only meaningful together with the `generate` subtitle operation: when
7486
- * enabled, an AI pass over the generated transcript produces a chapters
7487
- * track delivered as WebVTT plus JSON. Free — no pricing impact. The
7488
- * transcript text is processed via the Anthropic API (an external
7489
- * subprocessor). Caption generation is available; the auto-chapters pass is
7490
- * not yet, so setting this is still rejected at job creation.
7521
+ * Deprecated: use insights.enabled. Chapters are one section of the
7522
+ * insights pack, so setting this to true behaves exactly like
7523
+ * insights.enabled = true (and is billed the same way). Only valid with the
7524
+ * `generate` operation. Kept so existing integrations keep working.
7491
7525
  *
7492
- * @generated from field: optional bool generate_chapters = 12;
7526
+ * @generated from field: optional bool generate_chapters = 12 [deprecated = true];
7527
+ * @deprecated
7493
7528
  */
7494
7529
  generateChapters;
7530
+ /**
7531
+ * Transcript renditions written next to the caption file. Only valid with
7532
+ * the `generate` operation. Every generate track produces a transcript in
7533
+ * three renditions (json, txt and md) whether or not this is set; this only
7534
+ * chooses how the txt and md renditions are written. Included in the
7535
+ * captions fee; no extra charge.
7536
+ *
7537
+ * @generated from field: transcodely.v1.TranscriptOptions transcript = 13;
7538
+ */
7539
+ transcript;
7540
+ /**
7541
+ * AI insights over the generated transcript: title suggestions, a summary,
7542
+ * key points, chapters, questions the content answers, key terms, quotable
7543
+ * highlights and topics. Only valid with the `generate` operation. Opt-in
7544
+ * and billed at EUR 0.02 per video plus EUR 0.005 per source minute (the
7545
+ * `insights_job` and `insights` fees, see Job.fees); a job whose insights
7546
+ * fail is not charged for them.
7547
+ *
7548
+ * Insights run after the job completes, so they arrive slightly later than
7549
+ * the captions: watch Job.insights (status pending → ready | failed) or
7550
+ * subscribe to the job.insights.ready / job.insights.failed webhooks.
7551
+ *
7552
+ * Privacy: the transcript TEXT (never the audio or video) is sent to
7553
+ * Anthropic, our AI subprocessor, to produce the insights. It is not used to
7554
+ * train models. Deployments without the feature reject this option with
7555
+ * `parameter_unsupported`.
7556
+ *
7557
+ * @generated from field: transcodely.v1.InsightsOptions insights = 14;
7558
+ */
7559
+ insights;
7495
7560
  constructor(data) {
7496
7561
  super();
7497
7562
  proto3.util.initPartial(data, this);
@@ -7510,7 +7575,9 @@ var SubtitleTrack = class _SubtitleTrack extends Message {
7510
7575
  { no: 9, name: "hearing_impaired", kind: "scalar", T: 8, opt: true },
7511
7576
  { no: 10, name: "forced", kind: "scalar", T: 8, opt: true },
7512
7577
  { no: 11, name: "burn_in_style", kind: "message", T: BurnInStyle, opt: true },
7513
- { no: 12, name: "generate_chapters", kind: "scalar", T: 8, opt: true }
7578
+ { no: 12, name: "generate_chapters", kind: "scalar", T: 8, opt: true },
7579
+ { no: 13, name: "transcript", kind: "message", T: TranscriptOptions },
7580
+ { no: 14, name: "insights", kind: "message", T: InsightsOptions }
7514
7581
  ]);
7515
7582
  static fromBinary(bytes, options) {
7516
7583
  return new _SubtitleTrack().fromBinary(bytes, options);
@@ -7525,6 +7592,147 @@ var SubtitleTrack = class _SubtitleTrack extends Message {
7525
7592
  return proto3.util.equals(_SubtitleTrack, a, b);
7526
7593
  }
7527
7594
  };
7595
+ var TranscriptOptions = class _TranscriptOptions extends Message {
7596
+ /**
7597
+ * Style of the txt and md renditions. Default: clean.
7598
+ *
7599
+ * @generated from field: optional transcodely.v1.TranscriptStyle style = 1;
7600
+ */
7601
+ style;
7602
+ constructor(data) {
7603
+ super();
7604
+ proto3.util.initPartial(data, this);
7605
+ }
7606
+ static runtime = proto3;
7607
+ static typeName = "transcodely.v1.TranscriptOptions";
7608
+ static fields = proto3.util.newFieldList(() => [
7609
+ { no: 1, name: "style", kind: "enum", T: proto3.getEnumType(TranscriptStyle), opt: true }
7610
+ ]);
7611
+ static fromBinary(bytes, options) {
7612
+ return new _TranscriptOptions().fromBinary(bytes, options);
7613
+ }
7614
+ static fromJson(jsonValue, options) {
7615
+ return new _TranscriptOptions().fromJson(jsonValue, options);
7616
+ }
7617
+ static fromJsonString(jsonString, options) {
7618
+ return new _TranscriptOptions().fromJsonString(jsonString, options);
7619
+ }
7620
+ static equals(a, b) {
7621
+ return proto3.util.equals(_TranscriptOptions, a, b);
7622
+ }
7623
+ };
7624
+ var InsightsOptions = class _InsightsOptions extends Message {
7625
+ /**
7626
+ * Run the insights pass. Billed as the `insights` fee.
7627
+ *
7628
+ * @generated from field: bool enabled = 1;
7629
+ */
7630
+ enabled = false;
7631
+ /**
7632
+ * Optional free-text guidance about the content, its audience or the tone
7633
+ * you want, at most 300 characters (e.g. "Beginner cooking class; friendly
7634
+ * tone" or "Quarterly earnings call for investors"). It steers the writing;
7635
+ * it cannot change what the insights contain or their format.
7636
+ *
7637
+ * @generated from field: optional string hint = 2;
7638
+ */
7639
+ hint;
7640
+ constructor(data) {
7641
+ super();
7642
+ proto3.util.initPartial(data, this);
7643
+ }
7644
+ static runtime = proto3;
7645
+ static typeName = "transcodely.v1.InsightsOptions";
7646
+ static fields = proto3.util.newFieldList(() => [
7647
+ {
7648
+ no: 1,
7649
+ name: "enabled",
7650
+ kind: "scalar",
7651
+ T: 8
7652
+ /* ScalarType.BOOL */
7653
+ },
7654
+ { no: 2, name: "hint", kind: "scalar", T: 9, opt: true }
7655
+ ]);
7656
+ static fromBinary(bytes, options) {
7657
+ return new _InsightsOptions().fromBinary(bytes, options);
7658
+ }
7659
+ static fromJson(jsonValue, options) {
7660
+ return new _InsightsOptions().fromJson(jsonValue, options);
7661
+ }
7662
+ static fromJsonString(jsonString, options) {
7663
+ return new _InsightsOptions().fromJsonString(jsonString, options);
7664
+ }
7665
+ static equals(a, b) {
7666
+ return proto3.util.equals(_InsightsOptions, a, b);
7667
+ }
7668
+ };
7669
+ var TranscriptRendition = class _TranscriptRendition extends Message {
7670
+ /**
7671
+ * File format: json | txt | md.
7672
+ *
7673
+ * @generated from field: transcodely.v1.TranscriptFormat format = 1;
7674
+ */
7675
+ format = 0 /* UNSPECIFIED */;
7676
+ /**
7677
+ * Storage key of the file in the output destination
7678
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.transcript.md").
7679
+ *
7680
+ * @generated from field: string storage_key = 2;
7681
+ */
7682
+ storageKey = "";
7683
+ /**
7684
+ * Fully-qualified storage URL of the file, the same kind of URL as
7685
+ * SubtitleResult.url.
7686
+ *
7687
+ * @generated from field: string url = 3;
7688
+ */
7689
+ url = "";
7690
+ /**
7691
+ * Ready-to-fetch HTTPS URL for the file, signed and time-limited. Same rules
7692
+ * and lifetime as SubtitleResult.signed_url: present only for
7693
+ * Transcodely-managed storage, emitted on single-resource reads, re-issued on
7694
+ * every read and never stored.
7695
+ *
7696
+ * @generated from field: optional string signed_url = 4;
7697
+ */
7698
+ signedUrl;
7699
+ constructor(data) {
7700
+ super();
7701
+ proto3.util.initPartial(data, this);
7702
+ }
7703
+ static runtime = proto3;
7704
+ static typeName = "transcodely.v1.TranscriptRendition";
7705
+ static fields = proto3.util.newFieldList(() => [
7706
+ { no: 1, name: "format", kind: "enum", T: proto3.getEnumType(TranscriptFormat) },
7707
+ {
7708
+ no: 2,
7709
+ name: "storage_key",
7710
+ kind: "scalar",
7711
+ T: 9
7712
+ /* ScalarType.STRING */
7713
+ },
7714
+ {
7715
+ no: 3,
7716
+ name: "url",
7717
+ kind: "scalar",
7718
+ T: 9
7719
+ /* ScalarType.STRING */
7720
+ },
7721
+ { no: 4, name: "signed_url", kind: "scalar", T: 9, opt: true }
7722
+ ]);
7723
+ static fromBinary(bytes, options) {
7724
+ return new _TranscriptRendition().fromBinary(bytes, options);
7725
+ }
7726
+ static fromJson(jsonValue, options) {
7727
+ return new _TranscriptRendition().fromJson(jsonValue, options);
7728
+ }
7729
+ static fromJsonString(jsonString, options) {
7730
+ return new _TranscriptRendition().fromJsonString(jsonString, options);
7731
+ }
7732
+ static equals(a, b) {
7733
+ return proto3.util.equals(_TranscriptRendition, a, b);
7734
+ }
7735
+ };
7528
7736
  var ChapterPoint = class _ChapterPoint extends Message {
7529
7737
  /**
7530
7738
  * Chapter start, in seconds from the start of the video.
@@ -7656,115 +7864,546 @@ var ChapterResult = class _ChapterResult extends Message {
7656
7864
  { no: 5, name: "chapters", kind: "message", T: ChapterPoint, repeated: true }
7657
7865
  ]);
7658
7866
  static fromBinary(bytes, options) {
7659
- return new _ChapterResult().fromBinary(bytes, options);
7867
+ return new _ChapterResult().fromBinary(bytes, options);
7868
+ }
7869
+ static fromJson(jsonValue, options) {
7870
+ return new _ChapterResult().fromJson(jsonValue, options);
7871
+ }
7872
+ static fromJsonString(jsonString, options) {
7873
+ return new _ChapterResult().fromJsonString(jsonString, options);
7874
+ }
7875
+ static equals(a, b) {
7876
+ return proto3.util.equals(_ChapterResult, a, b);
7877
+ }
7878
+ };
7879
+ var SubtitleResult = class _SubtitleResult extends Message {
7880
+ /**
7881
+ * Output ID (out_…) the subtitle track was configured on.
7882
+ *
7883
+ * @generated from field: string output_id = 1;
7884
+ */
7885
+ outputId = "";
7886
+ /**
7887
+ * Processing operation that produced this artifact
7888
+ * (generate | extract | convert). Lowercase string on the wire.
7889
+ *
7890
+ * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
7891
+ */
7892
+ operation = 0 /* UNSPECIFIED */;
7893
+ /**
7894
+ * Subtitle file format: webvtt | srt | ttml | ass.
7895
+ *
7896
+ * @generated from field: transcodely.v1.SubtitleFormat format = 3;
7897
+ */
7898
+ format = 0 /* UNSPECIFIED */;
7899
+ /**
7900
+ * Detected language (generate with auto-detect) or the configured
7901
+ * ISO 639-2 language code.
7902
+ *
7903
+ * @generated from field: string language = 4;
7904
+ */
7905
+ language = "";
7906
+ /**
7907
+ * Human-readable label (e.g., "English", "Spanish (CC)").
7908
+ *
7909
+ * @generated from field: string label = 5;
7910
+ */
7911
+ label = "";
7912
+ /**
7913
+ * True iff this track was produced by the generate operation
7914
+ * (automatic speech recognition).
7915
+ *
7916
+ * @generated from field: bool auto_generated = 6;
7917
+ */
7918
+ autoGenerated = false;
7919
+ /**
7920
+ * Caption file storage key in the output destination
7921
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
7922
+ *
7923
+ * @generated from field: string storage_key = 7;
7924
+ */
7925
+ storageKey = "";
7926
+ /**
7927
+ * Fully-qualified storage URL as built by the worker, stored as-is and
7928
+ * echoed on the Job response, exactly like JobOutput.output_url.
7929
+ *
7930
+ * @generated from field: string url = 8;
7931
+ */
7932
+ url = "";
7933
+ /**
7934
+ * Storage key of the json transcript rendition. Set only for generate
7935
+ * tracks. The same file is listed in transcript_renditions, which also
7936
+ * carries the txt and md renditions.
7937
+ *
7938
+ * @generated from field: string transcript_storage_key = 9;
7939
+ */
7940
+ transcriptStorageKey = "";
7941
+ /**
7942
+ * Fully-qualified URL of the json transcript rendition. Set only for
7943
+ * generate tracks.
7944
+ *
7945
+ * @generated from field: string transcript_url = 10;
7946
+ */
7947
+ transcriptUrl = "";
7948
+ /**
7949
+ * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
7950
+ *
7951
+ * Points at the same object as url, but as a CDN URL a browser or player can
7952
+ * load — url is a raw storage URI ("s3://…") that no client can fetch.
7953
+ * Present only for jobs writing to Transcodely-managed storage (an
7954
+ * output_origin with provider "transcodely"); jobs writing to your own bucket
7955
+ * get nothing here and should sign url with their own credentials.
7956
+ *
7957
+ * Emitted on single-job reads (Get, Watch) and never on List, and expires —
7958
+ * 6 hours by default — so re-read the job for a fresh one rather than
7959
+ * storing it.
7960
+ *
7961
+ * @generated from field: optional string signed_url = 11;
7962
+ */
7963
+ signedUrl;
7964
+ /**
7965
+ * Ready-to-fetch HTTPS URL for the json transcript rendition, signed and
7966
+ * time-limited. Same rules and lifetime as signed_url; set only for generate
7967
+ * tracks, which are the only ones carrying a transcript.
7968
+ *
7969
+ * @generated from field: optional string transcript_signed_url = 12;
7970
+ */
7971
+ transcriptSignedUrl;
7972
+ /**
7973
+ * Every transcript rendition this generate track produced, one per format
7974
+ * (json, txt, md). Empty for other operations, and for jobs that completed
7975
+ * before renditions existed (those carry only the json transcript above).
7976
+ *
7977
+ * @generated from field: repeated transcodely.v1.TranscriptRendition transcript_renditions = 13;
7978
+ */
7979
+ transcriptRenditions = [];
7980
+ /**
7981
+ * Style the txt and md renditions were written in: clean | literal. Unset
7982
+ * when the track produced no renditions.
7983
+ *
7984
+ * @generated from field: transcodely.v1.TranscriptStyle transcript_style = 14;
7985
+ */
7986
+ transcriptStyle = 0 /* UNSPECIFIED */;
7987
+ constructor(data) {
7988
+ super();
7989
+ proto3.util.initPartial(data, this);
7990
+ }
7991
+ static runtime = proto3;
7992
+ static typeName = "transcodely.v1.SubtitleResult";
7993
+ static fields = proto3.util.newFieldList(() => [
7994
+ {
7995
+ no: 1,
7996
+ name: "output_id",
7997
+ kind: "scalar",
7998
+ T: 9
7999
+ /* ScalarType.STRING */
8000
+ },
8001
+ { no: 2, name: "operation", kind: "enum", T: proto3.getEnumType(SubtitleOperation) },
8002
+ { no: 3, name: "format", kind: "enum", T: proto3.getEnumType(SubtitleFormat) },
8003
+ {
8004
+ no: 4,
8005
+ name: "language",
8006
+ kind: "scalar",
8007
+ T: 9
8008
+ /* ScalarType.STRING */
8009
+ },
8010
+ {
8011
+ no: 5,
8012
+ name: "label",
8013
+ kind: "scalar",
8014
+ T: 9
8015
+ /* ScalarType.STRING */
8016
+ },
8017
+ {
8018
+ no: 6,
8019
+ name: "auto_generated",
8020
+ kind: "scalar",
8021
+ T: 8
8022
+ /* ScalarType.BOOL */
8023
+ },
8024
+ {
8025
+ no: 7,
8026
+ name: "storage_key",
8027
+ kind: "scalar",
8028
+ T: 9
8029
+ /* ScalarType.STRING */
8030
+ },
8031
+ {
8032
+ no: 8,
8033
+ name: "url",
8034
+ kind: "scalar",
8035
+ T: 9
8036
+ /* ScalarType.STRING */
8037
+ },
8038
+ {
8039
+ no: 9,
8040
+ name: "transcript_storage_key",
8041
+ kind: "scalar",
8042
+ T: 9
8043
+ /* ScalarType.STRING */
8044
+ },
8045
+ {
8046
+ no: 10,
8047
+ name: "transcript_url",
8048
+ kind: "scalar",
8049
+ T: 9
8050
+ /* ScalarType.STRING */
8051
+ },
8052
+ { no: 11, name: "signed_url", kind: "scalar", T: 9, opt: true },
8053
+ { no: 12, name: "transcript_signed_url", kind: "scalar", T: 9, opt: true },
8054
+ { no: 13, name: "transcript_renditions", kind: "message", T: TranscriptRendition, repeated: true },
8055
+ { no: 14, name: "transcript_style", kind: "enum", T: proto3.getEnumType(TranscriptStyle) }
8056
+ ]);
8057
+ static fromBinary(bytes, options) {
8058
+ return new _SubtitleResult().fromBinary(bytes, options);
8059
+ }
8060
+ static fromJson(jsonValue, options) {
8061
+ return new _SubtitleResult().fromJson(jsonValue, options);
8062
+ }
8063
+ static fromJsonString(jsonString, options) {
8064
+ return new _SubtitleResult().fromJsonString(jsonString, options);
8065
+ }
8066
+ static equals(a, b) {
8067
+ return proto3.util.equals(_SubtitleResult, a, b);
8068
+ }
8069
+ };
8070
+ var InsightsQuestion = class _InsightsQuestion extends Message {
8071
+ /**
8072
+ * The question, phrased the way a viewer would ask it.
8073
+ *
8074
+ * @generated from field: string question = 1;
8075
+ */
8076
+ question = "";
8077
+ /**
8078
+ * The answer as the content gives it, at most two sentences.
8079
+ *
8080
+ * @generated from field: string answer = 2;
8081
+ */
8082
+ answer = "";
8083
+ /**
8084
+ * Where the answer starts, in seconds from the start of the video.
8085
+ *
8086
+ * @generated from field: double start_seconds = 3;
8087
+ */
8088
+ startSeconds = 0;
8089
+ constructor(data) {
8090
+ super();
8091
+ proto3.util.initPartial(data, this);
8092
+ }
8093
+ static runtime = proto3;
8094
+ static typeName = "transcodely.v1.InsightsQuestion";
8095
+ static fields = proto3.util.newFieldList(() => [
8096
+ {
8097
+ no: 1,
8098
+ name: "question",
8099
+ kind: "scalar",
8100
+ T: 9
8101
+ /* ScalarType.STRING */
8102
+ },
8103
+ {
8104
+ no: 2,
8105
+ name: "answer",
8106
+ kind: "scalar",
8107
+ T: 9
8108
+ /* ScalarType.STRING */
8109
+ },
8110
+ {
8111
+ no: 3,
8112
+ name: "start_seconds",
8113
+ kind: "scalar",
8114
+ T: 1
8115
+ /* ScalarType.DOUBLE */
8116
+ }
8117
+ ]);
8118
+ static fromBinary(bytes, options) {
8119
+ return new _InsightsQuestion().fromBinary(bytes, options);
8120
+ }
8121
+ static fromJson(jsonValue, options) {
8122
+ return new _InsightsQuestion().fromJson(jsonValue, options);
8123
+ }
8124
+ static fromJsonString(jsonString, options) {
8125
+ return new _InsightsQuestion().fromJsonString(jsonString, options);
8126
+ }
8127
+ static equals(a, b) {
8128
+ return proto3.util.equals(_InsightsQuestion, a, b);
8129
+ }
8130
+ };
8131
+ var InsightsTerm = class _InsightsTerm extends Message {
8132
+ /**
8133
+ * The term as it is used in the content.
8134
+ *
8135
+ * @generated from field: string term = 1;
8136
+ */
8137
+ term = "";
8138
+ /**
8139
+ * A one-sentence definition, as the content explains it.
8140
+ *
8141
+ * @generated from field: string definition = 2;
8142
+ */
8143
+ definition = "";
8144
+ /**
8145
+ * Where the term is introduced, in seconds from the start of the video.
8146
+ *
8147
+ * @generated from field: double start_seconds = 3;
8148
+ */
8149
+ startSeconds = 0;
8150
+ constructor(data) {
8151
+ super();
8152
+ proto3.util.initPartial(data, this);
8153
+ }
8154
+ static runtime = proto3;
8155
+ static typeName = "transcodely.v1.InsightsTerm";
8156
+ static fields = proto3.util.newFieldList(() => [
8157
+ {
8158
+ no: 1,
8159
+ name: "term",
8160
+ kind: "scalar",
8161
+ T: 9
8162
+ /* ScalarType.STRING */
8163
+ },
8164
+ {
8165
+ no: 2,
8166
+ name: "definition",
8167
+ kind: "scalar",
8168
+ T: 9
8169
+ /* ScalarType.STRING */
8170
+ },
8171
+ {
8172
+ no: 3,
8173
+ name: "start_seconds",
8174
+ kind: "scalar",
8175
+ T: 1
8176
+ /* ScalarType.DOUBLE */
8177
+ }
8178
+ ]);
8179
+ static fromBinary(bytes, options) {
8180
+ return new _InsightsTerm().fromBinary(bytes, options);
8181
+ }
8182
+ static fromJson(jsonValue, options) {
8183
+ return new _InsightsTerm().fromJson(jsonValue, options);
8184
+ }
8185
+ static fromJsonString(jsonString, options) {
8186
+ return new _InsightsTerm().fromJsonString(jsonString, options);
8187
+ }
8188
+ static equals(a, b) {
8189
+ return proto3.util.equals(_InsightsTerm, a, b);
8190
+ }
8191
+ };
8192
+ var InsightsHighlight = class _InsightsHighlight extends Message {
8193
+ /**
8194
+ * The quote, exactly as it appears in the transcript (never paraphrased).
8195
+ *
8196
+ * @generated from field: string text = 1;
8197
+ */
8198
+ text = "";
8199
+ /**
8200
+ * Start of the paragraph the quote comes from, in seconds from the start of
8201
+ * the video.
8202
+ *
8203
+ * @generated from field: double start_seconds = 2;
8204
+ */
8205
+ startSeconds = 0;
8206
+ /**
8207
+ * End of that paragraph, in seconds from the start of the video.
8208
+ *
8209
+ * @generated from field: double end_seconds = 3;
8210
+ */
8211
+ endSeconds = 0;
8212
+ constructor(data) {
8213
+ super();
8214
+ proto3.util.initPartial(data, this);
8215
+ }
8216
+ static runtime = proto3;
8217
+ static typeName = "transcodely.v1.InsightsHighlight";
8218
+ static fields = proto3.util.newFieldList(() => [
8219
+ {
8220
+ no: 1,
8221
+ name: "text",
8222
+ kind: "scalar",
8223
+ T: 9
8224
+ /* ScalarType.STRING */
8225
+ },
8226
+ {
8227
+ no: 2,
8228
+ name: "start_seconds",
8229
+ kind: "scalar",
8230
+ T: 1
8231
+ /* ScalarType.DOUBLE */
8232
+ },
8233
+ {
8234
+ no: 3,
8235
+ name: "end_seconds",
8236
+ kind: "scalar",
8237
+ T: 1
8238
+ /* ScalarType.DOUBLE */
8239
+ }
8240
+ ]);
8241
+ static fromBinary(bytes, options) {
8242
+ return new _InsightsHighlight().fromBinary(bytes, options);
7660
8243
  }
7661
8244
  static fromJson(jsonValue, options) {
7662
- return new _ChapterResult().fromJson(jsonValue, options);
8245
+ return new _InsightsHighlight().fromJson(jsonValue, options);
7663
8246
  }
7664
8247
  static fromJsonString(jsonString, options) {
7665
- return new _ChapterResult().fromJsonString(jsonString, options);
8248
+ return new _InsightsHighlight().fromJsonString(jsonString, options);
7666
8249
  }
7667
8250
  static equals(a, b) {
7668
- return proto3.util.equals(_ChapterResult, a, b);
8251
+ return proto3.util.equals(_InsightsHighlight, a, b);
7669
8252
  }
7670
8253
  };
7671
- var SubtitleResult = class _SubtitleResult extends Message {
8254
+ var TranscriptInsights = class _TranscriptInsights extends Message {
7672
8255
  /**
7673
- * Output ID (out_…) the subtitle track was configured on.
8256
+ * The out_… output the generate track was configured on.
7674
8257
  *
7675
8258
  * @generated from field: string output_id = 1;
7676
8259
  */
7677
8260
  outputId = "";
7678
8261
  /**
7679
- * Processing operation that produced this artifact
7680
- * (generate | extract | convert). Lowercase string on the wire.
8262
+ * ISO 639-2 language code of the transcript.
7681
8263
  *
7682
- * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
8264
+ * @generated from field: string language = 2;
7683
8265
  */
7684
- operation = 0 /* UNSPECIFIED */;
8266
+ language = "";
7685
8267
  /**
7686
- * Subtitle file format: webvtt | srt | ttml | ass.
8268
+ * pending | ready | failed.
7687
8269
  *
7688
- * @generated from field: transcodely.v1.SubtitleFormat format = 3;
8270
+ * @generated from field: transcodely.v1.InsightsStatus status = 3;
7689
8271
  */
7690
- format = 0 /* UNSPECIFIED */;
8272
+ status = 0 /* UNSPECIFIED */;
7691
8273
  /**
7692
- * Detected language (generate with auto-detect) or the configured
7693
- * ISO 639-2 language code.
8274
+ * Why the insights failed, when status is "failed":
8275
+ * insights_invalid (no usable result could be produced),
8276
+ * insights_unsupported_origin (the output destination cannot be written to
8277
+ * by the API, e.g. an http origin), insights_too_long (transcript over the
8278
+ * size limit), insights_transcript_unavailable (the transcript could not be
8279
+ * read), insights_refused (the content was declined) or insights_unavailable
8280
+ * (the service was unavailable). Empty otherwise.
7694
8281
  *
7695
- * @generated from field: string language = 4;
8282
+ * @generated from field: string error_code = 4;
7696
8283
  */
7697
- language = "";
8284
+ errorCode = "";
7698
8285
  /**
7699
- * Human-readable label (e.g., "English", "Spanish (CC)").
8286
+ * One to three suggested titles for the video.
7700
8287
  *
7701
- * @generated from field: string label = 5;
8288
+ * @generated from field: repeated string title_suggestions = 5;
7702
8289
  */
7703
- label = "";
8290
+ titleSuggestions = [];
7704
8291
  /**
7705
- * True iff this track was produced by the generate operation
7706
- * (automatic speech recognition).
8292
+ * A summary of the content, at most four sentences.
7707
8293
  *
7708
- * @generated from field: bool auto_generated = 6;
8294
+ * @generated from field: string summary = 6;
7709
8295
  */
7710
- autoGenerated = false;
8296
+ summary = "";
7711
8297
  /**
7712
- * Caption file storage key in the output destination
7713
- * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
8298
+ * Three to seven key points.
7714
8299
  *
7715
- * @generated from field: string storage_key = 7;
8300
+ * @generated from field: repeated string key_points = 7;
8301
+ */
8302
+ keyPoints = [];
8303
+ /**
8304
+ * Chapters, ordered by start time and covering the whole video. Also
8305
+ * delivered as a WebVTT chapters file (chapters_url).
8306
+ *
8307
+ * @generated from field: repeated transcodely.v1.ChapterPoint chapters = 8;
8308
+ */
8309
+ chapters = [];
8310
+ /**
8311
+ * Up to six questions the content answers.
8312
+ *
8313
+ * @generated from field: repeated transcodely.v1.InsightsQuestion questions = 9;
8314
+ */
8315
+ questions = [];
8316
+ /**
8317
+ * Up to ten key terms with definitions.
8318
+ *
8319
+ * @generated from field: repeated transcodely.v1.InsightsTerm terms = 10;
8320
+ */
8321
+ terms = [];
8322
+ /**
8323
+ * Quotable moments, each a verbatim quote from the transcript.
8324
+ *
8325
+ * @generated from field: repeated transcodely.v1.InsightsHighlight highlights = 11;
8326
+ */
8327
+ highlights = [];
8328
+ /**
8329
+ * Up to ten short topic labels.
8330
+ *
8331
+ * @generated from field: repeated string topics = 12;
8332
+ */
8333
+ topics = [];
8334
+ /**
8335
+ * Storage key of insights.json (every section above, machine-readable).
8336
+ *
8337
+ * @generated from field: string storage_key = 13;
7716
8338
  */
7717
8339
  storageKey = "";
7718
8340
  /**
7719
- * Fully-qualified storage URL as built by the worker, stored as-is and
7720
- * echoed on the Job response, exactly like JobOutput.output_url.
8341
+ * Fully-qualified storage URL of insights.json.
7721
8342
  *
7722
- * @generated from field: string url = 8;
8343
+ * @generated from field: string url = 14;
7723
8344
  */
7724
8345
  url = "";
7725
8346
  /**
7726
- * Segment-level transcript JSON storage key. Set only for generate
7727
- * tracks (the machine-readable transcript consumed by auto-chapters).
8347
+ * Signed, time-limited HTTPS URL for insights.json. Same rules and lifetime
8348
+ * as SubtitleResult.signed_url.
7728
8349
  *
7729
- * @generated from field: string transcript_storage_key = 9;
8350
+ * @generated from field: optional string signed_url = 15;
7730
8351
  */
7731
- transcriptStorageKey = "";
8352
+ signedUrl;
7732
8353
  /**
7733
- * Fully-qualified transcript URL. Set only for generate tracks.
8354
+ * Storage key of chapters.vtt (WebVTT chapters track).
7734
8355
  *
7735
- * @generated from field: string transcript_url = 10;
8356
+ * @generated from field: string chapters_storage_key = 16;
7736
8357
  */
7737
- transcriptUrl = "";
8358
+ chaptersStorageKey = "";
7738
8359
  /**
7739
- * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
8360
+ * Fully-qualified storage URL of chapters.vtt.
7740
8361
  *
7741
- * Points at the same object as url, but as a CDN URL a browser or player can
7742
- * load — url is a raw storage URI ("s3://…") that no client can fetch.
7743
- * Present only for jobs writing to Transcodely-managed storage (an
7744
- * output_origin with provider "transcodely"); jobs writing to your own bucket
7745
- * get nothing here and should sign url with their own credentials.
8362
+ * @generated from field: string chapters_url = 17;
8363
+ */
8364
+ chaptersUrl = "";
8365
+ /**
8366
+ * Signed, time-limited HTTPS URL for chapters.vtt. Same rules as signed_url.
7746
8367
  *
7747
- * Emitted on single-job reads (Get, Watch) and never on List, and expires —
7748
- * 6 hours by default — so re-read the job for a fresh one rather than
7749
- * storing it.
8368
+ * @generated from field: optional string chapters_signed_url = 18;
8369
+ */
8370
+ chaptersSignedUrl;
8371
+ /**
8372
+ * Storage key of insights.md (every section as a Markdown document).
7750
8373
  *
7751
- * @generated from field: optional string signed_url = 11;
8374
+ * @generated from field: string markdown_storage_key = 19;
7752
8375
  */
7753
- signedUrl;
8376
+ markdownStorageKey = "";
7754
8377
  /**
7755
- * Ready-to-fetch HTTPS URL for the segment transcript, signed and
7756
- * time-limited. Same rules and lifetime as signed_url; set only for generate
7757
- * tracks, which are the only ones carrying a transcript.
8378
+ * Fully-qualified storage URL of insights.md.
7758
8379
  *
7759
- * @generated from field: optional string transcript_signed_url = 12;
8380
+ * @generated from field: string markdown_url = 20;
7760
8381
  */
7761
- transcriptSignedUrl;
8382
+ markdownUrl = "";
8383
+ /**
8384
+ * Signed, time-limited HTTPS URL for insights.md. Same rules as signed_url.
8385
+ *
8386
+ * @generated from field: optional string markdown_signed_url = 21;
8387
+ */
8388
+ markdownSignedUrl;
8389
+ /**
8390
+ * When the insights became ready. Absent until then.
8391
+ *
8392
+ * @generated from field: google.protobuf.Timestamp generated_at = 22;
8393
+ */
8394
+ generatedAt;
8395
+ /**
8396
+ * The hint the insights were requested with (echoed). Empty when none.
8397
+ *
8398
+ * @generated from field: string hint = 23;
8399
+ */
8400
+ hint = "";
7762
8401
  constructor(data) {
7763
8402
  super();
7764
8403
  proto3.util.initPartial(data, this);
7765
8404
  }
7766
8405
  static runtime = proto3;
7767
- static typeName = "transcodely.v1.SubtitleResult";
8406
+ static typeName = "transcodely.v1.TranscriptInsights";
7768
8407
  static fields = proto3.util.newFieldList(() => [
7769
8408
  {
7770
8409
  no: 1,
@@ -7773,71 +8412,100 @@ var SubtitleResult = class _SubtitleResult extends Message {
7773
8412
  T: 9
7774
8413
  /* ScalarType.STRING */
7775
8414
  },
7776
- { no: 2, name: "operation", kind: "enum", T: proto3.getEnumType(SubtitleOperation) },
7777
- { no: 3, name: "format", kind: "enum", T: proto3.getEnumType(SubtitleFormat) },
7778
8415
  {
7779
- no: 4,
8416
+ no: 2,
7780
8417
  name: "language",
7781
8418
  kind: "scalar",
7782
8419
  T: 9
7783
8420
  /* ScalarType.STRING */
7784
8421
  },
8422
+ { no: 3, name: "status", kind: "enum", T: proto3.getEnumType(InsightsStatus) },
7785
8423
  {
7786
- no: 5,
7787
- name: "label",
8424
+ no: 4,
8425
+ name: "error_code",
7788
8426
  kind: "scalar",
7789
8427
  T: 9
7790
8428
  /* ScalarType.STRING */
7791
8429
  },
8430
+ { no: 5, name: "title_suggestions", kind: "scalar", T: 9, repeated: true },
7792
8431
  {
7793
8432
  no: 6,
7794
- name: "auto_generated",
8433
+ name: "summary",
7795
8434
  kind: "scalar",
7796
- T: 8
7797
- /* ScalarType.BOOL */
8435
+ T: 9
8436
+ /* ScalarType.STRING */
7798
8437
  },
8438
+ { no: 7, name: "key_points", kind: "scalar", T: 9, repeated: true },
8439
+ { no: 8, name: "chapters", kind: "message", T: ChapterPoint, repeated: true },
8440
+ { no: 9, name: "questions", kind: "message", T: InsightsQuestion, repeated: true },
8441
+ { no: 10, name: "terms", kind: "message", T: InsightsTerm, repeated: true },
8442
+ { no: 11, name: "highlights", kind: "message", T: InsightsHighlight, repeated: true },
8443
+ { no: 12, name: "topics", kind: "scalar", T: 9, repeated: true },
7799
8444
  {
7800
- no: 7,
8445
+ no: 13,
7801
8446
  name: "storage_key",
7802
8447
  kind: "scalar",
7803
8448
  T: 9
7804
8449
  /* ScalarType.STRING */
7805
8450
  },
7806
8451
  {
7807
- no: 8,
8452
+ no: 14,
7808
8453
  name: "url",
7809
8454
  kind: "scalar",
7810
8455
  T: 9
7811
8456
  /* ScalarType.STRING */
7812
8457
  },
8458
+ { no: 15, name: "signed_url", kind: "scalar", T: 9, opt: true },
7813
8459
  {
7814
- no: 9,
7815
- name: "transcript_storage_key",
8460
+ no: 16,
8461
+ name: "chapters_storage_key",
7816
8462
  kind: "scalar",
7817
8463
  T: 9
7818
8464
  /* ScalarType.STRING */
7819
8465
  },
7820
8466
  {
7821
- no: 10,
7822
- name: "transcript_url",
8467
+ no: 17,
8468
+ name: "chapters_url",
7823
8469
  kind: "scalar",
7824
8470
  T: 9
7825
8471
  /* ScalarType.STRING */
7826
8472
  },
7827
- { no: 11, name: "signed_url", kind: "scalar", T: 9, opt: true },
7828
- { no: 12, name: "transcript_signed_url", kind: "scalar", T: 9, opt: true }
8473
+ { no: 18, name: "chapters_signed_url", kind: "scalar", T: 9, opt: true },
8474
+ {
8475
+ no: 19,
8476
+ name: "markdown_storage_key",
8477
+ kind: "scalar",
8478
+ T: 9
8479
+ /* ScalarType.STRING */
8480
+ },
8481
+ {
8482
+ no: 20,
8483
+ name: "markdown_url",
8484
+ kind: "scalar",
8485
+ T: 9
8486
+ /* ScalarType.STRING */
8487
+ },
8488
+ { no: 21, name: "markdown_signed_url", kind: "scalar", T: 9, opt: true },
8489
+ { no: 22, name: "generated_at", kind: "message", T: Timestamp },
8490
+ {
8491
+ no: 23,
8492
+ name: "hint",
8493
+ kind: "scalar",
8494
+ T: 9
8495
+ /* ScalarType.STRING */
8496
+ }
7829
8497
  ]);
7830
8498
  static fromBinary(bytes, options) {
7831
- return new _SubtitleResult().fromBinary(bytes, options);
8499
+ return new _TranscriptInsights().fromBinary(bytes, options);
7832
8500
  }
7833
8501
  static fromJson(jsonValue, options) {
7834
- return new _SubtitleResult().fromJson(jsonValue, options);
8502
+ return new _TranscriptInsights().fromJson(jsonValue, options);
7835
8503
  }
7836
8504
  static fromJsonString(jsonString, options) {
7837
- return new _SubtitleResult().fromJsonString(jsonString, options);
8505
+ return new _TranscriptInsights().fromJsonString(jsonString, options);
7838
8506
  }
7839
8507
  static equals(a, b) {
7840
- return proto3.util.equals(_SubtitleResult, a, b);
8508
+ return proto3.util.equals(_TranscriptInsights, a, b);
7841
8509
  }
7842
8510
  };
7843
8511
  var DRMSystem = /* @__PURE__ */ ((DRMSystem2) => {
@@ -13010,9 +13678,8 @@ var Job = class _Job extends Message {
13010
13678
  */
13011
13679
  inputVideoId = "";
13012
13680
  /**
13013
- * Auto-generated chapter tracks, one per output whose generated caption track
13014
- * had chapters enabled (SubtitleTrack.generate_chapters). Populated once the
13015
- * auto-chapters pass ships; empty until then.
13681
+ * Never populated; superseded by insights, whose chapters section (and
13682
+ * chapters.vtt file) replaces it.
13016
13683
  *
13017
13684
  * @generated from field: repeated transcodely.v1.ChapterResult chapter_results = 35;
13018
13685
  */
@@ -13044,6 +13711,16 @@ var Job = class _Job extends Message {
13044
13711
  * @generated from field: transcodely.v1.JobCostBreakdown cost_breakdown = 38;
13045
13712
  */
13046
13713
  costBreakdown;
13714
+ /**
13715
+ * AI insights, one per generate subtitle track that requested them
13716
+ * (SubtitleTrack.insights). Listed with status "pending" from creation;
13717
+ * they are produced after the job completes and move to "ready" or
13718
+ * "failed" (webhooks job.insights.ready / job.insights.failed). Signed URLs
13719
+ * follow the same rules as SubtitleResult.signed_url. Server-set; read-only.
13720
+ *
13721
+ * @generated from field: repeated transcodely.v1.TranscriptInsights insights = 39;
13722
+ */
13723
+ insights = [];
13047
13724
  constructor(data) {
13048
13725
  super();
13049
13726
  proto3.util.initPartial(data, this);
@@ -13146,7 +13823,8 @@ var Job = class _Job extends Message {
13146
13823
  { no: 35, name: "chapter_results", kind: "message", T: ChapterResult, repeated: true },
13147
13824
  { no: 36, name: "clip", kind: "message", T: ClipConfig, opt: true },
13148
13825
  { no: 37, name: "video_id", kind: "scalar", T: 9, opt: true },
13149
- { no: 38, name: "cost_breakdown", kind: "message", T: JobCostBreakdown }
13826
+ { no: 38, name: "cost_breakdown", kind: "message", T: JobCostBreakdown },
13827
+ { no: 39, name: "insights", kind: "message", T: TranscriptInsights, repeated: true }
13150
13828
  ]);
13151
13829
  static fromBinary(bytes, options) {
13152
13830
  return new _Job().fromBinary(bytes, options);
@@ -13164,8 +13842,13 @@ var Job = class _Job extends Message {
13164
13842
  var JobFee = class _JobFee extends Message {
13165
13843
  /**
13166
13844
  * Fee discriminator:
13167
- * "processing" — the flat per-job processing fee (see Job.fees).
13168
- * "captions" — AI caption generation.
13845
+ * "processing" — the flat per-job processing fee (see Job.fees).
13846
+ * "captions" — AI caption generation (transcript renditions included).
13847
+ * "insights" — AI insights, the per-source-minute part (EUR 0.005/min).
13848
+ * "insights_job" — AI insights, the per-video part (EUR 0.02).
13849
+ * The two insights fees stay estimated until the insights are ready (after
13850
+ * the job completes), then are confirmed together, or voided together when
13851
+ * the insights fail.
13169
13852
  *
13170
13853
  * @generated from field: string fee_type = 1;
13171
13854
  */
@@ -14292,6 +14975,15 @@ var Video = class _Video extends Message {
14292
14975
  * @generated from field: repeated transcodely.v1.VideoTextTrack text_tracks = 49;
14293
14976
  */
14294
14977
  textTracks = [];
14978
+ /**
14979
+ * AI insights for this video, one per transcript language, from the
14980
+ * captions job that requested them (SubtitleTrack.insights). Each moves
14981
+ * from "pending" to "ready" or "failed". Signed URLs are computed per
14982
+ * request under the same rules as text track URLs and are never stored.
14983
+ *
14984
+ * @generated from field: repeated transcodely.v1.TranscriptInsights insights = 53;
14985
+ */
14986
+ insights = [];
14295
14987
  /**
14296
14988
  * Storage and cost transparency.
14297
14989
  *
@@ -14456,6 +15148,7 @@ var Video = class _Video extends Message {
14456
15148
  { no: 45, name: "hover_preview_mp4_url", kind: "scalar", T: 9, opt: true },
14457
15149
  { no: 25, name: "renditions", kind: "message", T: VideoRendition, repeated: true },
14458
15150
  { no: 49, name: "text_tracks", kind: "message", T: VideoTextTrack, repeated: true },
15151
+ { no: 53, name: "insights", kind: "message", T: TranscriptInsights, repeated: true },
14459
15152
  {
14460
15153
  no: 30,
14461
15154
  name: "output_size_bytes",
@@ -14683,6 +15376,16 @@ var VideoTextTrack = class _VideoTextTrack extends Message {
14683
15376
  * @generated from field: google.protobuf.Timestamp created_at = 9;
14684
15377
  */
14685
15378
  createdAt;
15379
+ /**
15380
+ * Transcript renditions of an auto-generated track, one per format (json,
15381
+ * txt, md). Empty for tracks that were not generated by speech recognition
15382
+ * and for tracks generated before renditions existed. Each signed_url is
15383
+ * computed per request under exactly the same rules as url and is never
15384
+ * stored.
15385
+ *
15386
+ * @generated from field: repeated transcodely.v1.TranscriptRendition transcript_renditions = 10;
15387
+ */
15388
+ transcriptRenditions = [];
14686
15389
  constructor(data) {
14687
15390
  super();
14688
15391
  proto3.util.initPartial(data, this);
@@ -14740,7 +15443,8 @@ var VideoTextTrack = class _VideoTextTrack extends Message {
14740
15443
  /* ScalarType.BOOL */
14741
15444
  },
14742
15445
  { no: 8, name: "url", kind: "scalar", T: 9, opt: true },
14743
- { no: 9, name: "created_at", kind: "message", T: Timestamp }
15446
+ { no: 9, name: "created_at", kind: "message", T: Timestamp },
15447
+ { no: 10, name: "transcript_renditions", kind: "message", T: TranscriptRendition, repeated: true }
14744
15448
  ]);
14745
15449
  static fromBinary(bytes, options) {
14746
15450
  return new _VideoTextTrack().fromBinary(bytes, options);
@@ -14846,6 +15550,22 @@ var CreateUploadRequest = class _CreateUploadRequest extends Message {
14846
15550
  * @generated from field: optional bool auto_captions = 11;
14847
15551
  */
14848
15552
  autoCaptions;
15553
+ /**
15554
+ * When true, also run AI insights over the inline captions: title
15555
+ * suggestions, a summary, key points, chapters, questions the content
15556
+ * answers, key terms, quotable highlights and topics (the generate track
15557
+ * carries insights.enabled = true; see SubtitleTrack.insights). Requires
15558
+ * auto_captions = true; rejected otherwise with `invalid_argument`, error
15559
+ * code `parameter_incompatible` on auto_insights. Billed as the
15560
+ * `insights_job` (EUR 0.02 per video) and `insights` (EUR 0.005 per source
15561
+ * minute) fees on the transcode job, on top of the captions fee; not
15562
+ * charged when the insights fail. The insights surface as Video.insights.
15563
+ * Deployments without the feature reject it with `invalid_argument`, error
15564
+ * code `parameter_unsupported`. Unset or false = no insights.
15565
+ *
15566
+ * @generated from field: optional bool auto_insights = 12;
15567
+ */
15568
+ autoInsights;
14849
15569
  constructor(data) {
14850
15570
  super();
14851
15571
  proto3.util.initPartial(data, this);
@@ -14893,7 +15613,8 @@ var CreateUploadRequest = class _CreateUploadRequest extends Message {
14893
15613
  T: 8
14894
15614
  /* ScalarType.BOOL */
14895
15615
  },
14896
- { no: 11, name: "auto_captions", kind: "scalar", T: 8, opt: true }
15616
+ { no: 11, name: "auto_captions", kind: "scalar", T: 8, opt: true },
15617
+ { no: 12, name: "auto_insights", kind: "scalar", T: 8, opt: true }
14897
15618
  ]);
14898
15619
  static fromBinary(bytes, options) {
14899
15620
  return new _CreateUploadRequest().fromBinary(bytes, options);
@@ -15102,6 +15823,22 @@ var CreateFromUrlRequest = class _CreateFromUrlRequest extends Message {
15102
15823
  * @generated from field: optional bool auto_captions = 9;
15103
15824
  */
15104
15825
  autoCaptions;
15826
+ /**
15827
+ * When true, also run AI insights over the inline captions: title
15828
+ * suggestions, a summary, key points, chapters, questions the content
15829
+ * answers, key terms, quotable highlights and topics (the generate track
15830
+ * carries insights.enabled = true; see SubtitleTrack.insights). Requires
15831
+ * auto_captions = true; rejected otherwise with `invalid_argument`, error
15832
+ * code `parameter_incompatible` on auto_insights. Billed as the
15833
+ * `insights_job` (EUR 0.02 per video) and `insights` (EUR 0.005 per source
15834
+ * minute) fees on the transcode job, on top of the captions fee; not
15835
+ * charged when the insights fail. The insights surface as Video.insights.
15836
+ * Deployments without the feature reject it with `invalid_argument`, error
15837
+ * code `parameter_unsupported`. Unset or false = no insights.
15838
+ *
15839
+ * @generated from field: optional bool auto_insights = 10;
15840
+ */
15841
+ autoInsights;
15105
15842
  constructor(data) {
15106
15843
  super();
15107
15844
  proto3.util.initPartial(data, this);
@@ -15135,7 +15872,8 @@ var CreateFromUrlRequest = class _CreateFromUrlRequest extends Message {
15135
15872
  T: 8
15136
15873
  /* ScalarType.BOOL */
15137
15874
  },
15138
- { no: 9, name: "auto_captions", kind: "scalar", T: 8, opt: true }
15875
+ { no: 9, name: "auto_captions", kind: "scalar", T: 8, opt: true },
15876
+ { no: 10, name: "auto_insights", kind: "scalar", T: 8, opt: true }
15139
15877
  ]);
15140
15878
  static fromBinary(bytes, options) {
15141
15879
  return new _CreateFromUrlRequest().fromBinary(bytes, options);
@@ -15377,6 +16115,22 @@ var CreateMultipartUploadRequest = class _CreateMultipartUploadRequest extends M
15377
16115
  * @generated from field: optional bool auto_captions = 16;
15378
16116
  */
15379
16117
  autoCaptions;
16118
+ /**
16119
+ * When true, also run AI insights over the inline captions: title
16120
+ * suggestions, a summary, key points, chapters, questions the content
16121
+ * answers, key terms, quotable highlights and topics (the generate track
16122
+ * carries insights.enabled = true; see SubtitleTrack.insights). Requires
16123
+ * auto_captions = true; rejected otherwise with `invalid_argument`, error
16124
+ * code `parameter_incompatible` on auto_insights. Billed as the
16125
+ * `insights_job` (EUR 0.02 per video) and `insights` (EUR 0.005 per source
16126
+ * minute) fees on the transcode job, on top of the captions fee; not
16127
+ * charged when the insights fail. The insights surface as Video.insights.
16128
+ * Deployments without the feature reject it with `invalid_argument`, error
16129
+ * code `parameter_unsupported`. Unset or false = no insights.
16130
+ *
16131
+ * @generated from field: optional bool auto_insights = 17;
16132
+ */
16133
+ autoInsights;
15380
16134
  constructor(data) {
15381
16135
  super();
15382
16136
  proto3.util.initPartial(data, this);
@@ -15432,7 +16186,8 @@ var CreateMultipartUploadRequest = class _CreateMultipartUploadRequest extends M
15432
16186
  T: 8
15433
16187
  /* ScalarType.BOOL */
15434
16188
  },
15435
- { no: 16, name: "auto_captions", kind: "scalar", T: 8, opt: true }
16189
+ { no: 16, name: "auto_captions", kind: "scalar", T: 8, opt: true },
16190
+ { no: 17, name: "auto_insights", kind: "scalar", T: 8, opt: true }
15436
16191
  ]);
15437
16192
  static fromBinary(bytes, options) {
15438
16193
  return new _CreateMultipartUploadRequest().fromBinary(bytes, options);
@@ -16893,6 +17648,146 @@ var TopVideo = class _TopVideo extends Message {
16893
17648
  return proto3.util.equals(_TopVideo, a, b);
16894
17649
  }
16895
17650
  };
17651
+ var GetSeoMarkupRequest = class _GetSeoMarkupRequest extends Message {
17652
+ /**
17653
+ * Video ID.
17654
+ *
17655
+ * @generated from field: string video_id = 1;
17656
+ */
17657
+ videoId = "";
17658
+ /**
17659
+ * Absolute https:// URL of YOUR page that shows the video (the page the
17660
+ * markup will be pasted into). Used as the sitemap location and as the base
17661
+ * of every chapter deep link.
17662
+ *
17663
+ * @generated from field: string watch_url = 2;
17664
+ */
17665
+ watchUrl = "";
17666
+ /**
17667
+ * Query parameter your page reads to start playback at a time, in whole
17668
+ * seconds. Default: "t", giving chapter links like
17669
+ * "https://example.com/watch/42?t=95".
17670
+ *
17671
+ * @generated from field: optional string deep_link_param = 3;
17672
+ */
17673
+ deepLinkParam;
17674
+ /**
17675
+ * ISO 639-2 language of the transcript and insights to use, when the video
17676
+ * has more than one. Default: the video's first generated transcript.
17677
+ *
17678
+ * @generated from field: optional string language = 4;
17679
+ */
17680
+ language;
17681
+ constructor(data) {
17682
+ super();
17683
+ proto3.util.initPartial(data, this);
17684
+ }
17685
+ static runtime = proto3;
17686
+ static typeName = "transcodely.v1.GetSeoMarkupRequest";
17687
+ static fields = proto3.util.newFieldList(() => [
17688
+ {
17689
+ no: 1,
17690
+ name: "video_id",
17691
+ kind: "scalar",
17692
+ T: 9
17693
+ /* ScalarType.STRING */
17694
+ },
17695
+ {
17696
+ no: 2,
17697
+ name: "watch_url",
17698
+ kind: "scalar",
17699
+ T: 9
17700
+ /* ScalarType.STRING */
17701
+ },
17702
+ { no: 3, name: "deep_link_param", kind: "scalar", T: 9, opt: true },
17703
+ { no: 4, name: "language", kind: "scalar", T: 9, opt: true }
17704
+ ]);
17705
+ static fromBinary(bytes, options) {
17706
+ return new _GetSeoMarkupRequest().fromBinary(bytes, options);
17707
+ }
17708
+ static fromJson(jsonValue, options) {
17709
+ return new _GetSeoMarkupRequest().fromJson(jsonValue, options);
17710
+ }
17711
+ static fromJsonString(jsonString, options) {
17712
+ return new _GetSeoMarkupRequest().fromJsonString(jsonString, options);
17713
+ }
17714
+ static equals(a, b) {
17715
+ return proto3.util.equals(_GetSeoMarkupRequest, a, b);
17716
+ }
17717
+ };
17718
+ var GetSeoMarkupResponse = class _GetSeoMarkupResponse extends Message {
17719
+ /**
17720
+ * schema.org VideoObject as JSON-LD, ready to place inside
17721
+ * `<script type="application/ld+json">`. Includes name, description,
17722
+ * thumbnailUrl, uploadDate, duration (ISO 8601), embedUrl and, when the
17723
+ * video has ready insights, hasPart Clip key moments from its chapters,
17724
+ * each linking to watch_url at the chapter start. thumbnailUrl and embedUrl
17725
+ * are stable player URLs that never expire (the thumbnail redirects to the
17726
+ * current poster), so the markup can be stored as-is.
17727
+ *
17728
+ * @generated from field: string json_ld = 1;
17729
+ */
17730
+ jsonLd = "";
17731
+ /**
17732
+ * A `<url>` entry for a video sitemap (namespace
17733
+ * xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"), to add
17734
+ * to your sitemap's `<urlset>`.
17735
+ *
17736
+ * @generated from field: string sitemap_entry = 2;
17737
+ */
17738
+ sitemapEntry = "";
17739
+ /**
17740
+ * Server-renderable semantic HTML (no scripts, no styles): a
17741
+ * `<section class="tx-insights">` with the summary, key points and chapter
17742
+ * links (when insights are ready) and the full transcript inside
17743
+ * `<details><summary>Transcript</summary>…</details>`. Empty sections are
17744
+ * omitted.
17745
+ *
17746
+ * @generated from field: string html_fragment = 3;
17747
+ */
17748
+ htmlFragment = "";
17749
+ constructor(data) {
17750
+ super();
17751
+ proto3.util.initPartial(data, this);
17752
+ }
17753
+ static runtime = proto3;
17754
+ static typeName = "transcodely.v1.GetSeoMarkupResponse";
17755
+ static fields = proto3.util.newFieldList(() => [
17756
+ {
17757
+ no: 1,
17758
+ name: "json_ld",
17759
+ kind: "scalar",
17760
+ T: 9
17761
+ /* ScalarType.STRING */
17762
+ },
17763
+ {
17764
+ no: 2,
17765
+ name: "sitemap_entry",
17766
+ kind: "scalar",
17767
+ T: 9
17768
+ /* ScalarType.STRING */
17769
+ },
17770
+ {
17771
+ no: 3,
17772
+ name: "html_fragment",
17773
+ kind: "scalar",
17774
+ T: 9
17775
+ /* ScalarType.STRING */
17776
+ }
17777
+ ]);
17778
+ static fromBinary(bytes, options) {
17779
+ return new _GetSeoMarkupResponse().fromBinary(bytes, options);
17780
+ }
17781
+ static fromJson(jsonValue, options) {
17782
+ return new _GetSeoMarkupResponse().fromJson(jsonValue, options);
17783
+ }
17784
+ static fromJsonString(jsonString, options) {
17785
+ return new _GetSeoMarkupResponse().fromJsonString(jsonString, options);
17786
+ }
17787
+ static equals(a, b) {
17788
+ return proto3.util.equals(_GetSeoMarkupResponse, a, b);
17789
+ }
17790
+ };
16896
17791
 
16897
17792
  // src/webhooks/types.ts
16898
17793
  var WEBHOOK_EVENT_TYPES = [
@@ -16901,6 +17796,8 @@ var WEBHOOK_EVENT_TYPES = [
16901
17796
  "job.failed",
16902
17797
  "job.canceled",
16903
17798
  "job.progress",
17799
+ "job.insights.ready",
17800
+ "job.insights.failed",
16904
17801
  "output.created",
16905
17802
  "output.ready",
16906
17803
  "output.failed",
@@ -19083,7 +19980,7 @@ function backoff(attempt) {
19083
19980
  }
19084
19981
 
19085
19982
  // src/version.ts
19086
- var SDK_VERSION = "0.3.10";
19983
+ var SDK_VERSION = "0.3.12";
19087
19984
  var API_VERSION = "2026-05-03";
19088
19985
  var DEFAULT_BASE_URL = "https://api.transcodely.com";
19089
19986
 
@@ -22541,7 +23438,8 @@ var UploadEngine = class {
22541
23438
  ...opts.visibility !== void 0 ? { visibility: opts.visibility } : {},
22542
23439
  ...opts.preset !== void 0 ? { preset: opts.preset } : {},
22543
23440
  ...opts.hoverPreviews !== void 0 ? { hoverPreviews: opts.hoverPreviews } : {},
22544
- ...opts.autoCaptions !== void 0 ? { autoCaptions: opts.autoCaptions } : {}
23441
+ ...opts.autoCaptions !== void 0 ? { autoCaptions: opts.autoCaptions } : {},
23442
+ ...opts.autoInsights !== void 0 ? { autoInsights: opts.autoInsights } : {}
22545
23443
  };
22546
23444
  return totalParts === 1 ? await this.single(src, opts, meta, report) : await this.multipart(src, opts, meta, partSize, totalParts, report);
22547
23445
  }
@@ -22875,6 +23773,22 @@ var VideoService = {
22875
23773
  I: ListTopVideosRequest,
22876
23774
  O: ListTopVideosResponse,
22877
23775
  kind: MethodKind.Unary
23776
+ },
23777
+ /**
23778
+ * Get ready-to-paste SEO markup for showing a video on your own page:
23779
+ * schema.org VideoObject JSON-LD (with chapter key moments when the video
23780
+ * has insights), a video sitemap entry, and a server-renderable HTML
23781
+ * fragment with the summary, chapters and full transcript. The video must be
23782
+ * ready and public or unlisted; other videos are refused with
23783
+ * failed_precondition.
23784
+ *
23785
+ * @generated from rpc transcodely.v1.VideoService.GetSeoMarkup
23786
+ */
23787
+ getSeoMarkup: {
23788
+ name: "GetSeoMarkup",
23789
+ I: GetSeoMarkupRequest,
23790
+ O: GetSeoMarkupResponse,
23791
+ kind: MethodKind.Unary
22878
23792
  }
22879
23793
  }
22880
23794
  };
@@ -23031,6 +23945,22 @@ var Videos = class {
23031
23945
  opts
23032
23946
  );
23033
23947
  }
23948
+ /**
23949
+ * Ready-to-paste SEO markup for a hosted video, built for YOUR watch page
23950
+ * (`watchUrl`, absolute https): schema.org VideoObject JSON-LD (with chapter
23951
+ * Clip key moments when insights are ready), a video-sitemap `<url>` entry,
23952
+ * and a server-renderable HTML fragment with the summary, key points,
23953
+ * chapter links and the full transcript. Every string is escaped for its
23954
+ * context; paste it as-is.
23955
+ */
23956
+ async getSeoMarkup(req, opts) {
23957
+ return this.transport.unary(
23958
+ VideoService,
23959
+ VideoService.methods.getSeoMarkup,
23960
+ new GetSeoMarkupRequest(req),
23961
+ opts
23962
+ );
23963
+ }
23034
23964
  };
23035
23965
 
23036
23966
  // src/resources/uploads.ts
@@ -24384,6 +25314,6 @@ var Transcodely = class {
24384
25314
  Transcodely.API_VERSION = API_VERSION;
24385
25315
  Transcodely.SDK_VERSION = SDK_VERSION;
24386
25316
 
24387
- export { APIConnectionError, APIError, API_VERSION, AppStatus, AudioCodec, AuthenticationError, BillingStanding, BillingTreatment, BitrateMode, ConflictError, Container, ContentAwareMode, ContentType, DEFAULT_BASE_URL, DEFAULT_CONCURRENCY, DEFAULT_MAX_RETRIES, DEFAULT_PART_SIZE, DEFAULT_RETRY_BASE_DELAY_MS, DEFAULT_TOLERANCE_SECONDS, DRMSystem, DeliveryFormat, DunningStage, EVENT_ID_HEADER, EncryptionScheme, ExposureThresholdSource, GOPAlignmentMode, HDRFormat, HDRMode, HLSPlaylistType, HLSSegmentFormat, HealthStatus, InvalidRequestError, InvoiceLineType, InvoiceStatus, JobCostLineType, JobPriority, JobStatus, MAX_PARTS, MAX_UPLOAD_SIZE_BYTES, MIN_PART_SIZE, MembershipRole, MembershipStatus, NotFoundError, OrganizationStatus, OriginPermission, OriginProvider, OriginStatus, OutputFormat, OutputStatus, Page, PaymentMethodState, PermissionError, PreconditionError, QualityTier, R2Jurisdiction, RateLimitError, Resolution, SDK_VERSION, SIGNATURE_HEADER, StorageEventSource, StorageEventStatus, SubtitleFormat, SubtitleOperation, ThumbnailFormat, ThumbnailMode, ToneMapping, Transcodely, TranscodelyError, TrustTier, UploadAbortedError, UploadError, Uploads, UserApprovalStatus, UserStatus, VideoCodec, VideoStatus, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatermarkAnchor, WebhookError, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, calculatePartSize, calculateTotalParts, constructEvent, contentTypeForFilename, isEventType, isKnownEvent, toWireJson, verifySignature };
25317
+ export { APIConnectionError, APIError, API_VERSION, AppStatus, AudioCodec, AuthenticationError, BillingStanding, BillingTreatment, BitrateMode, ConflictError, Container, ContentAwareMode, ContentType, DEFAULT_BASE_URL, DEFAULT_CONCURRENCY, DEFAULT_MAX_RETRIES, DEFAULT_PART_SIZE, DEFAULT_RETRY_BASE_DELAY_MS, DEFAULT_TOLERANCE_SECONDS, DRMSystem, DeliveryFormat, DunningStage, EVENT_ID_HEADER, EncryptionScheme, ExposureThresholdSource, GOPAlignmentMode, HDRFormat, HDRMode, HLSPlaylistType, HLSSegmentFormat, HealthStatus, InsightsStatus, InvalidRequestError, InvoiceLineType, InvoiceStatus, JobCostLineType, JobPriority, JobStatus, MAX_PARTS, MAX_UPLOAD_SIZE_BYTES, MIN_PART_SIZE, MembershipRole, MembershipStatus, NotFoundError, OrganizationStatus, OriginPermission, OriginProvider, OriginStatus, OutputFormat, OutputStatus, Page, PaymentMethodState, PermissionError, PreconditionError, QualityTier, R2Jurisdiction, RateLimitError, Resolution, SDK_VERSION, SIGNATURE_HEADER, StorageEventSource, StorageEventStatus, SubtitleFormat, SubtitleOperation, ThumbnailFormat, ThumbnailMode, ToneMapping, Transcodely, TranscodelyError, TranscriptFormat, TranscriptStyle, TrustTier, UploadAbortedError, UploadError, Uploads, UserApprovalStatus, UserStatus, VideoCodec, VideoStatus, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatermarkAnchor, WebhookError, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, calculatePartSize, calculateTotalParts, constructEvent, contentTypeForFilename, isEventType, isKnownEvent, toWireJson, verifySignature };
24388
25318
  //# sourceMappingURL=index.mjs.map
24389
25319
  //# sourceMappingURL=index.mjs.map