@transcodely/sdk 0.3.9 → 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.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.
@@ -7674,97 +7882,528 @@ var SubtitleResult = class _SubtitleResult extends Message {
7674
7882
  *
7675
7883
  * @generated from field: string output_id = 1;
7676
7884
  */
7677
- outputId = "";
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);
8243
+ }
8244
+ static fromJson(jsonValue, options) {
8245
+ return new _InsightsHighlight().fromJson(jsonValue, options);
8246
+ }
8247
+ static fromJsonString(jsonString, options) {
8248
+ return new _InsightsHighlight().fromJsonString(jsonString, options);
8249
+ }
8250
+ static equals(a, b) {
8251
+ return proto3.util.equals(_InsightsHighlight, a, b);
8252
+ }
8253
+ };
8254
+ var TranscriptInsights = class _TranscriptInsights extends Message {
8255
+ /**
8256
+ * The out_… output the generate track was configured on.
8257
+ *
8258
+ * @generated from field: string output_id = 1;
8259
+ */
8260
+ outputId = "";
8261
+ /**
8262
+ * ISO 639-2 language code of the transcript.
8263
+ *
8264
+ * @generated from field: string language = 2;
8265
+ */
8266
+ language = "";
8267
+ /**
8268
+ * pending | ready | failed.
8269
+ *
8270
+ * @generated from field: transcodely.v1.InsightsStatus status = 3;
8271
+ */
8272
+ status = 0 /* UNSPECIFIED */;
8273
+ /**
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.
8281
+ *
8282
+ * @generated from field: string error_code = 4;
8283
+ */
8284
+ errorCode = "";
8285
+ /**
8286
+ * One to three suggested titles for the video.
8287
+ *
8288
+ * @generated from field: repeated string title_suggestions = 5;
8289
+ */
8290
+ titleSuggestions = [];
8291
+ /**
8292
+ * A summary of the content, at most four sentences.
8293
+ *
8294
+ * @generated from field: string summary = 6;
8295
+ */
8296
+ summary = "";
8297
+ /**
8298
+ * Three to seven key points.
8299
+ *
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 = [];
7678
8322
  /**
7679
- * Processing operation that produced this artifact
7680
- * (generate | extract | convert). Lowercase string on the wire.
8323
+ * Quotable moments, each a verbatim quote from the transcript.
7681
8324
  *
7682
- * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
8325
+ * @generated from field: repeated transcodely.v1.InsightsHighlight highlights = 11;
7683
8326
  */
7684
- operation = 0 /* UNSPECIFIED */;
8327
+ highlights = [];
7685
8328
  /**
7686
- * Subtitle file format: webvtt | srt | ttml | ass.
8329
+ * Up to ten short topic labels.
7687
8330
  *
7688
- * @generated from field: transcodely.v1.SubtitleFormat format = 3;
8331
+ * @generated from field: repeated string topics = 12;
7689
8332
  */
7690
- format = 0 /* UNSPECIFIED */;
8333
+ topics = [];
7691
8334
  /**
7692
- * Detected language (generate with auto-detect) or the configured
7693
- * ISO 639-2 language code.
8335
+ * Storage key of insights.json (every section above, machine-readable).
7694
8336
  *
7695
- * @generated from field: string language = 4;
8337
+ * @generated from field: string storage_key = 13;
7696
8338
  */
7697
- language = "";
8339
+ storageKey = "";
7698
8340
  /**
7699
- * Human-readable label (e.g., "English", "Spanish (CC)").
8341
+ * Fully-qualified storage URL of insights.json.
7700
8342
  *
7701
- * @generated from field: string label = 5;
8343
+ * @generated from field: string url = 14;
7702
8344
  */
7703
- label = "";
8345
+ url = "";
7704
8346
  /**
7705
- * True iff this track was produced by the generate operation
7706
- * (automatic speech recognition).
8347
+ * Signed, time-limited HTTPS URL for insights.json. Same rules and lifetime
8348
+ * as SubtitleResult.signed_url.
7707
8349
  *
7708
- * @generated from field: bool auto_generated = 6;
8350
+ * @generated from field: optional string signed_url = 15;
7709
8351
  */
7710
- autoGenerated = false;
8352
+ signedUrl;
7711
8353
  /**
7712
- * Caption file storage key in the output destination
7713
- * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
8354
+ * Storage key of chapters.vtt (WebVTT chapters track).
7714
8355
  *
7715
- * @generated from field: string storage_key = 7;
8356
+ * @generated from field: string chapters_storage_key = 16;
7716
8357
  */
7717
- storageKey = "";
8358
+ chaptersStorageKey = "";
7718
8359
  /**
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.
8360
+ * Fully-qualified storage URL of chapters.vtt.
7721
8361
  *
7722
- * @generated from field: string url = 8;
8362
+ * @generated from field: string chapters_url = 17;
7723
8363
  */
7724
- url = "";
8364
+ chaptersUrl = "";
7725
8365
  /**
7726
- * Segment-level transcript JSON storage key. Set only for generate
7727
- * tracks (the machine-readable transcript consumed by auto-chapters).
8366
+ * Signed, time-limited HTTPS URL for chapters.vtt. Same rules as signed_url.
7728
8367
  *
7729
- * @generated from field: string transcript_storage_key = 9;
8368
+ * @generated from field: optional string chapters_signed_url = 18;
7730
8369
  */
7731
- transcriptStorageKey = "";
8370
+ chaptersSignedUrl;
7732
8371
  /**
7733
- * Fully-qualified transcript URL. Set only for generate tracks.
8372
+ * Storage key of insights.md (every section as a Markdown document).
7734
8373
  *
7735
- * @generated from field: string transcript_url = 10;
8374
+ * @generated from field: string markdown_storage_key = 19;
7736
8375
  */
7737
- transcriptUrl = "";
8376
+ markdownStorageKey = "";
7738
8377
  /**
7739
- * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
8378
+ * Fully-qualified storage URL of insights.md.
7740
8379
  *
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.
8380
+ * @generated from field: string markdown_url = 20;
8381
+ */
8382
+ markdownUrl = "";
8383
+ /**
8384
+ * Signed, time-limited HTTPS URL for insights.md. Same rules as signed_url.
7746
8385
  *
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.
8386
+ * @generated from field: optional string markdown_signed_url = 21;
8387
+ */
8388
+ markdownSignedUrl;
8389
+ /**
8390
+ * When the insights became ready. Absent until then.
7750
8391
  *
7751
- * @generated from field: optional string signed_url = 11;
8392
+ * @generated from field: google.protobuf.Timestamp generated_at = 22;
7752
8393
  */
7753
- signedUrl;
8394
+ generatedAt;
7754
8395
  /**
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.
8396
+ * The hint the insights were requested with (echoed). Empty when none.
7758
8397
  *
7759
- * @generated from field: optional string transcript_signed_url = 12;
8398
+ * @generated from field: string hint = 23;
7760
8399
  */
7761
- transcriptSignedUrl;
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) => {
@@ -11930,6 +12598,32 @@ var OutputReportContentAware = class _OutputReportContentAware extends Message {
11930
12598
  * @generated from field: optional int32 crf_chosen = 4;
11931
12599
  */
11932
12600
  crfChosen;
12601
+ /**
12602
+ * Constant-rate-factor the rung would have used WITHOUT the search: the
12603
+ * quality tier's static value, and the first point the search measured.
12604
+ * Compare it with crf_chosen to see what per-title changed. Absent when the
12605
+ * search did not report where it started.
12606
+ *
12607
+ * @generated from field: optional int32 seed_crf = 5;
12608
+ */
12609
+ seedCrf;
12610
+ /**
12611
+ * Whether the search found a setting that reached vmaf_target. When false,
12612
+ * crf_chosen is the best-scoring setting it measured, and vmaf_achieved is
12613
+ * below the target.
12614
+ *
12615
+ * @generated from field: optional bool met_target = 6;
12616
+ */
12617
+ metTarget;
12618
+ /**
12619
+ * Every sample the search measured, in the order it measured them. Each is
12620
+ * a short cut of the source encoded at one CRF with this rung's delivery
12621
+ * settings and scored against the original. Empty when the analysis did not
12622
+ * report its probes (workers before 1.29.0).
12623
+ *
12624
+ * @generated from field: repeated transcodely.v1.OutputReportContentAwareProbe probes = 7;
12625
+ */
12626
+ probes = [];
11933
12627
  constructor(data) {
11934
12628
  super();
11935
12629
  proto3.util.initPartial(data, this);
@@ -11946,7 +12640,10 @@ var OutputReportContentAware = class _OutputReportContentAware extends Message {
11946
12640
  },
11947
12641
  { no: 2, name: "vmaf_target", kind: "scalar", T: 1, opt: true },
11948
12642
  { no: 3, name: "vmaf_achieved", kind: "scalar", T: 1, opt: true },
11949
- { no: 4, name: "crf_chosen", kind: "scalar", T: 5, opt: true }
12643
+ { no: 4, name: "crf_chosen", kind: "scalar", T: 5, opt: true },
12644
+ { no: 5, name: "seed_crf", kind: "scalar", T: 5, opt: true },
12645
+ { no: 6, name: "met_target", kind: "scalar", T: 8, opt: true },
12646
+ { no: 7, name: "probes", kind: "message", T: OutputReportContentAwareProbe, repeated: true }
11950
12647
  ]);
11951
12648
  static fromBinary(bytes, options) {
11952
12649
  return new _OutputReportContentAware().fromBinary(bytes, options);
@@ -11961,6 +12658,70 @@ var OutputReportContentAware = class _OutputReportContentAware extends Message {
11961
12658
  return proto3.util.equals(_OutputReportContentAware, a, b);
11962
12659
  }
11963
12660
  };
12661
+ var OutputReportContentAwareProbe = class _OutputReportContentAwareProbe extends Message {
12662
+ /**
12663
+ * CRF the sample was encoded at.
12664
+ *
12665
+ * @generated from field: int32 crf = 1;
12666
+ */
12667
+ crf = 0;
12668
+ /**
12669
+ * VMAF the sample scored, 0-100.
12670
+ *
12671
+ * @generated from field: double vmaf = 2;
12672
+ */
12673
+ vmaf = 0;
12674
+ /**
12675
+ * Bitrate of the encoded sample in kilobits per second. Two probes' bitrates
12676
+ * compare directly because every sample is the same cut of the source; the
12677
+ * ratio between the seed_crf probe and the crf_chosen probe is the size
12678
+ * change per-title made on that sample. Absent when the encoder did not
12679
+ * report the sample's size.
12680
+ *
12681
+ * The sample is encoded VIDEO-ONLY — the search's cuts drop audio, subtitles
12682
+ * and data streams — so this is the sample's video bitrate, not the rate of a
12683
+ * muxed file. Comparing it against a delivered file's bitrate, which includes
12684
+ * every stream that file carries, compares two different things.
12685
+ *
12686
+ * @generated from field: optional double bitrate_kbps = 3;
12687
+ */
12688
+ bitrateKbps;
12689
+ constructor(data) {
12690
+ super();
12691
+ proto3.util.initPartial(data, this);
12692
+ }
12693
+ static runtime = proto3;
12694
+ static typeName = "transcodely.v1.OutputReportContentAwareProbe";
12695
+ static fields = proto3.util.newFieldList(() => [
12696
+ {
12697
+ no: 1,
12698
+ name: "crf",
12699
+ kind: "scalar",
12700
+ T: 5
12701
+ /* ScalarType.INT32 */
12702
+ },
12703
+ {
12704
+ no: 2,
12705
+ name: "vmaf",
12706
+ kind: "scalar",
12707
+ T: 1
12708
+ /* ScalarType.DOUBLE */
12709
+ },
12710
+ { no: 3, name: "bitrate_kbps", kind: "scalar", T: 1, opt: true }
12711
+ ]);
12712
+ static fromBinary(bytes, options) {
12713
+ return new _OutputReportContentAwareProbe().fromBinary(bytes, options);
12714
+ }
12715
+ static fromJson(jsonValue, options) {
12716
+ return new _OutputReportContentAwareProbe().fromJson(jsonValue, options);
12717
+ }
12718
+ static fromJsonString(jsonString, options) {
12719
+ return new _OutputReportContentAwareProbe().fromJsonString(jsonString, options);
12720
+ }
12721
+ static equals(a, b) {
12722
+ return proto3.util.equals(_OutputReportContentAwareProbe, a, b);
12723
+ }
12724
+ };
11964
12725
  var OutputReportVideo = class _OutputReportVideo extends Message {
11965
12726
  /**
11966
12727
  * Codec the stream is encoded with, lowercase, e.g. "h264", "hevc", "vp9",
@@ -12917,9 +13678,8 @@ var Job = class _Job extends Message {
12917
13678
  */
12918
13679
  inputVideoId = "";
12919
13680
  /**
12920
- * Auto-generated chapter tracks, one per output whose generated caption track
12921
- * had chapters enabled (SubtitleTrack.generate_chapters). Populated once the
12922
- * auto-chapters pass ships; empty until then.
13681
+ * Never populated; superseded by insights, whose chapters section (and
13682
+ * chapters.vtt file) replaces it.
12923
13683
  *
12924
13684
  * @generated from field: repeated transcodely.v1.ChapterResult chapter_results = 35;
12925
13685
  */
@@ -12951,6 +13711,16 @@ var Job = class _Job extends Message {
12951
13711
  * @generated from field: transcodely.v1.JobCostBreakdown cost_breakdown = 38;
12952
13712
  */
12953
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 = [];
12954
13724
  constructor(data) {
12955
13725
  super();
12956
13726
  proto3.util.initPartial(data, this);
@@ -13053,7 +13823,8 @@ var Job = class _Job extends Message {
13053
13823
  { no: 35, name: "chapter_results", kind: "message", T: ChapterResult, repeated: true },
13054
13824
  { no: 36, name: "clip", kind: "message", T: ClipConfig, opt: true },
13055
13825
  { no: 37, name: "video_id", kind: "scalar", T: 9, opt: true },
13056
- { 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 }
13057
13828
  ]);
13058
13829
  static fromBinary(bytes, options) {
13059
13830
  return new _Job().fromBinary(bytes, options);
@@ -13071,8 +13842,13 @@ var Job = class _Job extends Message {
13071
13842
  var JobFee = class _JobFee extends Message {
13072
13843
  /**
13073
13844
  * Fee discriminator:
13074
- * "processing" — the flat per-job processing fee (see Job.fees).
13075
- * "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.
13076
13852
  *
13077
13853
  * @generated from field: string fee_type = 1;
13078
13854
  */
@@ -14199,6 +14975,15 @@ var Video = class _Video extends Message {
14199
14975
  * @generated from field: repeated transcodely.v1.VideoTextTrack text_tracks = 49;
14200
14976
  */
14201
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 = [];
14202
14987
  /**
14203
14988
  * Storage and cost transparency.
14204
14989
  *
@@ -14363,6 +15148,7 @@ var Video = class _Video extends Message {
14363
15148
  { no: 45, name: "hover_preview_mp4_url", kind: "scalar", T: 9, opt: true },
14364
15149
  { no: 25, name: "renditions", kind: "message", T: VideoRendition, repeated: true },
14365
15150
  { no: 49, name: "text_tracks", kind: "message", T: VideoTextTrack, repeated: true },
15151
+ { no: 53, name: "insights", kind: "message", T: TranscriptInsights, repeated: true },
14366
15152
  {
14367
15153
  no: 30,
14368
15154
  name: "output_size_bytes",
@@ -14590,6 +15376,16 @@ var VideoTextTrack = class _VideoTextTrack extends Message {
14590
15376
  * @generated from field: google.protobuf.Timestamp created_at = 9;
14591
15377
  */
14592
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 = [];
14593
15389
  constructor(data) {
14594
15390
  super();
14595
15391
  proto3.util.initPartial(data, this);
@@ -14647,7 +15443,8 @@ var VideoTextTrack = class _VideoTextTrack extends Message {
14647
15443
  /* ScalarType.BOOL */
14648
15444
  },
14649
15445
  { no: 8, name: "url", kind: "scalar", T: 9, opt: true },
14650
- { 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 }
14651
15448
  ]);
14652
15449
  static fromBinary(bytes, options) {
14653
15450
  return new _VideoTextTrack().fromBinary(bytes, options);
@@ -16800,6 +17597,146 @@ var TopVideo = class _TopVideo extends Message {
16800
17597
  return proto3.util.equals(_TopVideo, a, b);
16801
17598
  }
16802
17599
  };
17600
+ var GetSeoMarkupRequest = class _GetSeoMarkupRequest extends Message {
17601
+ /**
17602
+ * Video ID.
17603
+ *
17604
+ * @generated from field: string video_id = 1;
17605
+ */
17606
+ videoId = "";
17607
+ /**
17608
+ * Absolute https:// URL of YOUR page that shows the video (the page the
17609
+ * markup will be pasted into). Used as the sitemap location and as the base
17610
+ * of every chapter deep link.
17611
+ *
17612
+ * @generated from field: string watch_url = 2;
17613
+ */
17614
+ watchUrl = "";
17615
+ /**
17616
+ * Query parameter your page reads to start playback at a time, in whole
17617
+ * seconds. Default: "t", giving chapter links like
17618
+ * "https://example.com/watch/42?t=95".
17619
+ *
17620
+ * @generated from field: optional string deep_link_param = 3;
17621
+ */
17622
+ deepLinkParam;
17623
+ /**
17624
+ * ISO 639-2 language of the transcript and insights to use, when the video
17625
+ * has more than one. Default: the video's first generated transcript.
17626
+ *
17627
+ * @generated from field: optional string language = 4;
17628
+ */
17629
+ language;
17630
+ constructor(data) {
17631
+ super();
17632
+ proto3.util.initPartial(data, this);
17633
+ }
17634
+ static runtime = proto3;
17635
+ static typeName = "transcodely.v1.GetSeoMarkupRequest";
17636
+ static fields = proto3.util.newFieldList(() => [
17637
+ {
17638
+ no: 1,
17639
+ name: "video_id",
17640
+ kind: "scalar",
17641
+ T: 9
17642
+ /* ScalarType.STRING */
17643
+ },
17644
+ {
17645
+ no: 2,
17646
+ name: "watch_url",
17647
+ kind: "scalar",
17648
+ T: 9
17649
+ /* ScalarType.STRING */
17650
+ },
17651
+ { no: 3, name: "deep_link_param", kind: "scalar", T: 9, opt: true },
17652
+ { no: 4, name: "language", kind: "scalar", T: 9, opt: true }
17653
+ ]);
17654
+ static fromBinary(bytes, options) {
17655
+ return new _GetSeoMarkupRequest().fromBinary(bytes, options);
17656
+ }
17657
+ static fromJson(jsonValue, options) {
17658
+ return new _GetSeoMarkupRequest().fromJson(jsonValue, options);
17659
+ }
17660
+ static fromJsonString(jsonString, options) {
17661
+ return new _GetSeoMarkupRequest().fromJsonString(jsonString, options);
17662
+ }
17663
+ static equals(a, b) {
17664
+ return proto3.util.equals(_GetSeoMarkupRequest, a, b);
17665
+ }
17666
+ };
17667
+ var GetSeoMarkupResponse = class _GetSeoMarkupResponse extends Message {
17668
+ /**
17669
+ * schema.org VideoObject as JSON-LD, ready to place inside
17670
+ * `<script type="application/ld+json">`. Includes name, description,
17671
+ * thumbnailUrl, uploadDate, duration (ISO 8601), embedUrl and, when the
17672
+ * video has ready insights, hasPart Clip key moments from its chapters,
17673
+ * each linking to watch_url at the chapter start. thumbnailUrl and embedUrl
17674
+ * are stable player URLs that never expire (the thumbnail redirects to the
17675
+ * current poster), so the markup can be stored as-is.
17676
+ *
17677
+ * @generated from field: string json_ld = 1;
17678
+ */
17679
+ jsonLd = "";
17680
+ /**
17681
+ * A `<url>` entry for a video sitemap (namespace
17682
+ * xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"), to add
17683
+ * to your sitemap's `<urlset>`.
17684
+ *
17685
+ * @generated from field: string sitemap_entry = 2;
17686
+ */
17687
+ sitemapEntry = "";
17688
+ /**
17689
+ * Server-renderable semantic HTML (no scripts, no styles): a
17690
+ * `<section class="tx-insights">` with the summary, key points and chapter
17691
+ * links (when insights are ready) and the full transcript inside
17692
+ * `<details><summary>Transcript</summary>…</details>`. Empty sections are
17693
+ * omitted.
17694
+ *
17695
+ * @generated from field: string html_fragment = 3;
17696
+ */
17697
+ htmlFragment = "";
17698
+ constructor(data) {
17699
+ super();
17700
+ proto3.util.initPartial(data, this);
17701
+ }
17702
+ static runtime = proto3;
17703
+ static typeName = "transcodely.v1.GetSeoMarkupResponse";
17704
+ static fields = proto3.util.newFieldList(() => [
17705
+ {
17706
+ no: 1,
17707
+ name: "json_ld",
17708
+ kind: "scalar",
17709
+ T: 9
17710
+ /* ScalarType.STRING */
17711
+ },
17712
+ {
17713
+ no: 2,
17714
+ name: "sitemap_entry",
17715
+ kind: "scalar",
17716
+ T: 9
17717
+ /* ScalarType.STRING */
17718
+ },
17719
+ {
17720
+ no: 3,
17721
+ name: "html_fragment",
17722
+ kind: "scalar",
17723
+ T: 9
17724
+ /* ScalarType.STRING */
17725
+ }
17726
+ ]);
17727
+ static fromBinary(bytes, options) {
17728
+ return new _GetSeoMarkupResponse().fromBinary(bytes, options);
17729
+ }
17730
+ static fromJson(jsonValue, options) {
17731
+ return new _GetSeoMarkupResponse().fromJson(jsonValue, options);
17732
+ }
17733
+ static fromJsonString(jsonString, options) {
17734
+ return new _GetSeoMarkupResponse().fromJsonString(jsonString, options);
17735
+ }
17736
+ static equals(a, b) {
17737
+ return proto3.util.equals(_GetSeoMarkupResponse, a, b);
17738
+ }
17739
+ };
16803
17740
 
16804
17741
  // src/webhooks/types.ts
16805
17742
  var WEBHOOK_EVENT_TYPES = [
@@ -16808,6 +17745,8 @@ var WEBHOOK_EVENT_TYPES = [
16808
17745
  "job.failed",
16809
17746
  "job.canceled",
16810
17747
  "job.progress",
17748
+ "job.insights.ready",
17749
+ "job.insights.failed",
16811
17750
  "output.created",
16812
17751
  "output.ready",
16813
17752
  "output.failed",
@@ -18990,7 +19929,7 @@ function backoff(attempt) {
18990
19929
  }
18991
19930
 
18992
19931
  // src/version.ts
18993
- var SDK_VERSION = "0.3.9";
19932
+ var SDK_VERSION = "0.3.11";
18994
19933
  var API_VERSION = "2026-05-03";
18995
19934
  var DEFAULT_BASE_URL = "https://api.transcodely.com";
18996
19935
 
@@ -22782,6 +23721,22 @@ var VideoService = {
22782
23721
  I: ListTopVideosRequest,
22783
23722
  O: ListTopVideosResponse,
22784
23723
  kind: MethodKind.Unary
23724
+ },
23725
+ /**
23726
+ * Get ready-to-paste SEO markup for showing a video on your own page:
23727
+ * schema.org VideoObject JSON-LD (with chapter key moments when the video
23728
+ * has insights), a video sitemap entry, and a server-renderable HTML
23729
+ * fragment with the summary, chapters and full transcript. The video must be
23730
+ * ready and public or unlisted; other videos are refused with
23731
+ * failed_precondition.
23732
+ *
23733
+ * @generated from rpc transcodely.v1.VideoService.GetSeoMarkup
23734
+ */
23735
+ getSeoMarkup: {
23736
+ name: "GetSeoMarkup",
23737
+ I: GetSeoMarkupRequest,
23738
+ O: GetSeoMarkupResponse,
23739
+ kind: MethodKind.Unary
22785
23740
  }
22786
23741
  }
22787
23742
  };
@@ -22938,6 +23893,22 @@ var Videos = class {
22938
23893
  opts
22939
23894
  );
22940
23895
  }
23896
+ /**
23897
+ * Ready-to-paste SEO markup for a hosted video, built for YOUR watch page
23898
+ * (`watchUrl`, absolute https): schema.org VideoObject JSON-LD (with chapter
23899
+ * Clip key moments when insights are ready), a video-sitemap `<url>` entry,
23900
+ * and a server-renderable HTML fragment with the summary, key points,
23901
+ * chapter links and the full transcript. Every string is escaped for its
23902
+ * context; paste it as-is.
23903
+ */
23904
+ async getSeoMarkup(req, opts) {
23905
+ return this.transport.unary(
23906
+ VideoService,
23907
+ VideoService.methods.getSeoMarkup,
23908
+ new GetSeoMarkupRequest(req),
23909
+ opts
23910
+ );
23911
+ }
22941
23912
  };
22942
23913
 
22943
23914
  // src/resources/uploads.ts
@@ -24291,6 +25262,6 @@ var Transcodely = class {
24291
25262
  Transcodely.API_VERSION = API_VERSION;
24292
25263
  Transcodely.SDK_VERSION = SDK_VERSION;
24293
25264
 
24294
- 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 };
25265
+ 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 };
24295
25266
  //# sourceMappingURL=index.mjs.map
24296
25267
  //# sourceMappingURL=index.mjs.map