How to export audio from a iPhone video file with FFmpeg? - audio

UPDATE 1 the problem resides in the input read-stream. (check below)
I am using fluent-ffmpeg (version: 2.1.2) to get a .mp3 file out of a video file that I input as a stream .createReadStream(). I output the file as a .pipe to a remoteWriteStream.
ffmpeg -i pipe:0 -vn -f mp3 -acodec mp3 -movflags frag_keyframe+empty_moov pipe:1
This works fine with .mp4, .webm and .mov (codec: prores) files.
But it somehow does not want to work with a .mov out of an iPhone 11. FFmpeg is not giving me any error when running above code. It creates the .mp3 file but the size is just 152 B and it is not playable.
I ffprobed the iPhone .mov files it returns this:
"{ streams:
[ { index: 0,
codec_name: 'hevc',
codec_long_name: 'H.265 / HEVC (High Efficiency Video Coding)',
profile: 'Main',
codec_type: 'video',
codec_time_base: '1111/33300',
codec_tag_string: 'hvc1',
codec_tag: '0x31637668',
width: 1920,
height: 1080,
coded_width: 1920,
coded_height: 1088,
has_b_frames: 2,
sample_aspect_ratio: '0:1',
display_aspect_ratio: '0:1',
pix_fmt: 'yuv420p',
level: 120,
color_range: 'tv',
color_space: 'bt709',
color_transfer: 'bt709',
color_primaries: 'bt709',
chroma_location: 'unspecified',
field_order: 'unknown',
timecode: 'N/A',
refs: 1,
id: 'N/A',
r_frame_rate: '30000/1001',
avg_frame_rate: '33300/1111',
time_base: '1/600',
start_pts: 'N/A',
start_time: 'N/A',
duration_ts: 6666,
duration: 11.11,
bit_rate: 7611708,
max_bit_rate: 'N/A',
bits_per_raw_sample: 'N/A',
nb_frames: 333,
nb_read_frames: 'N/A',
nb_read_packets: 'N/A',
tags: [Object],
disposition: [Object] },
{ index: 1,
codec_name: 'aac',
codec_long_name: 'AAC (Advanced Audio Coding)',
profile: 'unknown',
codec_type: 'audio',
codec_time_base: '1/44100',
codec_tag_string: 'mp4a',
codec_tag: '0x6134706d',
sample_fmt: 'fltp',
sample_rate: 44100,
channels: 2,
channel_layout: 'stereo',
bits_per_sample: 0,
id: 'N/A',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 'N/A',
start_time: 'N/A',
duration_ts: 489951,
duration: 11.11,
bit_rate: 135091,
max_bit_rate: 192000,
bits_per_raw_sample: 'N/A',
nb_frames: 481,
nb_read_frames: 'N/A',
nb_read_packets: 'N/A',
tags: [Object],
disposition: [Object] },
{ index: 2,
codec_name: 'unknown',
codec_long_name: 'unknown',
profile: 'unknown',
codec_type: 'data',
codec_tag_string: 'mebx',
codec_tag: '0x7862656d',
id: 'N/A',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/600',
start_pts: 'N/A',
start_time: 'N/A',
duration_ts: 6666,
duration: 11.11,
bit_rate: 2670,
max_bit_rate: 'N/A',
bits_per_raw_sample: 'N/A',
nb_frames: 38,
nb_read_frames: 'N/A',
nb_read_packets: 'N/A',
tags: [Object],
disposition: [Object] },
{ index: 3,
codec_name: 'unknown',
codec_long_name: 'unknown',
profile: 'unknown',
codec_type: 'data',
codec_tag_string: 'mebx',
codec_tag: '0x7862656d',
id: 'N/A',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/600',
start_pts: 'N/A',
start_time: 'N/A',
duration_ts: 6666,
duration: 11.11,
bit_rate: 7,
max_bit_rate: 'N/A',
bits_per_raw_sample: 'N/A',
nb_frames: 1,
nb_read_frames: 'N/A',
nb_read_packets: 'N/A',
tags: [Object],
disposition: [Object] },
{ index: 4,
codec_name: 'unknown',
codec_long_name: 'unknown',
profile: 'unknown',
codec_type: 'data',
codec_tag_string: 'mebx',
codec_tag: '0x7862656d',
id: 'N/A',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/600',
start_pts: 'N/A',
start_time: 'N/A',
duration_ts: 6666,
duration: 11.11,
bit_rate: 18117,
max_bit_rate: 'N/A',
bits_per_raw_sample: 'N/A',
nb_frames: 333,
nb_read_frames: 'N/A',
nb_read_packets: 'N/A',
tags: [Object],
disposition: [Object] } ],
format:
{ filename: 'pipe:0',
nb_streams: 5,
nb_programs: 0,
format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
format_long_name: 'QuickTime / MOV',
start_time: 'N/A',
duration: 11.11,
size: 'N/A',
bit_rate: 'N/A',
probe_score: 100,
tags:
{ major_brand: 'qt ',
minor_version: '0',
compatible_brands: 'qt ',
creation_time: '2020-01-11T12:33:36.000000Z',
'com.apple.quicktime.make': 'Apple',
'com.apple.quicktime.model': 'iPhone 11',
'com.apple.quicktime.software': '13.3',
'com.apple.quicktime.creationdate': '2020-01-11T13:33:36+0100' } },
chapters: [] }"
The created .mp3 file results in a undefined.
I already tried to take the .mov re-encode it to an .mp4 via ffmpeg and then try the above code to get the .mp3 - still does not work.
Any advice how I can make this work?
thanks!
UPDATE 1
The problem resides in the input stream! When I download the file to the local machine and input it as as a local file, not as a read stream, it works perfectly.
I am creating the stream from a google cloud bucket like this:
const myBucket = storage.bucket('myBucket');
const remoteReadStream = myBucket.file(file).createReadStream();
Since this code is perfectly working with all other codecs, what maybe the issue while creating the read stream from the google cloud from a h265 file?

