@transcodely/sdk 0.3.10 → 0.3.11

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.cjs CHANGED
@@ -4424,7 +4424,8 @@ var WebhookEndpoint = class _WebhookEndpoint extends protobuf.Message {
4424
4424
  * Event types this endpoint subscribes to.
4425
4425
  * Use "*" to subscribe to all event types.
4426
4426
  * Possible values: "job.created", "job.succeeded", "job.failed",
4427
- * "job.canceled", "job.progress", "output.created", "output.ready",
4427
+ * "job.canceled", "job.progress", "job.insights.ready",
4428
+ * "job.insights.failed", "output.created", "output.ready",
4428
4429
  * "output.failed", "output.progress", "video.uploaded", "video.ready",
4429
4430
  * "video.failed", "video.deleted", "video.source_scheduled_for_deletion",
4430
4431
  * "app.created", "app.updated", "app.spend_limit_warning",
@@ -7338,6 +7339,43 @@ protobuf.proto3.util.setEnumType(SubtitleFormat, "transcodely.v1.SubtitleFormat"
7338
7339
  { no: 3, name: "SUBTITLE_FORMAT_TTML" },
7339
7340
  { no: 4, name: "SUBTITLE_FORMAT_ASS" }
7340
7341
  ]);
7342
+ var TranscriptStyle = /* @__PURE__ */ ((TranscriptStyle2) => {
7343
+ TranscriptStyle2[TranscriptStyle2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7344
+ TranscriptStyle2[TranscriptStyle2["CLEAN"] = 1] = "CLEAN";
7345
+ TranscriptStyle2[TranscriptStyle2["LITERAL"] = 2] = "LITERAL";
7346
+ return TranscriptStyle2;
7347
+ })(TranscriptStyle || {});
7348
+ protobuf.proto3.util.setEnumType(TranscriptStyle, "transcodely.v1.TranscriptStyle", [
7349
+ { no: 0, name: "TRANSCRIPT_STYLE_UNSPECIFIED" },
7350
+ { no: 1, name: "TRANSCRIPT_STYLE_CLEAN" },
7351
+ { no: 2, name: "TRANSCRIPT_STYLE_LITERAL" }
7352
+ ]);
7353
+ var TranscriptFormat = /* @__PURE__ */ ((TranscriptFormat2) => {
7354
+ TranscriptFormat2[TranscriptFormat2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7355
+ TranscriptFormat2[TranscriptFormat2["JSON"] = 1] = "JSON";
7356
+ TranscriptFormat2[TranscriptFormat2["TXT"] = 2] = "TXT";
7357
+ TranscriptFormat2[TranscriptFormat2["MD"] = 3] = "MD";
7358
+ return TranscriptFormat2;
7359
+ })(TranscriptFormat || {});
7360
+ protobuf.proto3.util.setEnumType(TranscriptFormat, "transcodely.v1.TranscriptFormat", [
7361
+ { no: 0, name: "TRANSCRIPT_FORMAT_UNSPECIFIED" },
7362
+ { no: 1, name: "TRANSCRIPT_FORMAT_JSON" },
7363
+ { no: 2, name: "TRANSCRIPT_FORMAT_TXT" },
7364
+ { no: 3, name: "TRANSCRIPT_FORMAT_MD" }
7365
+ ]);
7366
+ var InsightsStatus = /* @__PURE__ */ ((InsightsStatus2) => {
7367
+ InsightsStatus2[InsightsStatus2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7368
+ InsightsStatus2[InsightsStatus2["PENDING"] = 1] = "PENDING";
7369
+ InsightsStatus2[InsightsStatus2["READY"] = 2] = "READY";
7370
+ InsightsStatus2[InsightsStatus2["FAILED"] = 3] = "FAILED";
7371
+ return InsightsStatus2;
7372
+ })(InsightsStatus || {});
7373
+ protobuf.proto3.util.setEnumType(InsightsStatus, "transcodely.v1.InsightsStatus", [
7374
+ { no: 0, name: "INSIGHTS_STATUS_UNSPECIFIED" },
7375
+ { no: 1, name: "INSIGHTS_STATUS_PENDING" },
7376
+ { no: 2, name: "INSIGHTS_STATUS_READY" },
7377
+ { no: 3, name: "INSIGHTS_STATUS_FAILED" }
7378
+ ]);
7341
7379
  var BurnInStyle = class _BurnInStyle extends protobuf.Message {
7342
7380
  /**
7343
7381
  * Font family name. Default: "Arial".
@@ -7482,18 +7520,45 @@ var SubtitleTrack = class _SubtitleTrack extends protobuf.Message {
7482
7520
  */
7483
7521
  burnInStyle;
7484
7522
  /**
7485
- * Generate an AI chapters track from the transcript this track produces.
7486
- *
7487
- * Only meaningful together with the `generate` subtitle operation: when
7488
- * enabled, an AI pass over the generated transcript produces a chapters
7489
- * track delivered as WebVTT plus JSON. Free — no pricing impact. The
7490
- * transcript text is processed via the Anthropic API (an external
7491
- * subprocessor). Caption generation is available; the auto-chapters pass is
7492
- * not yet, so setting this is still rejected at job creation.
7523
+ * Deprecated: use insights.enabled. Chapters are one section of the
7524
+ * insights pack, so setting this to true behaves exactly like
7525
+ * insights.enabled = true (and is billed the same way). Only valid with the
7526
+ * `generate` operation. Kept so existing integrations keep working.
7493
7527
  *
7494
- * @generated from field: optional bool generate_chapters = 12;
7528
+ * @generated from field: optional bool generate_chapters = 12 [deprecated = true];
7529
+ * @deprecated
7495
7530
  */
7496
7531
  generateChapters;
7532
+ /**
7533
+ * Transcript renditions written next to the caption file. Only valid with
7534
+ * the `generate` operation. Every generate track produces a transcript in
7535
+ * three renditions (json, txt and md) whether or not this is set; this only
7536
+ * chooses how the txt and md renditions are written. Included in the
7537
+ * captions fee; no extra charge.
7538
+ *
7539
+ * @generated from field: transcodely.v1.TranscriptOptions transcript = 13;
7540
+ */
7541
+ transcript;
7542
+ /**
7543
+ * AI insights over the generated transcript: title suggestions, a summary,
7544
+ * key points, chapters, questions the content answers, key terms, quotable
7545
+ * highlights and topics. Only valid with the `generate` operation. Opt-in
7546
+ * and billed at EUR 0.02 per video plus EUR 0.005 per source minute (the
7547
+ * `insights_job` and `insights` fees, see Job.fees); a job whose insights
7548
+ * fail is not charged for them.
7549
+ *
7550
+ * Insights run after the job completes, so they arrive slightly later than
7551
+ * the captions: watch Job.insights (status pending → ready | failed) or
7552
+ * subscribe to the job.insights.ready / job.insights.failed webhooks.
7553
+ *
7554
+ * Privacy: the transcript TEXT (never the audio or video) is sent to
7555
+ * Anthropic, our AI subprocessor, to produce the insights. It is not used to
7556
+ * train models. Deployments without the feature reject this option with
7557
+ * `parameter_unsupported`.
7558
+ *
7559
+ * @generated from field: transcodely.v1.InsightsOptions insights = 14;
7560
+ */
7561
+ insights;
7497
7562
  constructor(data) {
7498
7563
  super();
7499
7564
  protobuf.proto3.util.initPartial(data, this);
@@ -7512,7 +7577,9 @@ var SubtitleTrack = class _SubtitleTrack extends protobuf.Message {
7512
7577
  { no: 9, name: "hearing_impaired", kind: "scalar", T: 8, opt: true },
7513
7578
  { no: 10, name: "forced", kind: "scalar", T: 8, opt: true },
7514
7579
  { no: 11, name: "burn_in_style", kind: "message", T: BurnInStyle, opt: true },
7515
- { no: 12, name: "generate_chapters", kind: "scalar", T: 8, opt: true }
7580
+ { no: 12, name: "generate_chapters", kind: "scalar", T: 8, opt: true },
7581
+ { no: 13, name: "transcript", kind: "message", T: TranscriptOptions },
7582
+ { no: 14, name: "insights", kind: "message", T: InsightsOptions }
7516
7583
  ]);
7517
7584
  static fromBinary(bytes, options) {
7518
7585
  return new _SubtitleTrack().fromBinary(bytes, options);
@@ -7527,6 +7594,147 @@ var SubtitleTrack = class _SubtitleTrack extends protobuf.Message {
7527
7594
  return protobuf.proto3.util.equals(_SubtitleTrack, a, b);
7528
7595
  }
7529
7596
  };
7597
+ var TranscriptOptions = class _TranscriptOptions extends protobuf.Message {
7598
+ /**
7599
+ * Style of the txt and md renditions. Default: clean.
7600
+ *
7601
+ * @generated from field: optional transcodely.v1.TranscriptStyle style = 1;
7602
+ */
7603
+ style;
7604
+ constructor(data) {
7605
+ super();
7606
+ protobuf.proto3.util.initPartial(data, this);
7607
+ }
7608
+ static runtime = protobuf.proto3;
7609
+ static typeName = "transcodely.v1.TranscriptOptions";
7610
+ static fields = protobuf.proto3.util.newFieldList(() => [
7611
+ { no: 1, name: "style", kind: "enum", T: protobuf.proto3.getEnumType(TranscriptStyle), opt: true }
7612
+ ]);
7613
+ static fromBinary(bytes, options) {
7614
+ return new _TranscriptOptions().fromBinary(bytes, options);
7615
+ }
7616
+ static fromJson(jsonValue, options) {
7617
+ return new _TranscriptOptions().fromJson(jsonValue, options);
7618
+ }
7619
+ static fromJsonString(jsonString, options) {
7620
+ return new _TranscriptOptions().fromJsonString(jsonString, options);
7621
+ }
7622
+ static equals(a, b) {
7623
+ return protobuf.proto3.util.equals(_TranscriptOptions, a, b);
7624
+ }
7625
+ };
7626
+ var InsightsOptions = class _InsightsOptions extends protobuf.Message {
7627
+ /**
7628
+ * Run the insights pass. Billed as the `insights` fee.
7629
+ *
7630
+ * @generated from field: bool enabled = 1;
7631
+ */
7632
+ enabled = false;
7633
+ /**
7634
+ * Optional free-text guidance about the content, its audience or the tone
7635
+ * you want, at most 300 characters (e.g. "Beginner cooking class; friendly
7636
+ * tone" or "Quarterly earnings call for investors"). It steers the writing;
7637
+ * it cannot change what the insights contain or their format.
7638
+ *
7639
+ * @generated from field: optional string hint = 2;
7640
+ */
7641
+ hint;
7642
+ constructor(data) {
7643
+ super();
7644
+ protobuf.proto3.util.initPartial(data, this);
7645
+ }
7646
+ static runtime = protobuf.proto3;
7647
+ static typeName = "transcodely.v1.InsightsOptions";
7648
+ static fields = protobuf.proto3.util.newFieldList(() => [
7649
+ {
7650
+ no: 1,
7651
+ name: "enabled",
7652
+ kind: "scalar",
7653
+ T: 8
7654
+ /* ScalarType.BOOL */
7655
+ },
7656
+ { no: 2, name: "hint", kind: "scalar", T: 9, opt: true }
7657
+ ]);
7658
+ static fromBinary(bytes, options) {
7659
+ return new _InsightsOptions().fromBinary(bytes, options);
7660
+ }
7661
+ static fromJson(jsonValue, options) {
7662
+ return new _InsightsOptions().fromJson(jsonValue, options);
7663
+ }
7664
+ static fromJsonString(jsonString, options) {
7665
+ return new _InsightsOptions().fromJsonString(jsonString, options);
7666
+ }
7667
+ static equals(a, b) {
7668
+ return protobuf.proto3.util.equals(_InsightsOptions, a, b);
7669
+ }
7670
+ };
7671
+ var TranscriptRendition = class _TranscriptRendition extends protobuf.Message {
7672
+ /**
7673
+ * File format: json | txt | md.
7674
+ *
7675
+ * @generated from field: transcodely.v1.TranscriptFormat format = 1;
7676
+ */
7677
+ format = 0 /* UNSPECIFIED */;
7678
+ /**
7679
+ * Storage key of the file in the output destination
7680
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.transcript.md").
7681
+ *
7682
+ * @generated from field: string storage_key = 2;
7683
+ */
7684
+ storageKey = "";
7685
+ /**
7686
+ * Fully-qualified storage URL of the file, the same kind of URL as
7687
+ * SubtitleResult.url.
7688
+ *
7689
+ * @generated from field: string url = 3;
7690
+ */
7691
+ url = "";
7692
+ /**
7693
+ * Ready-to-fetch HTTPS URL for the file, signed and time-limited. Same rules
7694
+ * and lifetime as SubtitleResult.signed_url: present only for
7695
+ * Transcodely-managed storage, emitted on single-resource reads, re-issued on
7696
+ * every read and never stored.
7697
+ *
7698
+ * @generated from field: optional string signed_url = 4;
7699
+ */
7700
+ signedUrl;
7701
+ constructor(data) {
7702
+ super();
7703
+ protobuf.proto3.util.initPartial(data, this);
7704
+ }
7705
+ static runtime = protobuf.proto3;
7706
+ static typeName = "transcodely.v1.TranscriptRendition";
7707
+ static fields = protobuf.proto3.util.newFieldList(() => [
7708
+ { no: 1, name: "format", kind: "enum", T: protobuf.proto3.getEnumType(TranscriptFormat) },
7709
+ {
7710
+ no: 2,
7711
+ name: "storage_key",
7712
+ kind: "scalar",
7713
+ T: 9
7714
+ /* ScalarType.STRING */
7715
+ },
7716
+ {
7717
+ no: 3,
7718
+ name: "url",
7719
+ kind: "scalar",
7720
+ T: 9
7721
+ /* ScalarType.STRING */
7722
+ },
7723
+ { no: 4, name: "signed_url", kind: "scalar", T: 9, opt: true }
7724
+ ]);
7725
+ static fromBinary(bytes, options) {
7726
+ return new _TranscriptRendition().fromBinary(bytes, options);
7727
+ }
7728
+ static fromJson(jsonValue, options) {
7729
+ return new _TranscriptRendition().fromJson(jsonValue, options);
7730
+ }
7731
+ static fromJsonString(jsonString, options) {
7732
+ return new _TranscriptRendition().fromJsonString(jsonString, options);
7733
+ }
7734
+ static equals(a, b) {
7735
+ return protobuf.proto3.util.equals(_TranscriptRendition, a, b);
7736
+ }
7737
+ };
7530
7738
  var ChapterPoint = class _ChapterPoint extends protobuf.Message {
7531
7739
  /**
7532
7740
  * Chapter start, in seconds from the start of the video.
@@ -7655,118 +7863,549 @@ var ChapterResult = class _ChapterResult extends protobuf.Message {
7655
7863
  T: 9
7656
7864
  /* ScalarType.STRING */
7657
7865
  },
7658
- { no: 5, name: "chapters", kind: "message", T: ChapterPoint, repeated: true }
7866
+ { no: 5, name: "chapters", kind: "message", T: ChapterPoint, repeated: true }
7867
+ ]);
7868
+ static fromBinary(bytes, options) {
7869
+ return new _ChapterResult().fromBinary(bytes, options);
7870
+ }
7871
+ static fromJson(jsonValue, options) {
7872
+ return new _ChapterResult().fromJson(jsonValue, options);
7873
+ }
7874
+ static fromJsonString(jsonString, options) {
7875
+ return new _ChapterResult().fromJsonString(jsonString, options);
7876
+ }
7877
+ static equals(a, b) {
7878
+ return protobuf.proto3.util.equals(_ChapterResult, a, b);
7879
+ }
7880
+ };
7881
+ var SubtitleResult = class _SubtitleResult extends protobuf.Message {
7882
+ /**
7883
+ * Output ID (out_…) the subtitle track was configured on.
7884
+ *
7885
+ * @generated from field: string output_id = 1;
7886
+ */
7887
+ outputId = "";
7888
+ /**
7889
+ * Processing operation that produced this artifact
7890
+ * (generate | extract | convert). Lowercase string on the wire.
7891
+ *
7892
+ * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
7893
+ */
7894
+ operation = 0 /* UNSPECIFIED */;
7895
+ /**
7896
+ * Subtitle file format: webvtt | srt | ttml | ass.
7897
+ *
7898
+ * @generated from field: transcodely.v1.SubtitleFormat format = 3;
7899
+ */
7900
+ format = 0 /* UNSPECIFIED */;
7901
+ /**
7902
+ * Detected language (generate with auto-detect) or the configured
7903
+ * ISO 639-2 language code.
7904
+ *
7905
+ * @generated from field: string language = 4;
7906
+ */
7907
+ language = "";
7908
+ /**
7909
+ * Human-readable label (e.g., "English", "Spanish (CC)").
7910
+ *
7911
+ * @generated from field: string label = 5;
7912
+ */
7913
+ label = "";
7914
+ /**
7915
+ * True iff this track was produced by the generate operation
7916
+ * (automatic speech recognition).
7917
+ *
7918
+ * @generated from field: bool auto_generated = 6;
7919
+ */
7920
+ autoGenerated = false;
7921
+ /**
7922
+ * Caption file storage key in the output destination
7923
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
7924
+ *
7925
+ * @generated from field: string storage_key = 7;
7926
+ */
7927
+ storageKey = "";
7928
+ /**
7929
+ * Fully-qualified storage URL as built by the worker, stored as-is and
7930
+ * echoed on the Job response, exactly like JobOutput.output_url.
7931
+ *
7932
+ * @generated from field: string url = 8;
7933
+ */
7934
+ url = "";
7935
+ /**
7936
+ * Storage key of the json transcript rendition. Set only for generate
7937
+ * tracks. The same file is listed in transcript_renditions, which also
7938
+ * carries the txt and md renditions.
7939
+ *
7940
+ * @generated from field: string transcript_storage_key = 9;
7941
+ */
7942
+ transcriptStorageKey = "";
7943
+ /**
7944
+ * Fully-qualified URL of the json transcript rendition. Set only for
7945
+ * generate tracks.
7946
+ *
7947
+ * @generated from field: string transcript_url = 10;
7948
+ */
7949
+ transcriptUrl = "";
7950
+ /**
7951
+ * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
7952
+ *
7953
+ * Points at the same object as url, but as a CDN URL a browser or player can
7954
+ * load — url is a raw storage URI ("s3://…") that no client can fetch.
7955
+ * Present only for jobs writing to Transcodely-managed storage (an
7956
+ * output_origin with provider "transcodely"); jobs writing to your own bucket
7957
+ * get nothing here and should sign url with their own credentials.
7958
+ *
7959
+ * Emitted on single-job reads (Get, Watch) and never on List, and expires —
7960
+ * 6 hours by default — so re-read the job for a fresh one rather than
7961
+ * storing it.
7962
+ *
7963
+ * @generated from field: optional string signed_url = 11;
7964
+ */
7965
+ signedUrl;
7966
+ /**
7967
+ * Ready-to-fetch HTTPS URL for the json transcript rendition, signed and
7968
+ * time-limited. Same rules and lifetime as signed_url; set only for generate
7969
+ * tracks, which are the only ones carrying a transcript.
7970
+ *
7971
+ * @generated from field: optional string transcript_signed_url = 12;
7972
+ */
7973
+ transcriptSignedUrl;
7974
+ /**
7975
+ * Every transcript rendition this generate track produced, one per format
7976
+ * (json, txt, md). Empty for other operations, and for jobs that completed
7977
+ * before renditions existed (those carry only the json transcript above).
7978
+ *
7979
+ * @generated from field: repeated transcodely.v1.TranscriptRendition transcript_renditions = 13;
7980
+ */
7981
+ transcriptRenditions = [];
7982
+ /**
7983
+ * Style the txt and md renditions were written in: clean | literal. Unset
7984
+ * when the track produced no renditions.
7985
+ *
7986
+ * @generated from field: transcodely.v1.TranscriptStyle transcript_style = 14;
7987
+ */
7988
+ transcriptStyle = 0 /* UNSPECIFIED */;
7989
+ constructor(data) {
7990
+ super();
7991
+ protobuf.proto3.util.initPartial(data, this);
7992
+ }
7993
+ static runtime = protobuf.proto3;
7994
+ static typeName = "transcodely.v1.SubtitleResult";
7995
+ static fields = protobuf.proto3.util.newFieldList(() => [
7996
+ {
7997
+ no: 1,
7998
+ name: "output_id",
7999
+ kind: "scalar",
8000
+ T: 9
8001
+ /* ScalarType.STRING */
8002
+ },
8003
+ { no: 2, name: "operation", kind: "enum", T: protobuf.proto3.getEnumType(SubtitleOperation) },
8004
+ { no: 3, name: "format", kind: "enum", T: protobuf.proto3.getEnumType(SubtitleFormat) },
8005
+ {
8006
+ no: 4,
8007
+ name: "language",
8008
+ kind: "scalar",
8009
+ T: 9
8010
+ /* ScalarType.STRING */
8011
+ },
8012
+ {
8013
+ no: 5,
8014
+ name: "label",
8015
+ kind: "scalar",
8016
+ T: 9
8017
+ /* ScalarType.STRING */
8018
+ },
8019
+ {
8020
+ no: 6,
8021
+ name: "auto_generated",
8022
+ kind: "scalar",
8023
+ T: 8
8024
+ /* ScalarType.BOOL */
8025
+ },
8026
+ {
8027
+ no: 7,
8028
+ name: "storage_key",
8029
+ kind: "scalar",
8030
+ T: 9
8031
+ /* ScalarType.STRING */
8032
+ },
8033
+ {
8034
+ no: 8,
8035
+ name: "url",
8036
+ kind: "scalar",
8037
+ T: 9
8038
+ /* ScalarType.STRING */
8039
+ },
8040
+ {
8041
+ no: 9,
8042
+ name: "transcript_storage_key",
8043
+ kind: "scalar",
8044
+ T: 9
8045
+ /* ScalarType.STRING */
8046
+ },
8047
+ {
8048
+ no: 10,
8049
+ name: "transcript_url",
8050
+ kind: "scalar",
8051
+ T: 9
8052
+ /* ScalarType.STRING */
8053
+ },
8054
+ { no: 11, name: "signed_url", kind: "scalar", T: 9, opt: true },
8055
+ { no: 12, name: "transcript_signed_url", kind: "scalar", T: 9, opt: true },
8056
+ { no: 13, name: "transcript_renditions", kind: "message", T: TranscriptRendition, repeated: true },
8057
+ { no: 14, name: "transcript_style", kind: "enum", T: protobuf.proto3.getEnumType(TranscriptStyle) }
8058
+ ]);
8059
+ static fromBinary(bytes, options) {
8060
+ return new _SubtitleResult().fromBinary(bytes, options);
8061
+ }
8062
+ static fromJson(jsonValue, options) {
8063
+ return new _SubtitleResult().fromJson(jsonValue, options);
8064
+ }
8065
+ static fromJsonString(jsonString, options) {
8066
+ return new _SubtitleResult().fromJsonString(jsonString, options);
8067
+ }
8068
+ static equals(a, b) {
8069
+ return protobuf.proto3.util.equals(_SubtitleResult, a, b);
8070
+ }
8071
+ };
8072
+ var InsightsQuestion = class _InsightsQuestion extends protobuf.Message {
8073
+ /**
8074
+ * The question, phrased the way a viewer would ask it.
8075
+ *
8076
+ * @generated from field: string question = 1;
8077
+ */
8078
+ question = "";
8079
+ /**
8080
+ * The answer as the content gives it, at most two sentences.
8081
+ *
8082
+ * @generated from field: string answer = 2;
8083
+ */
8084
+ answer = "";
8085
+ /**
8086
+ * Where the answer starts, in seconds from the start of the video.
8087
+ *
8088
+ * @generated from field: double start_seconds = 3;
8089
+ */
8090
+ startSeconds = 0;
8091
+ constructor(data) {
8092
+ super();
8093
+ protobuf.proto3.util.initPartial(data, this);
8094
+ }
8095
+ static runtime = protobuf.proto3;
8096
+ static typeName = "transcodely.v1.InsightsQuestion";
8097
+ static fields = protobuf.proto3.util.newFieldList(() => [
8098
+ {
8099
+ no: 1,
8100
+ name: "question",
8101
+ kind: "scalar",
8102
+ T: 9
8103
+ /* ScalarType.STRING */
8104
+ },
8105
+ {
8106
+ no: 2,
8107
+ name: "answer",
8108
+ kind: "scalar",
8109
+ T: 9
8110
+ /* ScalarType.STRING */
8111
+ },
8112
+ {
8113
+ no: 3,
8114
+ name: "start_seconds",
8115
+ kind: "scalar",
8116
+ T: 1
8117
+ /* ScalarType.DOUBLE */
8118
+ }
8119
+ ]);
8120
+ static fromBinary(bytes, options) {
8121
+ return new _InsightsQuestion().fromBinary(bytes, options);
8122
+ }
8123
+ static fromJson(jsonValue, options) {
8124
+ return new _InsightsQuestion().fromJson(jsonValue, options);
8125
+ }
8126
+ static fromJsonString(jsonString, options) {
8127
+ return new _InsightsQuestion().fromJsonString(jsonString, options);
8128
+ }
8129
+ static equals(a, b) {
8130
+ return protobuf.proto3.util.equals(_InsightsQuestion, a, b);
8131
+ }
8132
+ };
8133
+ var InsightsTerm = class _InsightsTerm extends protobuf.Message {
8134
+ /**
8135
+ * The term as it is used in the content.
8136
+ *
8137
+ * @generated from field: string term = 1;
8138
+ */
8139
+ term = "";
8140
+ /**
8141
+ * A one-sentence definition, as the content explains it.
8142
+ *
8143
+ * @generated from field: string definition = 2;
8144
+ */
8145
+ definition = "";
8146
+ /**
8147
+ * Where the term is introduced, in seconds from the start of the video.
8148
+ *
8149
+ * @generated from field: double start_seconds = 3;
8150
+ */
8151
+ startSeconds = 0;
8152
+ constructor(data) {
8153
+ super();
8154
+ protobuf.proto3.util.initPartial(data, this);
8155
+ }
8156
+ static runtime = protobuf.proto3;
8157
+ static typeName = "transcodely.v1.InsightsTerm";
8158
+ static fields = protobuf.proto3.util.newFieldList(() => [
8159
+ {
8160
+ no: 1,
8161
+ name: "term",
8162
+ kind: "scalar",
8163
+ T: 9
8164
+ /* ScalarType.STRING */
8165
+ },
8166
+ {
8167
+ no: 2,
8168
+ name: "definition",
8169
+ kind: "scalar",
8170
+ T: 9
8171
+ /* ScalarType.STRING */
8172
+ },
8173
+ {
8174
+ no: 3,
8175
+ name: "start_seconds",
8176
+ kind: "scalar",
8177
+ T: 1
8178
+ /* ScalarType.DOUBLE */
8179
+ }
8180
+ ]);
8181
+ static fromBinary(bytes, options) {
8182
+ return new _InsightsTerm().fromBinary(bytes, options);
8183
+ }
8184
+ static fromJson(jsonValue, options) {
8185
+ return new _InsightsTerm().fromJson(jsonValue, options);
8186
+ }
8187
+ static fromJsonString(jsonString, options) {
8188
+ return new _InsightsTerm().fromJsonString(jsonString, options);
8189
+ }
8190
+ static equals(a, b) {
8191
+ return protobuf.proto3.util.equals(_InsightsTerm, a, b);
8192
+ }
8193
+ };
8194
+ var InsightsHighlight = class _InsightsHighlight extends protobuf.Message {
8195
+ /**
8196
+ * The quote, exactly as it appears in the transcript (never paraphrased).
8197
+ *
8198
+ * @generated from field: string text = 1;
8199
+ */
8200
+ text = "";
8201
+ /**
8202
+ * Start of the paragraph the quote comes from, in seconds from the start of
8203
+ * the video.
8204
+ *
8205
+ * @generated from field: double start_seconds = 2;
8206
+ */
8207
+ startSeconds = 0;
8208
+ /**
8209
+ * End of that paragraph, in seconds from the start of the video.
8210
+ *
8211
+ * @generated from field: double end_seconds = 3;
8212
+ */
8213
+ endSeconds = 0;
8214
+ constructor(data) {
8215
+ super();
8216
+ protobuf.proto3.util.initPartial(data, this);
8217
+ }
8218
+ static runtime = protobuf.proto3;
8219
+ static typeName = "transcodely.v1.InsightsHighlight";
8220
+ static fields = protobuf.proto3.util.newFieldList(() => [
8221
+ {
8222
+ no: 1,
8223
+ name: "text",
8224
+ kind: "scalar",
8225
+ T: 9
8226
+ /* ScalarType.STRING */
8227
+ },
8228
+ {
8229
+ no: 2,
8230
+ name: "start_seconds",
8231
+ kind: "scalar",
8232
+ T: 1
8233
+ /* ScalarType.DOUBLE */
8234
+ },
8235
+ {
8236
+ no: 3,
8237
+ name: "end_seconds",
8238
+ kind: "scalar",
8239
+ T: 1
8240
+ /* ScalarType.DOUBLE */
8241
+ }
7659
8242
  ]);
7660
8243
  static fromBinary(bytes, options) {
7661
- return new _ChapterResult().fromBinary(bytes, options);
8244
+ return new _InsightsHighlight().fromBinary(bytes, options);
7662
8245
  }
7663
8246
  static fromJson(jsonValue, options) {
7664
- return new _ChapterResult().fromJson(jsonValue, options);
8247
+ return new _InsightsHighlight().fromJson(jsonValue, options);
7665
8248
  }
7666
8249
  static fromJsonString(jsonString, options) {
7667
- return new _ChapterResult().fromJsonString(jsonString, options);
8250
+ return new _InsightsHighlight().fromJsonString(jsonString, options);
7668
8251
  }
7669
8252
  static equals(a, b) {
7670
- return protobuf.proto3.util.equals(_ChapterResult, a, b);
8253
+ return protobuf.proto3.util.equals(_InsightsHighlight, a, b);
7671
8254
  }
7672
8255
  };
7673
- var SubtitleResult = class _SubtitleResult extends protobuf.Message {
8256
+ var TranscriptInsights = class _TranscriptInsights extends protobuf.Message {
7674
8257
  /**
7675
- * Output ID (out_…) the subtitle track was configured on.
8258
+ * The out_… output the generate track was configured on.
7676
8259
  *
7677
8260
  * @generated from field: string output_id = 1;
7678
8261
  */
7679
8262
  outputId = "";
7680
8263
  /**
7681
- * Processing operation that produced this artifact
7682
- * (generate | extract | convert). Lowercase string on the wire.
8264
+ * ISO 639-2 language code of the transcript.
7683
8265
  *
7684
- * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
8266
+ * @generated from field: string language = 2;
7685
8267
  */
7686
- operation = 0 /* UNSPECIFIED */;
8268
+ language = "";
7687
8269
  /**
7688
- * Subtitle file format: webvtt | srt | ttml | ass.
8270
+ * pending | ready | failed.
7689
8271
  *
7690
- * @generated from field: transcodely.v1.SubtitleFormat format = 3;
8272
+ * @generated from field: transcodely.v1.InsightsStatus status = 3;
7691
8273
  */
7692
- format = 0 /* UNSPECIFIED */;
8274
+ status = 0 /* UNSPECIFIED */;
7693
8275
  /**
7694
- * Detected language (generate with auto-detect) or the configured
7695
- * ISO 639-2 language code.
8276
+ * Why the insights failed, when status is "failed":
8277
+ * insights_invalid (no usable result could be produced),
8278
+ * insights_unsupported_origin (the output destination cannot be written to
8279
+ * by the API, e.g. an http origin), insights_too_long (transcript over the
8280
+ * size limit), insights_transcript_unavailable (the transcript could not be
8281
+ * read), insights_refused (the content was declined) or insights_unavailable
8282
+ * (the service was unavailable). Empty otherwise.
7696
8283
  *
7697
- * @generated from field: string language = 4;
8284
+ * @generated from field: string error_code = 4;
7698
8285
  */
7699
- language = "";
8286
+ errorCode = "";
7700
8287
  /**
7701
- * Human-readable label (e.g., "English", "Spanish (CC)").
8288
+ * One to three suggested titles for the video.
7702
8289
  *
7703
- * @generated from field: string label = 5;
8290
+ * @generated from field: repeated string title_suggestions = 5;
7704
8291
  */
7705
- label = "";
8292
+ titleSuggestions = [];
7706
8293
  /**
7707
- * True iff this track was produced by the generate operation
7708
- * (automatic speech recognition).
8294
+ * A summary of the content, at most four sentences.
7709
8295
  *
7710
- * @generated from field: bool auto_generated = 6;
8296
+ * @generated from field: string summary = 6;
7711
8297
  */
7712
- autoGenerated = false;
8298
+ summary = "";
7713
8299
  /**
7714
- * Caption file storage key in the output destination
7715
- * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
8300
+ * Three to seven key points.
7716
8301
  *
7717
- * @generated from field: string storage_key = 7;
8302
+ * @generated from field: repeated string key_points = 7;
8303
+ */
8304
+ keyPoints = [];
8305
+ /**
8306
+ * Chapters, ordered by start time and covering the whole video. Also
8307
+ * delivered as a WebVTT chapters file (chapters_url).
8308
+ *
8309
+ * @generated from field: repeated transcodely.v1.ChapterPoint chapters = 8;
8310
+ */
8311
+ chapters = [];
8312
+ /**
8313
+ * Up to six questions the content answers.
8314
+ *
8315
+ * @generated from field: repeated transcodely.v1.InsightsQuestion questions = 9;
8316
+ */
8317
+ questions = [];
8318
+ /**
8319
+ * Up to ten key terms with definitions.
8320
+ *
8321
+ * @generated from field: repeated transcodely.v1.InsightsTerm terms = 10;
8322
+ */
8323
+ terms = [];
8324
+ /**
8325
+ * Quotable moments, each a verbatim quote from the transcript.
8326
+ *
8327
+ * @generated from field: repeated transcodely.v1.InsightsHighlight highlights = 11;
8328
+ */
8329
+ highlights = [];
8330
+ /**
8331
+ * Up to ten short topic labels.
8332
+ *
8333
+ * @generated from field: repeated string topics = 12;
8334
+ */
8335
+ topics = [];
8336
+ /**
8337
+ * Storage key of insights.json (every section above, machine-readable).
8338
+ *
8339
+ * @generated from field: string storage_key = 13;
7718
8340
  */
7719
8341
  storageKey = "";
7720
8342
  /**
7721
- * Fully-qualified storage URL as built by the worker, stored as-is and
7722
- * echoed on the Job response, exactly like JobOutput.output_url.
8343
+ * Fully-qualified storage URL of insights.json.
7723
8344
  *
7724
- * @generated from field: string url = 8;
8345
+ * @generated from field: string url = 14;
7725
8346
  */
7726
8347
  url = "";
7727
8348
  /**
7728
- * Segment-level transcript JSON storage key. Set only for generate
7729
- * tracks (the machine-readable transcript consumed by auto-chapters).
8349
+ * Signed, time-limited HTTPS URL for insights.json. Same rules and lifetime
8350
+ * as SubtitleResult.signed_url.
7730
8351
  *
7731
- * @generated from field: string transcript_storage_key = 9;
8352
+ * @generated from field: optional string signed_url = 15;
7732
8353
  */
7733
- transcriptStorageKey = "";
8354
+ signedUrl;
7734
8355
  /**
7735
- * Fully-qualified transcript URL. Set only for generate tracks.
8356
+ * Storage key of chapters.vtt (WebVTT chapters track).
7736
8357
  *
7737
- * @generated from field: string transcript_url = 10;
8358
+ * @generated from field: string chapters_storage_key = 16;
7738
8359
  */
7739
- transcriptUrl = "";
8360
+ chaptersStorageKey = "";
7740
8361
  /**
7741
- * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
8362
+ * Fully-qualified storage URL of chapters.vtt.
7742
8363
  *
7743
- * Points at the same object as url, but as a CDN URL a browser or player can
7744
- * load — url is a raw storage URI ("s3://…") that no client can fetch.
7745
- * Present only for jobs writing to Transcodely-managed storage (an
7746
- * output_origin with provider "transcodely"); jobs writing to your own bucket
7747
- * get nothing here and should sign url with their own credentials.
8364
+ * @generated from field: string chapters_url = 17;
8365
+ */
8366
+ chaptersUrl = "";
8367
+ /**
8368
+ * Signed, time-limited HTTPS URL for chapters.vtt. Same rules as signed_url.
7748
8369
  *
7749
- * Emitted on single-job reads (Get, Watch) and never on List, and expires —
7750
- * 6 hours by default — so re-read the job for a fresh one rather than
7751
- * storing it.
8370
+ * @generated from field: optional string chapters_signed_url = 18;
8371
+ */
8372
+ chaptersSignedUrl;
8373
+ /**
8374
+ * Storage key of insights.md (every section as a Markdown document).
7752
8375
  *
7753
- * @generated from field: optional string signed_url = 11;
8376
+ * @generated from field: string markdown_storage_key = 19;
7754
8377
  */
7755
- signedUrl;
8378
+ markdownStorageKey = "";
7756
8379
  /**
7757
- * Ready-to-fetch HTTPS URL for the segment transcript, signed and
7758
- * time-limited. Same rules and lifetime as signed_url; set only for generate
7759
- * tracks, which are the only ones carrying a transcript.
8380
+ * Fully-qualified storage URL of insights.md.
7760
8381
  *
7761
- * @generated from field: optional string transcript_signed_url = 12;
8382
+ * @generated from field: string markdown_url = 20;
7762
8383
  */
7763
- transcriptSignedUrl;
8384
+ markdownUrl = "";
8385
+ /**
8386
+ * Signed, time-limited HTTPS URL for insights.md. Same rules as signed_url.
8387
+ *
8388
+ * @generated from field: optional string markdown_signed_url = 21;
8389
+ */
8390
+ markdownSignedUrl;
8391
+ /**
8392
+ * When the insights became ready. Absent until then.
8393
+ *
8394
+ * @generated from field: google.protobuf.Timestamp generated_at = 22;
8395
+ */
8396
+ generatedAt;
8397
+ /**
8398
+ * The hint the insights were requested with (echoed). Empty when none.
8399
+ *
8400
+ * @generated from field: string hint = 23;
8401
+ */
8402
+ hint = "";
7764
8403
  constructor(data) {
7765
8404
  super();
7766
8405
  protobuf.proto3.util.initPartial(data, this);
7767
8406
  }
7768
8407
  static runtime = protobuf.proto3;
7769
- static typeName = "transcodely.v1.SubtitleResult";
8408
+ static typeName = "transcodely.v1.TranscriptInsights";
7770
8409
  static fields = protobuf.proto3.util.newFieldList(() => [
7771
8410
  {
7772
8411
  no: 1,
@@ -7775,71 +8414,100 @@ var SubtitleResult = class _SubtitleResult extends protobuf.Message {
7775
8414
  T: 9
7776
8415
  /* ScalarType.STRING */
7777
8416
  },
7778
- { no: 2, name: "operation", kind: "enum", T: protobuf.proto3.getEnumType(SubtitleOperation) },
7779
- { no: 3, name: "format", kind: "enum", T: protobuf.proto3.getEnumType(SubtitleFormat) },
7780
8417
  {
7781
- no: 4,
8418
+ no: 2,
7782
8419
  name: "language",
7783
8420
  kind: "scalar",
7784
8421
  T: 9
7785
8422
  /* ScalarType.STRING */
7786
8423
  },
8424
+ { no: 3, name: "status", kind: "enum", T: protobuf.proto3.getEnumType(InsightsStatus) },
7787
8425
  {
7788
- no: 5,
7789
- name: "label",
8426
+ no: 4,
8427
+ name: "error_code",
7790
8428
  kind: "scalar",
7791
8429
  T: 9
7792
8430
  /* ScalarType.STRING */
7793
8431
  },
8432
+ { no: 5, name: "title_suggestions", kind: "scalar", T: 9, repeated: true },
7794
8433
  {
7795
8434
  no: 6,
7796
- name: "auto_generated",
8435
+ name: "summary",
7797
8436
  kind: "scalar",
7798
- T: 8
7799
- /* ScalarType.BOOL */
8437
+ T: 9
8438
+ /* ScalarType.STRING */
7800
8439
  },
8440
+ { no: 7, name: "key_points", kind: "scalar", T: 9, repeated: true },
8441
+ { no: 8, name: "chapters", kind: "message", T: ChapterPoint, repeated: true },
8442
+ { no: 9, name: "questions", kind: "message", T: InsightsQuestion, repeated: true },
8443
+ { no: 10, name: "terms", kind: "message", T: InsightsTerm, repeated: true },
8444
+ { no: 11, name: "highlights", kind: "message", T: InsightsHighlight, repeated: true },
8445
+ { no: 12, name: "topics", kind: "scalar", T: 9, repeated: true },
7801
8446
  {
7802
- no: 7,
8447
+ no: 13,
7803
8448
  name: "storage_key",
7804
8449
  kind: "scalar",
7805
8450
  T: 9
7806
8451
  /* ScalarType.STRING */
7807
8452
  },
7808
8453
  {
7809
- no: 8,
8454
+ no: 14,
7810
8455
  name: "url",
7811
8456
  kind: "scalar",
7812
8457
  T: 9
7813
8458
  /* ScalarType.STRING */
7814
8459
  },
8460
+ { no: 15, name: "signed_url", kind: "scalar", T: 9, opt: true },
7815
8461
  {
7816
- no: 9,
7817
- name: "transcript_storage_key",
8462
+ no: 16,
8463
+ name: "chapters_storage_key",
7818
8464
  kind: "scalar",
7819
8465
  T: 9
7820
8466
  /* ScalarType.STRING */
7821
8467
  },
7822
8468
  {
7823
- no: 10,
7824
- name: "transcript_url",
8469
+ no: 17,
8470
+ name: "chapters_url",
7825
8471
  kind: "scalar",
7826
8472
  T: 9
7827
8473
  /* ScalarType.STRING */
7828
8474
  },
7829
- { no: 11, name: "signed_url", kind: "scalar", T: 9, opt: true },
7830
- { no: 12, name: "transcript_signed_url", kind: "scalar", T: 9, opt: true }
8475
+ { no: 18, name: "chapters_signed_url", kind: "scalar", T: 9, opt: true },
8476
+ {
8477
+ no: 19,
8478
+ name: "markdown_storage_key",
8479
+ kind: "scalar",
8480
+ T: 9
8481
+ /* ScalarType.STRING */
8482
+ },
8483
+ {
8484
+ no: 20,
8485
+ name: "markdown_url",
8486
+ kind: "scalar",
8487
+ T: 9
8488
+ /* ScalarType.STRING */
8489
+ },
8490
+ { no: 21, name: "markdown_signed_url", kind: "scalar", T: 9, opt: true },
8491
+ { no: 22, name: "generated_at", kind: "message", T: protobuf.Timestamp },
8492
+ {
8493
+ no: 23,
8494
+ name: "hint",
8495
+ kind: "scalar",
8496
+ T: 9
8497
+ /* ScalarType.STRING */
8498
+ }
7831
8499
  ]);
7832
8500
  static fromBinary(bytes, options) {
7833
- return new _SubtitleResult().fromBinary(bytes, options);
8501
+ return new _TranscriptInsights().fromBinary(bytes, options);
7834
8502
  }
7835
8503
  static fromJson(jsonValue, options) {
7836
- return new _SubtitleResult().fromJson(jsonValue, options);
8504
+ return new _TranscriptInsights().fromJson(jsonValue, options);
7837
8505
  }
7838
8506
  static fromJsonString(jsonString, options) {
7839
- return new _SubtitleResult().fromJsonString(jsonString, options);
8507
+ return new _TranscriptInsights().fromJsonString(jsonString, options);
7840
8508
  }
7841
8509
  static equals(a, b) {
7842
- return protobuf.proto3.util.equals(_SubtitleResult, a, b);
8510
+ return protobuf.proto3.util.equals(_TranscriptInsights, a, b);
7843
8511
  }
7844
8512
  };
7845
8513
  var DRMSystem = /* @__PURE__ */ ((DRMSystem2) => {
@@ -13012,9 +13680,8 @@ var Job = class _Job extends protobuf.Message {
13012
13680
  */
13013
13681
  inputVideoId = "";
13014
13682
  /**
13015
- * Auto-generated chapter tracks, one per output whose generated caption track
13016
- * had chapters enabled (SubtitleTrack.generate_chapters). Populated once the
13017
- * auto-chapters pass ships; empty until then.
13683
+ * Never populated; superseded by insights, whose chapters section (and
13684
+ * chapters.vtt file) replaces it.
13018
13685
  *
13019
13686
  * @generated from field: repeated transcodely.v1.ChapterResult chapter_results = 35;
13020
13687
  */
@@ -13046,6 +13713,16 @@ var Job = class _Job extends protobuf.Message {
13046
13713
  * @generated from field: transcodely.v1.JobCostBreakdown cost_breakdown = 38;
13047
13714
  */
13048
13715
  costBreakdown;
13716
+ /**
13717
+ * AI insights, one per generate subtitle track that requested them
13718
+ * (SubtitleTrack.insights). Listed with status "pending" from creation;
13719
+ * they are produced after the job completes and move to "ready" or
13720
+ * "failed" (webhooks job.insights.ready / job.insights.failed). Signed URLs
13721
+ * follow the same rules as SubtitleResult.signed_url. Server-set; read-only.
13722
+ *
13723
+ * @generated from field: repeated transcodely.v1.TranscriptInsights insights = 39;
13724
+ */
13725
+ insights = [];
13049
13726
  constructor(data) {
13050
13727
  super();
13051
13728
  protobuf.proto3.util.initPartial(data, this);
@@ -13148,7 +13825,8 @@ var Job = class _Job extends protobuf.Message {
13148
13825
  { no: 35, name: "chapter_results", kind: "message", T: ChapterResult, repeated: true },
13149
13826
  { no: 36, name: "clip", kind: "message", T: ClipConfig, opt: true },
13150
13827
  { no: 37, name: "video_id", kind: "scalar", T: 9, opt: true },
13151
- { no: 38, name: "cost_breakdown", kind: "message", T: JobCostBreakdown }
13828
+ { no: 38, name: "cost_breakdown", kind: "message", T: JobCostBreakdown },
13829
+ { no: 39, name: "insights", kind: "message", T: TranscriptInsights, repeated: true }
13152
13830
  ]);
13153
13831
  static fromBinary(bytes, options) {
13154
13832
  return new _Job().fromBinary(bytes, options);
@@ -13166,8 +13844,13 @@ var Job = class _Job extends protobuf.Message {
13166
13844
  var JobFee = class _JobFee extends protobuf.Message {
13167
13845
  /**
13168
13846
  * Fee discriminator:
13169
- * "processing" — the flat per-job processing fee (see Job.fees).
13170
- * "captions" — AI caption generation.
13847
+ * "processing" — the flat per-job processing fee (see Job.fees).
13848
+ * "captions" — AI caption generation (transcript renditions included).
13849
+ * "insights" — AI insights, the per-source-minute part (EUR 0.005/min).
13850
+ * "insights_job" — AI insights, the per-video part (EUR 0.02).
13851
+ * The two insights fees stay estimated until the insights are ready (after
13852
+ * the job completes), then are confirmed together, or voided together when
13853
+ * the insights fail.
13171
13854
  *
13172
13855
  * @generated from field: string fee_type = 1;
13173
13856
  */
@@ -14294,6 +14977,15 @@ var Video = class _Video extends protobuf.Message {
14294
14977
  * @generated from field: repeated transcodely.v1.VideoTextTrack text_tracks = 49;
14295
14978
  */
14296
14979
  textTracks = [];
14980
+ /**
14981
+ * AI insights for this video, one per transcript language, from the
14982
+ * captions job that requested them (SubtitleTrack.insights). Each moves
14983
+ * from "pending" to "ready" or "failed". Signed URLs are computed per
14984
+ * request under the same rules as text track URLs and are never stored.
14985
+ *
14986
+ * @generated from field: repeated transcodely.v1.TranscriptInsights insights = 53;
14987
+ */
14988
+ insights = [];
14297
14989
  /**
14298
14990
  * Storage and cost transparency.
14299
14991
  *
@@ -14458,6 +15150,7 @@ var Video = class _Video extends protobuf.Message {
14458
15150
  { no: 45, name: "hover_preview_mp4_url", kind: "scalar", T: 9, opt: true },
14459
15151
  { no: 25, name: "renditions", kind: "message", T: VideoRendition, repeated: true },
14460
15152
  { no: 49, name: "text_tracks", kind: "message", T: VideoTextTrack, repeated: true },
15153
+ { no: 53, name: "insights", kind: "message", T: TranscriptInsights, repeated: true },
14461
15154
  {
14462
15155
  no: 30,
14463
15156
  name: "output_size_bytes",
@@ -14685,6 +15378,16 @@ var VideoTextTrack = class _VideoTextTrack extends protobuf.Message {
14685
15378
  * @generated from field: google.protobuf.Timestamp created_at = 9;
14686
15379
  */
14687
15380
  createdAt;
15381
+ /**
15382
+ * Transcript renditions of an auto-generated track, one per format (json,
15383
+ * txt, md). Empty for tracks that were not generated by speech recognition
15384
+ * and for tracks generated before renditions existed. Each signed_url is
15385
+ * computed per request under exactly the same rules as url and is never
15386
+ * stored.
15387
+ *
15388
+ * @generated from field: repeated transcodely.v1.TranscriptRendition transcript_renditions = 10;
15389
+ */
15390
+ transcriptRenditions = [];
14688
15391
  constructor(data) {
14689
15392
  super();
14690
15393
  protobuf.proto3.util.initPartial(data, this);
@@ -14742,7 +15445,8 @@ var VideoTextTrack = class _VideoTextTrack extends protobuf.Message {
14742
15445
  /* ScalarType.BOOL */
14743
15446
  },
14744
15447
  { no: 8, name: "url", kind: "scalar", T: 9, opt: true },
14745
- { no: 9, name: "created_at", kind: "message", T: protobuf.Timestamp }
15448
+ { no: 9, name: "created_at", kind: "message", T: protobuf.Timestamp },
15449
+ { no: 10, name: "transcript_renditions", kind: "message", T: TranscriptRendition, repeated: true }
14746
15450
  ]);
14747
15451
  static fromBinary(bytes, options) {
14748
15452
  return new _VideoTextTrack().fromBinary(bytes, options);
@@ -16895,6 +17599,146 @@ var TopVideo = class _TopVideo extends protobuf.Message {
16895
17599
  return protobuf.proto3.util.equals(_TopVideo, a, b);
16896
17600
  }
16897
17601
  };
17602
+ var GetSeoMarkupRequest = class _GetSeoMarkupRequest extends protobuf.Message {
17603
+ /**
17604
+ * Video ID.
17605
+ *
17606
+ * @generated from field: string video_id = 1;
17607
+ */
17608
+ videoId = "";
17609
+ /**
17610
+ * Absolute https:// URL of YOUR page that shows the video (the page the
17611
+ * markup will be pasted into). Used as the sitemap location and as the base
17612
+ * of every chapter deep link.
17613
+ *
17614
+ * @generated from field: string watch_url = 2;
17615
+ */
17616
+ watchUrl = "";
17617
+ /**
17618
+ * Query parameter your page reads to start playback at a time, in whole
17619
+ * seconds. Default: "t", giving chapter links like
17620
+ * "https://example.com/watch/42?t=95".
17621
+ *
17622
+ * @generated from field: optional string deep_link_param = 3;
17623
+ */
17624
+ deepLinkParam;
17625
+ /**
17626
+ * ISO 639-2 language of the transcript and insights to use, when the video
17627
+ * has more than one. Default: the video's first generated transcript.
17628
+ *
17629
+ * @generated from field: optional string language = 4;
17630
+ */
17631
+ language;
17632
+ constructor(data) {
17633
+ super();
17634
+ protobuf.proto3.util.initPartial(data, this);
17635
+ }
17636
+ static runtime = protobuf.proto3;
17637
+ static typeName = "transcodely.v1.GetSeoMarkupRequest";
17638
+ static fields = protobuf.proto3.util.newFieldList(() => [
17639
+ {
17640
+ no: 1,
17641
+ name: "video_id",
17642
+ kind: "scalar",
17643
+ T: 9
17644
+ /* ScalarType.STRING */
17645
+ },
17646
+ {
17647
+ no: 2,
17648
+ name: "watch_url",
17649
+ kind: "scalar",
17650
+ T: 9
17651
+ /* ScalarType.STRING */
17652
+ },
17653
+ { no: 3, name: "deep_link_param", kind: "scalar", T: 9, opt: true },
17654
+ { no: 4, name: "language", kind: "scalar", T: 9, opt: true }
17655
+ ]);
17656
+ static fromBinary(bytes, options) {
17657
+ return new _GetSeoMarkupRequest().fromBinary(bytes, options);
17658
+ }
17659
+ static fromJson(jsonValue, options) {
17660
+ return new _GetSeoMarkupRequest().fromJson(jsonValue, options);
17661
+ }
17662
+ static fromJsonString(jsonString, options) {
17663
+ return new _GetSeoMarkupRequest().fromJsonString(jsonString, options);
17664
+ }
17665
+ static equals(a, b) {
17666
+ return protobuf.proto3.util.equals(_GetSeoMarkupRequest, a, b);
17667
+ }
17668
+ };
17669
+ var GetSeoMarkupResponse = class _GetSeoMarkupResponse extends protobuf.Message {
17670
+ /**
17671
+ * schema.org VideoObject as JSON-LD, ready to place inside
17672
+ * `<script type="application/ld+json">`. Includes name, description,
17673
+ * thumbnailUrl, uploadDate, duration (ISO 8601), embedUrl and, when the
17674
+ * video has ready insights, hasPart Clip key moments from its chapters,
17675
+ * each linking to watch_url at the chapter start. thumbnailUrl and embedUrl
17676
+ * are stable player URLs that never expire (the thumbnail redirects to the
17677
+ * current poster), so the markup can be stored as-is.
17678
+ *
17679
+ * @generated from field: string json_ld = 1;
17680
+ */
17681
+ jsonLd = "";
17682
+ /**
17683
+ * A `<url>` entry for a video sitemap (namespace
17684
+ * xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"), to add
17685
+ * to your sitemap's `<urlset>`.
17686
+ *
17687
+ * @generated from field: string sitemap_entry = 2;
17688
+ */
17689
+ sitemapEntry = "";
17690
+ /**
17691
+ * Server-renderable semantic HTML (no scripts, no styles): a
17692
+ * `<section class="tx-insights">` with the summary, key points and chapter
17693
+ * links (when insights are ready) and the full transcript inside
17694
+ * `<details><summary>Transcript</summary>…</details>`. Empty sections are
17695
+ * omitted.
17696
+ *
17697
+ * @generated from field: string html_fragment = 3;
17698
+ */
17699
+ htmlFragment = "";
17700
+ constructor(data) {
17701
+ super();
17702
+ protobuf.proto3.util.initPartial(data, this);
17703
+ }
17704
+ static runtime = protobuf.proto3;
17705
+ static typeName = "transcodely.v1.GetSeoMarkupResponse";
17706
+ static fields = protobuf.proto3.util.newFieldList(() => [
17707
+ {
17708
+ no: 1,
17709
+ name: "json_ld",
17710
+ kind: "scalar",
17711
+ T: 9
17712
+ /* ScalarType.STRING */
17713
+ },
17714
+ {
17715
+ no: 2,
17716
+ name: "sitemap_entry",
17717
+ kind: "scalar",
17718
+ T: 9
17719
+ /* ScalarType.STRING */
17720
+ },
17721
+ {
17722
+ no: 3,
17723
+ name: "html_fragment",
17724
+ kind: "scalar",
17725
+ T: 9
17726
+ /* ScalarType.STRING */
17727
+ }
17728
+ ]);
17729
+ static fromBinary(bytes, options) {
17730
+ return new _GetSeoMarkupResponse().fromBinary(bytes, options);
17731
+ }
17732
+ static fromJson(jsonValue, options) {
17733
+ return new _GetSeoMarkupResponse().fromJson(jsonValue, options);
17734
+ }
17735
+ static fromJsonString(jsonString, options) {
17736
+ return new _GetSeoMarkupResponse().fromJsonString(jsonString, options);
17737
+ }
17738
+ static equals(a, b) {
17739
+ return protobuf.proto3.util.equals(_GetSeoMarkupResponse, a, b);
17740
+ }
17741
+ };
16898
17742
 
16899
17743
  // src/webhooks/types.ts
16900
17744
  var WEBHOOK_EVENT_TYPES = [
@@ -16903,6 +17747,8 @@ var WEBHOOK_EVENT_TYPES = [
16903
17747
  "job.failed",
16904
17748
  "job.canceled",
16905
17749
  "job.progress",
17750
+ "job.insights.ready",
17751
+ "job.insights.failed",
16906
17752
  "output.created",
16907
17753
  "output.ready",
16908
17754
  "output.failed",
@@ -19085,7 +19931,7 @@ function backoff(attempt) {
19085
19931
  }
19086
19932
 
19087
19933
  // src/version.ts
19088
- var SDK_VERSION = "0.3.10";
19934
+ var SDK_VERSION = "0.3.11";
19089
19935
  var API_VERSION = "2026-05-03";
19090
19936
  var DEFAULT_BASE_URL = "https://api.transcodely.com";
19091
19937
 
@@ -22877,6 +23723,22 @@ var VideoService = {
22877
23723
  I: ListTopVideosRequest,
22878
23724
  O: ListTopVideosResponse,
22879
23725
  kind: protobuf.MethodKind.Unary
23726
+ },
23727
+ /**
23728
+ * Get ready-to-paste SEO markup for showing a video on your own page:
23729
+ * schema.org VideoObject JSON-LD (with chapter key moments when the video
23730
+ * has insights), a video sitemap entry, and a server-renderable HTML
23731
+ * fragment with the summary, chapters and full transcript. The video must be
23732
+ * ready and public or unlisted; other videos are refused with
23733
+ * failed_precondition.
23734
+ *
23735
+ * @generated from rpc transcodely.v1.VideoService.GetSeoMarkup
23736
+ */
23737
+ getSeoMarkup: {
23738
+ name: "GetSeoMarkup",
23739
+ I: GetSeoMarkupRequest,
23740
+ O: GetSeoMarkupResponse,
23741
+ kind: protobuf.MethodKind.Unary
22880
23742
  }
22881
23743
  }
22882
23744
  };
@@ -23033,6 +23895,22 @@ var Videos = class {
23033
23895
  opts
23034
23896
  );
23035
23897
  }
23898
+ /**
23899
+ * Ready-to-paste SEO markup for a hosted video, built for YOUR watch page
23900
+ * (`watchUrl`, absolute https): schema.org VideoObject JSON-LD (with chapter
23901
+ * Clip key moments when insights are ready), a video-sitemap `<url>` entry,
23902
+ * and a server-renderable HTML fragment with the summary, key points,
23903
+ * chapter links and the full transcript. Every string is escaped for its
23904
+ * context; paste it as-is.
23905
+ */
23906
+ async getSeoMarkup(req, opts) {
23907
+ return this.transport.unary(
23908
+ VideoService,
23909
+ VideoService.methods.getSeoMarkup,
23910
+ new GetSeoMarkupRequest(req),
23911
+ opts
23912
+ );
23913
+ }
23036
23914
  };
23037
23915
 
23038
23916
  // src/resources/uploads.ts
@@ -24417,6 +25295,7 @@ exports.HDRMode = HDRMode;
24417
25295
  exports.HLSPlaylistType = HLSPlaylistType;
24418
25296
  exports.HLSSegmentFormat = HLSSegmentFormat;
24419
25297
  exports.HealthStatus = HealthStatus;
25298
+ exports.InsightsStatus = InsightsStatus;
24420
25299
  exports.InvalidRequestError = InvalidRequestError;
24421
25300
  exports.InvoiceLineType = InvoiceLineType;
24422
25301
  exports.InvoiceStatus = InvoiceStatus;
@@ -24454,6 +25333,8 @@ exports.ThumbnailMode = ThumbnailMode;
24454
25333
  exports.ToneMapping = ToneMapping;
24455
25334
  exports.Transcodely = Transcodely;
24456
25335
  exports.TranscodelyError = TranscodelyError;
25336
+ exports.TranscriptFormat = TranscriptFormat;
25337
+ exports.TranscriptStyle = TranscriptStyle;
24457
25338
  exports.TrustTier = TrustTier;
24458
25339
  exports.UploadAbortedError = UploadAbortedError;
24459
25340
  exports.UploadError = UploadError;