Related

Google Speech To Text API: Get word confidences for the interim results in real time

I am using the google speech to text API in Node.js.
I'm doing the following
googleSpeechClient.streamingRecognize({
config: {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
enableAutomaticPunctuation: true,
metadata: {
interactionType: 'PHONE_CALL',
microphoneDistance: 'NEARFIELD',
originalMediaType: 'VIDEO',
recordingDeviceType: 'PC'
},
model: 'video',
useEnhanced: true,
enableWordConfidence: true,
enableWordTimeOffsets: true,
diarizationConfig: {
enableSpeakerDiarization: true,
minSpeakerCount: 1,
maxSpeakerCount: 6
},
},
interimResults: true,
single_utterance: false
})
and when I give it a short clip from The Wolf of Wall Street, the responses I get are like this for the interim results:
{
results: [
{
alternatives: [{
words: [],
transcript: 'Hey John, thank you for your vote of confidence and welcome to the',
confidence: 0
}],
isFinal: false,
stability: 0.8999999761581421,
resultEndTime: [Object],
channelTag: 0,
languageCode: 'en-us'
},
{
alternatives: [{ words: [], transcript: ' investor Center.', confidence: 0 }],
isFinal: false,
stability: 0.009999999776482582,
resultEndTime: [Object],
channelTag: 0,
languageCode: 'en-us'
}
],
error: null,
speechEventType: 'SPEECH_EVENT_UNSPECIFIED'
}
and like this for the results marked as final:
{
words: [
{
startTime: [Object],
endTime: [Object],
word: 'Hey',
confidence: 0.550264298915863,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'John,',
confidence: 0.7241439819335938,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'thank',
confidence: 0.9128385782241821,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'you',
confidence: 0.7003968358039856,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'for',
confidence: 0.7170425057411194,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'your',
confidence: 0.9128385782241821,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'vote',
confidence: 0.7738808989524841,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'of',
confidence: 0.7003968358039856,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'confidence',
confidence: 0.5876403450965881,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'and',
confidence: 0.9128385782241821,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'welcome',
confidence: 0.9128385782241821,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'to',
confidence: 0.7243974208831787,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'the',
confidence: 0.657508909702301,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'investors',
confidence: 0.6374689936637878,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'Center.',
confidence: 0.7192383408546448,
speakerTag: 0
},
{
startTime: [Object],
endTime: [Object],
word: 'Bye-bye.',
confidence: 0.6980124115943909,
speakerTag: 0
}
],
transcript: 'Hey John, thank you for your vote of confidence and welcome to the investors Center. Bye-bye.',
confidence: 0.7401091456413269
}
Is there any way to get the word confidences for the interim results?
Thanks for any help or insights!
Unfortunately there is no way to get word confidences on interim results. The confidence is set up in a way that, it will be only populated when is_final=true. See document reference.
confidence - The confidence estimate between 0.0 and 1.0. A higher
number indicates an estimated greater likelihood that the recognized
words are correct. This field is set only for the top alternative of a
non-streaming result or, of a streaming result where is_final=true.
This field is not guaranteed to be accurate and users should not rely
on it to be always provided. The default of 0.0 is a sentinel value
indicating confidence was not set.
But you can try and create a speech to text API feature request to output the word confidence in the interim results.

Channel cache is incoherent

I've built a few functions to table channel & category information, one of which runs when the bot starts to make sure everything is synced.
The problem I've run into is that bot.channels.cache contains channels that no longer exist, or states of a channel that no longer exists. For example, I only have one channel in the server called "general". Yet, there are 3 separate entries for that channel by name, and only one contains the ID (711043006781849686) of the current "general" channel:
import Discord from 'discord.js'
import config from '../config.js'
const bot = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION'] })
bot.login(config.botToken)
bot.on('ready', async () => {
console.log(bot.channels.cache)
}
-- returns --
Collection(46) [Map] {
...
'711043006781849686' => <ref *16> TextChannel {
type: 'text',
deleted: false,
id: '711043006781849686',
name: 'general',
rawPosition: 10,
parentID: '711043007197216880',
permissionOverwrites: Collection(3) [Map] {
'711043006253367426' => [PermissionOverwrites],
'711043006295179347' => [PermissionOverwrites],
'861109585930747934' => [PermissionOverwrites]
},
topic: 'General chat channel.',
nsfw: false,
lastMessageID: '860794574707752980',
rateLimitPerUser: 0,
lastPinTimestamp: null,
guild: Guild {
members: [GuildMemberManager],
channels: [GuildChannelManager],
roles: [RoleManager],
presences: [PresenceManager],
voiceStates: [VoiceStateManager],
deleted: false,
available: true,
id: '711043006253367426',
shardID: 0,
name: 'Omegabox',
icon: null,
splash: null,
discoverySplash: null,
region: 'us-central',
memberCount: 5,
large: false,
features: [Array],
applicationID: null,
afkTimeout: 900,
afkChannelID: '711043009944223832',
systemChannelID: '711043006781849686',
embedEnabled: undefined,
premiumTier: 0,
premiumSubscriptionCount: 0,
verificationLevel: 'NONE',
explicitContentFilter: 'DISABLED',
mfaLevel: 0,
joinedTimestamp: 1589597389528,
defaultMessageNotifications: 'ALL',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 100000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLCode: null,
vanityURLUses: null,
description: null,
banner: null,
rulesChannelID: null,
publicUpdatesChannelID: null,
preferredLocale: 'en-US',
ownerID: '598729034867933195',
emojis: [GuildEmojiManager]
},
messages: MessageManager {
cacheType: [class LimitedCollection extends Collection],
cache: [LimitedCollection [Map]],
channel: [Circular *16]
},
_typing: Map(0) {}
},
...
'827343616678559757' => <ref *33> TextChannel {
type: 'text',
deleted: false,
id: '827343616678559757',
name: 'general',
rawPosition: 0,
parentID: '827343616678559755',
permissionOverwrites: Collection(0) [Map] {},
topic: null,
lastMessageID: '830245759152291860',
rateLimitPerUser: 0,
lastPinTimestamp: null,
guild: Guild {
members: [GuildMemberManager],
channels: [GuildChannelManager],
roles: [RoleManager],
presences: [PresenceManager],
voiceStates: [VoiceStateManager],
deleted: false,
available: true,
id: '827343616678559754',
shardID: 0,
name: 'Megabox Emojis 1',
icon: null,
splash: null,
discoverySplash: null,
region: 'us-west',
memberCount: 3,
large: false,
features: [],
applicationID: null,
afkTimeout: 300,
afkChannelID: null,
systemChannelID: '827343616678559757',
embedEnabled: undefined,
premiumTier: 0,
premiumSubscriptionCount: 0,
verificationLevel: 'NONE',
explicitContentFilter: 'DISABLED',
mfaLevel: 0,
joinedTimestamp: 1617380998194,
defaultMessageNotifications: 'ALL',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 100000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLCode: null,
vanityURLUses: null,
description: null,
banner: null,
rulesChannelID: null,
publicUpdatesChannelID: null,
preferredLocale: 'en-US',
ownerID: '598729034867933195',
emojis: [GuildEmojiManager]
},
messages: MessageManager {
cacheType: [class LimitedCollection extends Collection],
cache: [LimitedCollection [Map]],
channel: [Circular *33]
},
nsfw: false,
_typing: Map(0) {}
},
...
'827344454259703842' => <ref *34> TextChannel {
type: 'text',
deleted: false,
id: '827344454259703842',
name: 'general',
rawPosition: 0,
parentID: '827344454259703840',
permissionOverwrites: Collection(0) [Map] {},
topic: null,
lastMessageID: '827580681730261032',
rateLimitPerUser: 0,
lastPinTimestamp: null,
guild: Guild {
members: [GuildMemberManager],
channels: [GuildChannelManager],
roles: [RoleManager],
presences: [PresenceManager],
voiceStates: [VoiceStateManager],
deleted: false,
available: true,
id: '827344454259703838',
shardID: 0,
name: 'Megabox Emojis 2',
icon: null,
splash: null,
discoverySplash: null,
region: 'us-west',
memberCount: 3,
large: false,
features: [],
applicationID: null,
afkTimeout: 300,
afkChannelID: null,
systemChannelID: '827344454259703842',
embedEnabled: undefined,
premiumTier: 0,
premiumSubscriptionCount: 0,
verificationLevel: 'NONE',
explicitContentFilter: 'DISABLED',
mfaLevel: 0,
joinedTimestamp: 1617381010142,
defaultMessageNotifications: 'ALL',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 100000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLCode: null,
vanityURLUses: null,
description: null,
banner: null,
rulesChannelID: null,
publicUpdatesChannelID: null,
preferredLocale: 'en-US',
ownerID: '598729034867933195',
emojis: [GuildEmojiManager]
},
messages: MessageManager {
cacheType: [class LimitedCollection extends Collection],
cache: [LimitedCollection [Map]],
channel: [Circular *34]
},
nsfw: false,
_typing: Map(0) {}
}
}
I'm aware that there is a category named "General" (ID: 711043007197216880), but the casing is different which is maintained in an entry. I've filtered that one out, along with everything else that isn't "general" from the above block.
What am I missing here? Possible to sync things up?
Always have an epiphany right after finally making a post.
Been at this for hours and never realized that in this specific call I'm not specifying what guild, or rather what server. The bot is in multiple servers, and I've already got the current server's ID in the config I'm working with.
Changed bot.channels.cache to bot.guilds.cache.get(config.guildId).channels.cache.

stripe subscription using node js

I am doing stripe subscription using node js Api's when i go to subscription under dashboard its created subscription but it gives status incomplete,no payment deduction occurs
if i am doing through dashboard its create the subscription with active status
id: 'sub_INTyoOKF5bt1ib',
object: 'subscription',
application_fee_percent: null,
billing_cycle_anchor: 1605199862,
billing_thresholds: null,
cancel_at: null,
cancel_at_period_end: false,
canceled_at: null,
collection_method: 'charge_automatically',
created: 1605199862,
current_period_end: 1605286262,
current_period_start: 1605199862,
customer: 'cus_INTyfeuOhg9XDC',
days_until_due: null,
default_payment_method: null,
default_source: null,
default_tax_rates: [],
discount: null,
ended_at: null,
items: {
object: 'list',
data: [ [Object] ],
has_more: false,
total_count: 1,
url: '/v1/subscription_items?subscription=sub_INTyoOKF5bt1ib'
},
latest_invoice: 'in_1Hmj0lLm4uTMGNUSyogmK9TA',
livemode: true,
metadata: {},
next_pending_invoice_item_invoice: null,
pause_collection: null,
pending_invoice_item_interval: null,
pending_setup_intent: null,
pending_update: null,
plan: {
id: 'price_1HlYMvLm4uTMGNUSarJML52T',
object: 'plan',
active: true,
aggregate_usage: null,
amount: 100,
amount_decimal: '100',
billing_scheme: 'per_unit',
created: 1604920625,
currency: 'inr',
interval: 'day',
interval_count: 1,
livemode: true,
metadata: {},
nickname: null,
product: 'prod_IMGu6PI2mJbBCi',
tiers_mode: null,
transform_usage: null,
trial_period_days: null,
usage_type: 'licensed'
},
quantity: 1,
schedule: null,
start_date: 1605199862,
status: 'incomplete',
transfer_data: null,
trial_end: null,
trial_start: null
}
*********latest invoice and payment intent
id: 'sub_INkoNdFnS5DaZR',
object: 'subscription',
application_fee_percent: null,
billing_cycle_anchor: 1605262511,
billing_thresholds: null,
cancel_at: null,
cancel_at_period_end: false,
canceled_at: null,
collection_method: 'charge_automatically',
created: 1605262511,
current_period_end: 1605348911,
current_period_start: 1605262511,
customer: 'cus_INkoPwPjgIyGbV',
days_until_due: null,
default_payment_method: null,
default_source: null,
default_tax_rates: [],
discount: null,
ended_at: null,
items: {
object: 'list',
data: [ [Object] ],
has_more: false,
total_count: 1,
url: '/v1/subscription_items?subscription=sub_INkoNdFnS5DaZR'
},
latest_invoice: {
id: 'in_1HmzJDLm4uTMGNUSmbbqqwR7',
object: 'invoice',
account_country: 'IN',
account_name: 'Walkify',
account_tax_ids: null,
amount_due: 100,
amount_paid: 0,
amount_remaining: 100,
application_fee_amount: null,
attempt_count: 0,
attempted: true,
auto_advance: true,
billing_reason: 'subscription_create',
charge: null,
collection_method: 'charge_automatically',
created: 1605262511,
currency: 'inr',
custom_fields: null,
customer: 'cus_INkoPwPjgIyGbV',
customer_address: {
city: 'Mangaliya,Indore',
country: 'IN',
line1: '',
line2: '',
postal_code: null,
state: 'India'
},
customer_email: 'abc#gmail.com',
customer_name: 'Ravi R',
customer_phone: '',
customer_shipping: null,
customer_tax_exempt: 'none',
customer_tax_ids: [],
default_payment_method: null,
default_source: null,
default_tax_rates: [],
description: null,
discount: null,
discounts: [],
due_date: null,
ending_balance: 0,
footer: null,
hosted_invoice_url: 'https://invoice.stripe.com/i/acct_1HZVL5Lm4uTMGNUS/invst_INkotPj0f800RnPxEA5u8Lzw7IR6Dvy',
invoice_pdf: 'https://pay.stripe.com/invoice/acct_1HZVL5Lm4uTMGNUS/invst_INkotPj0f800RnPxEA5u8Lzw7IR6Dvy/pdf',
last_finalization_error: null,
lines: {
object: 'list',
data: [Array],
has_more: false,
total_count: 1,
url: '/v1/invoices/in_1HmzJDLm4uTMGNUSmbbqqwR7/lines'
},
livemode: true,
metadata: {},
next_payment_attempt: null,
number: 'A77E89AD-0001',
paid: false,
payment_intent: {
id: 'pi_1HmzJDLm4uTMGNUSRu34ggsq',
object: 'payment_intent',
amount: 100,
amount_capturable: 0,
amount_received: 0,
application: null,
application_fee_amount: null,
canceled_at: null,
cancellation_reason: null,
capture_method: 'automatic',
charges: [Object],
client_secret: 'pi_1HmzJDLm4uTMGNUSRu34ggsq_secret_7Sk56e79TEjpt3EQSI4a7CS5a',
confirmation_method: 'automatic',
created: 1605262511,
currency: 'inr',
customer: 'cus_INkoPwPjgIyGbV',
description: 'Subscription creation',
invoice: 'in_1HmzJDLm4uTMGNUSmbbqqwR7',
last_payment_error: null,
livemode: true,
metadata: {},
next_action: [Object],
on_behalf_of: null,
payment_method: 'pm_1HmzJBLm4uTMGNUSeROzE4C9',
payment_method_options: [Object],
payment_method_types: [Array],
receipt_email: null,
review: null,
setup_future_usage: 'off_session',
shipping: null,
source: null,
statement_descriptor: null,
statement_descriptor_suffix: null,
status: 'requires_action',
transfer_data: null,
transfer_group: null
},
period_end: 1605262511,
period_start: 1605262511,
post_payment_credit_notes_amount: 0,
pre_payment_credit_notes_amount: 0,
receipt_number: null,
starting_balance: 0,
statement_descriptor: null,
status: 'open',
status_transitions: {
finalized_at: 1605262511,
marked_uncollectible_at: null,
paid_at: null,
voided_at: null
},
subscription: 'sub_INkoNdFnS5DaZR',
subtotal: 100,
tax: null,
total: 100,
total_discount_amounts: [],
total_tax_amounts: [],
transfer_data: null,
webhooks_delivered_at: 1605262511
},
livemode: true,
metadata: {},
next_pending_invoice_item_invoice: null,
pause_collection: null,
pending_invoice_item_interval: null,
pending_setup_intent: null,
pending_update: null,
plan: {
id: 'price_1HlYMvLm4uTMGNUSarJML52T',
object: 'plan',
active: true,
aggregate_usage: null,
amount: 100,
amount_decimal: '100',
billing_scheme: 'per_unit',
created: 1604920625,
currency: 'inr',
interval: 'day',
interval_count: 1,
livemode: true,
metadata: {},
nickname: null,
product: 'prod_IMGu6PI2mJbBCi',
tiers_mode: null,
transform_usage: null,
trial_period_days: null,
usage_type: 'licensed'
},
quantity: 1,
schedule: null,
start_date: 1605262511,
status: 'incomplete',
transfer_data: null,
trial_end: null,
trial_start: null
}
Stripe account country is india and card is also india

Is there a chance to get a printer paper and ink status in NodeJS on Windows?

I try to use Node.JS with the plugin node-printer (on Windows) to find out the status, if the paper or the ink is empty. Is that possible somehow? Because node-printer only gives me informations about jobs and says "PRINTING RETAINED" but not the real problem, that shows off in the printer screen. Like "Paper empty" or "Ink empty".
const printer = require("printer")
console.log(printer.getPrinter("CANON SELPHY CP1300"))
Output:
/*
{ name: 'Canon SELPHY CP1300',
portName: 'USB001',
driverName: 'Canon SELPHY CP1300',
printProcessor: 'winprint',
datatype: 'RAW',
status: [],
statusNumber: 0,
attributes: [ 'DO-COMPLETE-FIRST', 'LOCAL' ],
priority: 1,
defaultPriority: 0,
averagePPM: 0,
jobs: [ { id: 7,
name: 'Canon SELPHY CP1300',
printerName: 'Canon SELPHY CP1300',
user: 'Leon',
format: 'NT EMF 1.008',
priority: 1,
size: 3161316,
status: [ 'PRINTING', 'RETAINED' ],
machineName: '\\\\DESKTOP-DUMDTFI',
document: 'Testseite',
notifyName: 'Leon',
printProcessor: 'winprint',
driverName: 'Canon SELPHY CP1300',
position: 1,
startTime: 0,
untilTime: 0,
totalPages: 1,
time: 97482546,
pagesPrinted: 0 } ] }
*/

after docusign custom tab update auto font change

I'm trying to implement embeded signing using docusign, where we have two different recipients. After the first recipient signs, I'm updating custom tab values for the second recipient which is working as expected.
The issue is after the tabs are updated their fonts getting auto changed.
After the update I did list the tab properties, both (updated and the original) have same properties.
original:
{
height: 11,
validationPattern: '',
validationMessage: '',
shared: 'false',
requireInitialOnSharedChange: 'false',
requireAll: 'false',
name: 'xxxx',
value: 'xxxx',
originalValue: 'xxxx',
width: 102,
required: 'true',
locked: 'true',
concealValueOnDocument: 'false',
disableAutoSize: 'false',
maxLength: 4000,
tabLabel: 'xxxx',
font: 'lucidaconsole',
fontColor: 'black',
fontSize: 'size12',
documentId: '1',
recipientId: '1',
pageNumber: '1',
xPosition: '252',
yPosition: '323',
tabId: 'xxxx',
templateLocked: 'false',
templateRequired: 'false' }
updated:
{
height: 11,
isPaymentAmount: 'false',
validationPattern: '',
validationMessage: '',
shared: 'false',
requireInitialOnSharedChange: 'false',
requireAll: 'false',
name: 'xxxx',
value: 'xxxx',
originalValue: 'xxxx',
width: 102,
required: 'true',
locked: 'true',
concealValueOnDocument: 'false',
disableAutoSize: 'false',
maxLength: 4000,
tabLabel: 'xxxx',
font: 'lucidaconsole',
bold: 'false',
italic: 'false',
underline: 'false',
fontColor: 'black',
fontSize: 'size12',
documentId: '1',
recipientId: '2',
pageNumber: '1',
xPosition: '251',
yPosition: '337',
tabId: 'xxxx',
templateLocked: 'false',
templateRequired: 'false' }
The various update methods in the DocuSign eSignature REST API are update methods, not patch methods.
Therefore, when you call an update method, you need to supply all of the object's parameters, using either the current value or your updated value for the parameters.
If you don't know the object's current values, first do a get operation.

Resources